【问题标题】:How do I attach sources to a prebuilt static C library in Eclipse如何在 Eclipse 中将源附加到预构建的静态 C 库
【发布时间】:2014-08-11 20:38:49
【问题描述】:
我有一个预构建的静态库 (.a) 及其源代码。如何附加源代码以便在使用 gdb 在 Eclipse 中进行调试时逐步完成它?
【问题讨论】:
标签:
c++
c
eclipse
debugging
android-ndk
【解决方案1】:
如果您的库没有使用调试选项(gcc -g,假设您使用的是 gcc)编译,您将无法单步执行源代码。最简单的方法是在 Eclipse 中以调试模式自己编译库,然后将您的程序与新编译的库链接。
【解决方案2】:
我无法发表评论,但我可以添加更多细节 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”)构建时...
【解决方案3】:
一种可能的解决方案是将库源代码与您的项目一起编译,这样您就可以像进入代码库一样进入库(因为它在此时)。我不知道调试库代码的另一种方法。