使用 ARM 交叉工具链进入同一文件中定义的函数时出现分段错误

Segmentation fault when stepping into a function defined in the same file using an ARM cross-toolchain

我有这个简化的例子,

int myf(void) {
    int a = 1;
    int b = 2;
    return a + b;
}

int main(void) {
    int sum = myf();  // <--- bp here
    printf("Result: %d\n", sum);
    return 0;
}

我在 int sum = myf() 处有一个断点并且我 运行 调试器。 Gdb 此时成功停止,但进入命令(进入 myf)会导致分段错误。如果我直接在 myf 和 运行 调试器中放置一个 bp,那么调试器会按预期停止在那里,没问题。在共享库中,甚至断点都不起作用。他们被完全忽略了。进入共享库代码会导致相同的分段错误。

越过功能也“损坏”了。跨过代码有时会跳转到随机(我认为)位置,比如在名为 dl-minimal.c

的文件中

如果只是 运行 且未调试,代码的行为符合预期。

出现分段错误时在调试器控制台中获得的其他有用信息:

查看完整的 dbg 控制台输出的打印屏幕:

该错误仅在对 ARM 板 (i.MX6) 使用交叉工具链时可重现。我在 Linux 机器上本地调试时没有这样的问题。我正在使用 qtCreator 5.15。我的交叉工具链是用 yocto 和 bitbake 构建的。

关于可能原因的任何提示?

设置 GDB 搜索路径 - 在 Tools->Options->Debugger 中。在 Additional Startup Commands 框中。将正确的 sysroot 放在那里(对应于您 运行ning 来自的平台),然后从本地机器跟随共享库调试构建的完整路径。

此外,请确保 运行 作为普通用户(在 Tools->Options->Devices 中设置)- 尽管您在部署时需要切换到 root 用户。