如何将源附加到Eclipse中的预构建静态C库

时间:2014-06-21 04:22:46

标签: c++ c eclipse debugging android-ndk

我有一个预构建的静态库(.a)及其源代码。我如何附加源代码以便在使用gdb在Eclipse中进行调试时可以逐步完成它?

3 个答案:

答案 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会提示你去找它:

enter image description here

或者您可以自己设置:

  • 打开“调试配置”并编辑当前的调试配置:

click here to start

  • 当您打开该菜单时,选择您的配置(可能是项目名称),然后选择“来源”标签:

add source tab

  • 点击“添加”按钮,然后选择“路径映射”(当然,点击“确定”):

select add path mapping

  • 将原始路径(在“编译路径”下)映射到您已存储代码的路径(单击“本地文件系统路径”中的点 - 这将打开文件系统资源管理器):

map that thang

此时,Eclipse应该足够了解所有内容!再次......这是当且仅当库是用调试符号构建的(是的,“ - g”)......