usar nucleo modificar kernels descargar compilar como linux-kernel gdb

linux kernel - nucleo - Cómo ''recargar'' los archivos fuente en GDB



linux kernel version (3)

Desde https://www.cs.rochester.edu/~nelson/courses/csc_173/review/gdb.html :

Después de cambiar el programa, vuelva a cargar el ejecutable con el comando de archivo

(gdb) file gdbprog A program is being debugged already. Kill it? (y or n) y Load new symbol table from "gdbprog"? (y or n) y Reading symbols from gdbprog... done. Breakpoint 1 at 0x2298: file gdbprog.cc, line 10. (gdb) run Starting program: gdbprog Breakpoint 1, InitArrays (array=0x18be8) at gdbprog.cc:10 10 for(i = 0;i < 10;i++)

¿Hay algún comando en gdb que pueda usar para (re) cargar / "actualizar" los archivos fuente? ( Por lo que puedo ver, gdb funciona solo con directorios de origen, de acuerdo con Depurar con GDB: Source - y no hay un comando específico para "actualizar" )

Antecedentes sobre mi problema:

Utilizo una máquina virtual con un kernel de depuración, por lo que puedo conectarme a una instancia local de gdb , y puedo depurar los módulos del kernel. Los módulos se compilan con información de depuración y esto especifica las carpetas donde se guarda la fuente de los módulos ( Indique a GDB 6.5 que use la fuente incrustada en el archivo objeto - Desbordamiento de pila ). Tengo los directorios de origen en la misma ruta (s) tanto en la máquina virtual como en la máquina local.

El problema es este: necesito hacer un poco de pasos para que el módulo funcione correctamente y el gdb remoto entre en la pila. Luego hago un seguimiento y puedo ver los archivos de origen referenciados, es decir,

#0 0xc0132a13 in ?? () #1 0xc056e551 in ?? () #2 0xc056e506 in ?? () #3 0xd8be53f3 in mymodule_func1 (var1=0xd79f9b44, var2=0x0, var3=825269148) at /media/src/mymodule.h:954 #4 0xd8be53d0 in mymodule_func2 (data=3617561412) at /media/src/mymodule.h:936 #5 0xc014fe87 in ?? () #6 0xc0151478 in ?? ()

Entonces trato de decir, list /media/src/mymodule.h:954 - ¡¡y me doy cuenta de que he cambiado cosas en la versión local del archivo mymodule.h !!

Así que deshago los cambios, pero desafortunadamente, ¡GDB no ve estos cambios! Y, por supuesto, no quiero reiniciar GDB, porque eso significa que tengo que reiniciar la máquina virtual y realizar todo el procedimiento para que el módulo del kernel vuelva a fallar :( !!

Entonces trato de hacer algo como esto:

(gdb) show symbol-reloading Dynamic symbol table reloading multiple times in one run is off. (gdb) set symbol-reloading on (gdb) add-symbol-file ~/mymodule.o 0xd8be4000 add symbol table from file "/media/src/mymodule.o" at .text_addr = 0xd8be4000 (y or n) y Reading symbols from /media/src/mymodule.o...done.

... con la esperanza de que de alguna manera "vuelva a cargar" los archivos de origen, pero desafortunadamente, la list /media/src/mymodule.h:954 muestra que no lo hace, nada ha cambiado, aunque gdb reconoce que algo ha cambiado , como en la warning: Source file is more recent than executable. ... ( así que, por el momento, tengo que reiniciar toda la VM y gdb también :( :( )


Esta advertencia significa que los archivos de origen a partir de los cuales se creó el binario se actualizan con nuevos cambios. Para eliminar esta advertencia, solo reconstruya el binario que está depurando con archivos nuevos y modificados.


Restablecer la lista de directorios usando el comando de directory parece tener el efecto deseado.