1

在调试 Step Over(f6​​) 时更新到 xcode 11.3 时开始表现类似于 Step Into(f7)。

重现步骤

  1. 为 macOS 命令行工具创建一个新的 Xcode 项目

  2. 用这个改变 main.cpp

    #include <iostream>
    void test() {
        std::cout<<"test";
    }
    
    int main(int argc, const char * argv[]) {
        test();
        return 0;
    }
    
  3. 转到项目构建设置并添加-Wl,-no_function_starts到“其他链接器标志”

  4. test在调用函数的行添加断点并开始调试

  5. 当断点被击中时尝试 Step Over(f6​​)

  6. 它的行为类似于 Step Into(f7) 并进入测试函数,而不是进入下一个 return 语句。


删除-no_function_starts标志解决了问题

但我想知道为什么使用标志?它的描述在这里

-no_function_starts
默认情况下,链接器会在最终链接映像的 LINKEDIT 中创建一个函数起始地址压缩表。此选项禁用该行为。

这个函数起始地址表的重要性是什么?为什么有人会禁用它?它如何影响跨步的 xcode 行为?

4

0 回答 0