gpt4 book ai didi

c++ - 逆向工程 OSX 用户诊断报告堆栈跟踪

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:06 27 4
gpt4 key购买 nike

我想查明用 C/C++ 编写的应用程序究竟在哪里失败。我无法直接调试应用程序,既不使用 gdb/lldb 也不使用 IDE,因为应用程序是由程序启动的(它是 webots 机器人模拟软件的机器人 Controller )。在 OSX 控制台中,我可以找到一份“用户诊断报告”,它甚至在崩溃时显示了一条轨迹。我只需要找出崩溃发生在我的源代码中的确切位置,但我不理解以下堆栈跟踪语法:

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: EXC_I386_GPFLT

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libsystem_c.dylib 0x00007fff92d6b859 strtol_l + 77
1 controller_2 0x0000000100006b57 main + 4839
2 controller_2 0x00000001000010b4 start + 52

显然在我的 int main() {} 函数中某处 (+4839) 某些东西最终调用了 strtol_l(必须是间接的,因为有导致崩溃的 Controller 代码中没有出现此函数调用。

+ 4839 代表什么?它是内存块偏移量吗?它不能是源代码行号,因为 Controller 的源代码只有约 1200 行,并且 Controller 未使用调试信息编译。

最佳答案

您可以在 gdb 中调试机器人 Controller 进程,方法是使用带有要调试的机器人 Controller 进程的 PID 的 gdb attach 命令。这将允许 gdb 动态附加进程并调试它,就好像它最初是从 gdb 启动的一样。这在此处的 Webots 文档中有很好的解释:http://www.cyberbotics.com/dvd/common/doc/webots/guide/section5.5.html

关于c++ - 逆向工程 OSX 用户诊断报告堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30519200/

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