c++ - 使用 ARM 跨工具链进入同一文件中定义的函数时出现段错误

标签 c++ segmentation-fault arm gdb qt-creator

我有这个简化的例子,

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 的文件中。
如果代码只是简单地运行而不是调试,它的行为将符合预期。
当我收到段错误错误时,我在调试器控制台中获得的其他有用信息:
  • 没有函数包含指定地址
  • 反汇编程序失败:无法访问地址 0xe7f001dc
  • 处的内存

    查看完整的 dbg 控制台输出的打印屏幕:
    enter image description here
    仅当对 ARM 板 (i.MX6) 使用交叉工具链时,该错误才可重现。在 Linux 机器上进行本地调试时,我没有这样的问题。我正在使用 qtCreator 5.15。我的跨工具链是用 yocto 和 bitbake 构建的。
    关于可能原因的任何提示?

    最佳答案

    设置 GDB 搜索路径 - 在 Tools->Options->Debugger .在 Additional Startup Commands盒子。将正确的 sysroot 放在那里(对应于您正在运行的平台),然后从本地计算机跟随您的共享库调试构建的完整路径。
    此外,请确保以普通用户身份运行(在 Tools->Options->Devices 中设置) - 尽管在部署时需要切换到 root 用户。

    关于c++ - 使用 ARM 跨工具链进入同一文件中定义的函数时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63469757/

    相关文章:

    c - 段错误 - 将命令分割成标记

    c - 字符数组的段错误

    c++ - 隐藏/显示所有窗口并恢复 Z 顺序

    c++ - 类的二维 vector ,如何引用

    c++ - AC_CHECK_LIB在mingw64中失败

    linux - 'BL' arm指令反汇编如何工作?

    c - Eclipse:C 项目文件夹结构

    arm - 如何使用 QEMU 的简单跟踪后端?

    c++ - 在不同的类中使用单例

    c++ - 单链表的困惑