使用GDB在main()之前调试错误

时间:2014-01-15 21:55:06

标签: c++ gcc gdb shared-libraries

是否有调试链接错误或使用GDB执行main()函数之前可能发生的任何错误?

2 个答案:

答案 0 :(得分:4)

  

无论如何都要调试链接错误

大概是你在询问运行时链接错误(例如`错误:libfoo.so:没有这样的文件或目录'),而不是关于构建过程的(静态)链接步骤。

诀窍是在exit或(Linux上的exit_group)系统调用上设置断点,例如catch syscall exit。然后,您将在放弃运行二进制文件的位置停在ld.so内。

  

或使用GDB执行main()函数之前可能出现的任何错误?

任何其他类型的错误,例如SIGSEGV可以“正常”调试 - 对于信号你根本不需要做任何事情 - GDB将停止。对于其他错误,只需像往常一样设置断点。

答案 1 :(得分:0)

在调试初始化代码的过程中(即使你没有符号)也是这样的:

gdb somebinary

GNU gdb(Ubuntu / Linaro 7.4-2012.04-0ubuntu2.1)7.4-2012.04 等

info file
  

来自“somebinary”的符号。

     

本地exec文件:

     

`/ somebinary',文件类型为elf64-x86-64。

     

入口点:0x4045a4等

break *0x4045a4
run
  

......断点1,0x00000000004045a4在? ()

从这里开始,你可以照常进行。