【问题标题】: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】:

      一种可能的解决方案是将库源代码与您的项目一起编译,这样您就可以像进入代码库一样进入库(因为它在此时)。我不知道调试库代码的另一种方法。

      【讨论】:

        猜你喜欢
        • 2011-10-10
        • 1970-01-01
        • 2016-09-02
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多