Как мне присоединить исходные тексты к предварительно созданной статической библиотеке C в Eclipse

#c #c #eclipse #debugging #android-ndk

#c #c #eclipse #отладка #android-ndk

Вопрос:

У меня есть предварительно созданная статическая библиотека (.a) и исходный код для нее. Как мне присоединить исходный код, чтобы я мог просматривать его во время отладки в Eclipse с помощью gdb?

Комментарии:

1. Это может помочь: sourceware.org/gdb/onlinedocs/gdb/Source-Path.html Обратите внимание, что вы также можете установить исходные каталоги в своем файле .gdbinit, что может помочь.

Ответ №1:

Вы не сможете просмотреть исходный код, если ваша библиотека не была скомпилирована с опцией отладки (gcc -g, при условии, что вы используете gcc). Проще всего было бы самостоятельно скомпилировать библиотеку в Eclipse в режиме отладки, а затем связать вашу программу с недавно скомпилированной библиотекой.

Ответ №2:

Я не могу комментировать, но я могу добавить более подробную информацию об ответе @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 предложит вам найти его:

введите описание изображения здесь

или вы можете настроить его самостоятельно:

  • Откройте «Конфигурации отладки» и отредактируйте текущую конфигурацию отладки:

нажмите здесь, чтобы начать

  • Когда вы откроете это меню, выберите свою конфигурацию (возможно, название проекта), а затем вкладку «Источник»:

вкладка quot;Добавить исходный кодquot;

  • Нажмите кнопку «Добавить» и выберите «Сопоставление путей» (затем, конечно, нажмите «ОК»):

выберите добавить сопоставление путей

  • Сопоставьте исходный путь (в разделе «Путь компиляции») с путем, в котором вы сохранили код (щелкните точки в поле «Путь к локальной файловой системе» — откроется проводник файловой системы):

сопоставьте это с

На этом этапе Eclipse должен знать достаточно, чтобы пройти через все! Снова… это тогда и только тогда, когда библиотека была собрана с отладочными символами (да, «-g»)…

Ответ №3:

Возможным решением является компиляция исходного кода библиотеки в ваш проект, что позволит вам войти в библиотеку так, как если бы в ней находился ваш код (поскольку он находится на этом этапе). Я не знаю другого метода отладки кода библиотеки.