2014-01-15 34 views
1

有没有办法在使用GDB执行main()函数之前调试链接错误或任何类型的错误?在使用GDB的main()之前调试错误

+0

您会如何调试*链接*错误? –

+0

什么样的错误?软件异常?硬件异常?返回的错误代码? –

+0

在gdb之前使用valgrind –

回答

4

Is there anyway to debug a link error

想必你是问有关运行链接错误(例如`错误:libfoo.so:没有这样的文件或目录“),而不是你的构建过程中(静态)链接步骤。

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

or any kind of error that may occur before the execution of the main() function using GDB?

任何其他类型的错误,例如, SIGSEGV可以“正常”调试 - 对于信号你根本不需要做任何事情 - GDB就会停下来。对于其他错误,照常设置一个断点。

0

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

gdb somebinary 

GNU GDB(Ubuntu的/ Linaro的7.4-2012.04-0ubuntu2.1)7.4-2012.04 等。

info file 

Symbols from "somebinary".

Local exec file:

`/somebinary', file type elf64-x86-64.

Entry point: 0x4045a4, etc.

break *0x4045a4 
run 

...Breakpoint 1, 0x00000000004045a4 in ??()

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

+0

这不适合我。我只是按照你描述的方式添加一个bp,但我仍然收到以下错误: binary_file_name:加载共享库时出错:.1:无法打开共享对象文件:没有这样的文件或目录 –

+1

这可能意味着一个的动态库缺失。试试这个:“LD_DEBUG = all binary_file”,看看这告诉你什么。 – dbrank0