gpt4 book ai didi

linux-kernel - 如何在 GDB 中 'reload' 源文件

转载 作者:行者123 更新时间:2023-12-03 10:55:30 35 4
gpt4 key购买 nike

gdb中是否有命令我可以用来(重新)加载/“刷新”源文件吗? (据我所知,gdb 仅适用于源 目录 ,根据 Debugging with GDB: Source -并且没有“刷新”的特定命令)

关于我的问题的背景:

我使用带有调试内核的虚拟机,因此可以连接到 gdb 的本地实例,并且可以调试内核模块。模块编译时使用调试信息,这指定了保存模块源的文件夹(Instruct GDB 6.5 to use source embedded in object file - Stack Overflow)。我在 VM 和本地计算机的相同路径中都有源目录。

问题是——我需要做很多步骤才能让模块出现段错误——以及远程 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文件!!

所以我撤消了这些更改——但不幸的是,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.

...希望它会以某种方式“重新加载”源文件 - 但不幸的是, list /media/src/mymodule.h:954表明它没有,没有任何改变 - 即使 gdb 认识到某些事情已经改变,如 warning: Source file is more recent than executable. ...(因此,我暂时必须重新启动整个 VM 和 gdb :( :( )

最佳答案

使用 directory 重置目录列表命令似乎具有预期的效果。

关于linux-kernel - 如何在 GDB 中 'reload' 源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4118207/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com