是否有一个命令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) 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.
Run Code Online (Sandbox Code Playgroud)
...希望它能以某种方式"重新加载"源文件 - 但不幸的list /media/src/mymodule.h:954是,它表明它没有,没有任何改变 - 尽管gdb 它确实发现某些事情发生了变化,例如warning: Source file is more recent than executable....(所以,当时是的,我必须重新启动整个VM,gdb以及:( :(  )
来自https://www.cs.rochester.edu/~nelson/courses/csc_173/review/gdb.html:
更改程序后,使用file命令重新加载可执行文件
  (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++)
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           20127 次  |  
        
|   最近记录:  |