如何解决使用ARM跨工具链进入同一文件中定义的功能时出现分段错误
我有这个简化的例子,
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控制台输出,请参见打印屏幕:
仅当将交叉工具链用于ARM板(i.MX6)时,该错误才可重现。在Linux机器上进行本地调试时,我没有这样的问题。我正在使用qtCreator 5.15。我的跨工具链是使用yocto和bitbake构建的。
关于可能原因的任何提示吗?
解决方法
在Tools->Options->Debugger
中设置GDB搜索路径。在Additional Startup Commands
框中。在那里放置正确的sysroot(对应于您从其运行的平台),并从本地计算机遵循共享库调试构建的完整路径。
此外,请确保以普通用户身份运行(在{{1}中设置)-尽管部署时需要切换为root用户。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。