好的,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>
是否有一个命令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,并完成整个过程以使内核模块再次发生段错误:( …