gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:11:15 25 4
gpt4 key购买 nike

我有这个简化的例子,

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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com