У меня есть встроенная статическая библиотека (.a) и исходный код для нее. Как подключить источник, чтобы я мог выполнить его во время отладки в Eclipse с помощью gdb?
Я не могу комментировать, но я могу добавить более подробный ответ 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")...
Вы не можете пройти через исходный код, если ваша библиотека не была скомпилирована с опцией debug (gcc -g, если вы используете gcc). Проще всего было бы собрать библиотеку самостоятельно в Eclipse, в режиме отладки, а затем связать свою программу с недавно скомпилированной библиотекой.
Возможное решение состоит в том, чтобы скомпилировать источник библиотеки с вашим проектом, который позволит вам войти в библиотеку так, как если бы она содержала ваш код (так как в данный момент). Я не знаю другого метода для отладки кода библиотеки.