相关疑难解决方法(0)

让gdb保存断点列表?

好的,info break列出了断点,但是没有使用在这个问题中使用--command重用它们的格式.gdb是否有一种方法可以将它们转储到可接受输入的文件中?有时在调试会话中,有必要在构建一组断点进行测试后重新启动gdb.

编辑: .gdbinit文件与--command具有相同的问题.info break命令不列出命令,而是列出供人消费的表.

详细说明,这是一个来自info break的示例:

(gdb) info break
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x08048517 <foo::bar(void)+7>

c c++ debugging gdb breakpoints

125
推荐指数
6
解决办法
4万
查看次数

如何在GDB中"重新加载"源文件

是否有一个命令gdb,我可以用来(重新)加载/"刷新"源文件?(据我所知,gdb只能使用源目录,根据使用GDB调试:源代码 - 并且没有特定的命令来"刷新")

关于我的问题的背景:

我使用带有调试内核的虚拟机,因此我可以连接到本地实例gdb,并可以调试内核模块.这些模块使用调试信息进行编译,这指定了保存模块源的文件夹(指示GDB 6.5使用嵌入在目标文件中的源 - 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 ?? ()
Run Code Online (Sandbox Code Playgroud)

然后我试着说,list /media/src/mymodule.h:954- 我意识到我已经改变了本地版本的mymodule.h文件!!

所以我撤消了这些变化 - 但不幸的是,GDB没有看到这些变化!而且,当然,我不想重新启动GDB - 因为这意味着我必须重新启动VM,并完成整个过程以使内核模块再次发生段错误:( …

gdb linux-kernel

24
推荐指数
2
解决办法
2万
查看次数

标签 统计

gdb ×2

breakpoints ×1

c ×1

c++ ×1

debugging ×1

linux-kernel ×1