里面有命令吗gdb
我可以用它来(重新)加载/“刷新”源文件? (据我所知,gdb
仅适用于源目录, 根据使用 GDB 调试:源代码 http://davis.lbl.gov/Manuals/GDB/gdb_8.html- 并且没有特定的“刷新”命令)
我的问题的背景:
我使用带有调试内核的虚拟机,因此我可以连接到本地实例gdb
,并且可以调试内核模块。模块是在调试信息打开的情况下编译的,这指定了保存模块源的文件夹(指示GDB 6.5使用目标文件中嵌入的源代码 - VoidCC https://stackoverflow.com/questions/1579443/instruct-gdb-6-5-to-use-source-embedded-in-object-file)。我的源目录位于虚拟机和本地计算机的相同路径中。
问题是这样的 - 我需要执行相当多的步骤才能使模块出现段错误 - 并使远程 gdb 进入堆栈。然后我进行回溯,我可以看到引用的源文件,即
#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 ?? ()
然后我试着说,list /media/src/mymodule.h:954
- 我意识到我已经改变了本地版本的内容mymodule.h
file!!
所以我撤消了更改 - 但不幸的是,GDB 没有看到这些更改!当然,我不想重新启动 GDB - 因为这意味着我必须重新启动 VM,并完成整个过程才能使内核模块再次出现段错误:(!!
然后我尝试做这样的事情:
(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.
... in hope that it will somehow "reload" the source files - but unfortunately, list /media/src/mymodule.h:954
shows that it doesn't, nothing is changed - even though gdb
does recognize that something has changed, as in warning: Source file is more recent than executable.
... (so, for the time being, I have to restart entire VM and gdb
as well :( :( )