我有一个预构建的静态库(.a)及其源代码。我如何附加源代码以便在使用gdb在Eclipse中进行调试时可以逐步完成它?
答案 0 :(得分:6)
如果您的库尚未使用调试选项编译(gcc -g,假设您使用的是gcc),则无法单步执行源代码。最简单的方法是在Eclipse中自己编译库,在调试模式下,然后将程序链接到新编译的库。
答案 1 :(得分:1)
一种可能的解决方案是使用您的项目编译库源代码,这样您就可以像进入代码一样进入库(因为它就在这一点上)。我不知道另一种调试库代码的方法。
答案 2 :(得分:1)
我无法评论,但我可以添加一些更详细的WRT @ massimo的答案。很快,除非你有一个用“-g”编译的库,否则它无法帮助你。但还有更多......
在GCC世界中,使用“-g”构建可以做很多事情。除了它保留的所有符号之外,它还将源目录和代码文件的原始位置保存在“.debug_info”部分中:
objdump -g liblib_g.a
lib_g.o: file format elf64-x86-64
Contents of the .debug_info section:
Compilation Unit @ offset 0x0:
Length: 0x8d (32-bit)
Version: 4
Abbrev Offset: 0x0
Pointer Size: 8
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
<c> DW_AT_producer : (indirect string, offset: 0x0): GNU C 4.8.1 -mtune=generic -march=x86-64 -g -fstack-protector
<10> DW_AT_language : 1 (ANSI C)
<11> DW_AT_name : (indirect string, offset: 0xec): lib.c
<15> DW_AT_comp_dir : (indirect string, offset: 0x86): /home/me/path/to/my/archive
<19> DW_AT_low_pc : 0x0
<21> DW_AT_high_pc : 0x15
<29> DW_AT_stmt_list : 0x0
...it goes on and on...
完成此操作后,GDB将知道源代码所在的位置,并且单步执行代码当然会有效。
现在,如果它是用“-g”构建的,还是在其他地方(比如......其他一些计算机......)?好吧,当你尝试单步执行代码时,Eclipse会提示你去找它:
或者您可以自己设置:
此时,Eclipse应该足够了解所有内容!再次......这是当且仅当库是用调试符号构建的(是的,“ - g”)......