我想调试一个我没有符号文件的应用程序。我知道如果我缺少必要的调试信息,就必须在汇编级别进行调试。由于我没有调试符号,我不能直接在方法名称上设置断点,但是我仍然应该能够在地址上设置断点。
所以我只是尝试在入口地址上设置一个断点,这就是我所做的:
user@MacBookAir$ gdb
(gdb) file someexecutable
(gdb) info file
最后一个命令返回以下入口点:
得到地址后,我简单地说:
(gdb) break *0x0000000100119ec8
(gdb) run
不幸的是,目标应用程序启动时没有在入口点中断,所以我再次尝试,但这次我确实在入口点地址之后的几个地址上设置了断点 - 没有成功。
下一次尝试是尝试Igor Skochinsky在这个问题中发布的解决方案(在 GDB 中的第一条机器代码指令处停止)来设置断点:
(gdb) b _start
(gdb) b start
但是这两个命令都导致了相同的错误:
没有加载符号表。使用“文件”命令。
嗯,是的,显然我需要调试符号才能正常工作。然后我想也许它只是显示了一个不正确的入口点地址,所以我用命令验证了它:
user@MacBookAir$ otool -l someexecutable
并收到以下输出:
所以它似乎与 GDB 返回的入口点相同。现在我不知道我还能尝试什么。:) 也许你们知道我还能尝试什么。任何帮助将不胜感激。如果有不清楚的地方或者我错过了一些重要信息,请留下简短的评论。