有没有办法在使用GDB执行main()函数之前调试链接错误或任何类型的错误?在使用GDB的main()之前调试错误
回答
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就会停下来。对于其他错误,照常设置一个断点。
途中调试初始化代码(即使你没有符号)是这样的:
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 ??()
从这里开始,您可以照常进行。
这不适合我。我只是按照你描述的方式添加一个bp,但我仍然收到以下错误: binary_file_name:加载共享库时出错:.1:无法打开共享对象文件:没有这样的文件或目录 –
这可能意味着一个的动态库缺失。试试这个:“LD_DEBUG = all binary_file”,看看这告诉你什么。 – dbrank0
- 1. 分割错误之前main()
- 2. 执行main之前的分段错误
- 3. 在使用gdb在Eclipse中调试简单C++时,“没有可用于main()”的源代码错误
- 4. 使用gdb调试回调
- 5. GDB远程调试失败,错误E01
- 6. FB.getLoginStatus()调用之前调用FB.init()错误
- 7. 用gdb调试
- 8. 使用GDB调试模板
- 9. 使用gdb来调试C++
- 10. 使用gdb调试pthreads
- 11. 使用gdb调试qemu
- 12. 使用gdb调试conio.h
- 13. 如何使用GDB调试
- 14. 使用GDB调试Android
- 15. 使用GDB调试iPhone
- 16. 使用GDB进行调试
- 17. 使用gdb调试Java .jar
- 18. 使用gdb调试llvm pass
- 19. 使用GDB调试进程
- 20. 错误:试图在'deviceready'之前调用cordova.exec()。忽略
- 21. 使用GDB和C++调试内存错误
- 22. Codelite调试器错误:找不到gdb! 'gdb'?
- 23. 用gdb调试C
- 24. 在Linux中使用gdb调试Firebreath
- 25. 在Windows下使用GDB调试DLL
- 26. break * main VS break main()在GDB中
- 27. main()之前崩溃()
- 28. 如何查找在C++之前调用的代码函数main
- 29. swift错误自我。在super.init()调用之前使用
- 30. 在没有显示错误的情况下调试GDB中断
您会如何调试*链接*错误? –
什么样的错误?软件异常?硬件异常?返回的错误代码? –
在gdb之前使用valgrind –