我想找出用 C/C++ 编写的应用程序到底在哪里失败。我无法直接调试应用程序,既不使用 gdb / lldb 也不使用 IDE,因为该应用程序是由程序启动的(它是 webots 机器人模拟软件的机器人控制器)。在 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
显然,+4839
在我的int main() {}
函数中某处()最终调用了某些东西strtol_l
(必须是间接的,因为在控制器代码中没有出现此函数调用),这会导致崩溃。
代表什么+ 4839
?它是内存块偏移量吗?它不能是源代码行号,因为控制器的源代码只有约 1200 行,并且控制器未使用调试信息编译。