Tengo el siguiente código de muestra
#include<stdio.h> int main() { int num1, num2; printf("Enter two numbers\n"); scanf("%d",&num1); scanf("%d",&num2); int i; for(i = 0; i < num2; i++) num1 = num1 + num1; printf("Result is %d \n",num1); return 0; }Compilé este código con la opción -g para gcc.
gcc -g file.cGenerar archivo de símbolo separado
objcopy --only-keep-debug a.out a.out.symQuitar los símbolos de a.out
strip -s a.outCargue esto a.out en gdb
gdb a.outgdb dice "no se encontró información de depuración" bien. Luego uso el comando add-symbol-file en gdb
(gdb) add-symbol-file a.out.debug [Enter] The address where a.out.debug has been loaded is missingSé que gdb tiene otro archivo de símbolos de comando, pero sobrescribe los símbolos cargados anteriormente. Así que tengo que usar este comando para agregar muchos archivos de símbolos en gdb. mi sistema es de 64 bits con ubuntu LTS 12.04, la versión gdb es 7.4-2012.04, la versión gcc es 4.6.3
objcopy --only-keep-debug a.out a.out.sym
Si desea que GDB cargue el a.out.sym automáticamente , siga los pasos descritos aquí (tenga en cuenta en particular que debe realizar el paso "agregar .gnu_debuglink ").
Esta dirección representa QUÉ
La dirección que GDB quiere es la ubicación de la sección .text del binario. Para encontrarlo, use readelf -WS a.out . P.ej
$ readelf -WS /bin/date There are 28 section headers, starting at offset 0xe350: Section Headers: [Nr] Name Type Address Off Size ES Flg Lk Inf Al [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 [ 1] .interp PROGBITS 0000000000400238 000238 00001c 00 A 0 0 1 ... [13] .text PROGBITS 0000000000401900 001900 0077f8 00 AX 0 0 16 Aquí, desea dar GDB 0x401900 como la dirección de carga.