代码之家  ›  专栏  ›  技术社区  ›  sdaau

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

  •  20
  • sdaau  · 技术社区  · 15 年前

    里面有命令吗 gdb 据我所见, gdb公司 目录 ,根据 Debugging with GDB: Source )

    我的问题背景:

    gdb公司 Instruct GDB 6.5 to use source embedded in object file - Stack Overflow ). 在VM和本地计算机中,源目录都位于相同的路径中。

    问题是这个-我需要做相当多的步骤,以使模块到segfault-和远程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) 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.
    

    ... 希望它能以某种方式“重新加载”源文件-但不幸的是, 表明它没有,没有任何改变-尽管 认识到有些事情已经改变了,如 warning: Source file is more recent than executable. 所以,目前,我必须重启整个虚拟机 gdb公司 )

    3 回复  |  直到 9 年前
        1
  •  35
  •   nandhp    15 年前

    使用 directory 命令似乎具有所需的效果。

        2
  •  5
  •   Eduardo J. Sanchez    10 年前

    https://www.cs.rochester.edu/~nelson/courses/csc_173/review/gdb.html :

      (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++)
    
        3
  •  0
  •   Manoj    10 年前

    此警告意味着从中生成二进制文件的源文件将更新为新的更改。 若要删除此警告,请使用新文件和修改过的文件重新生成正在调试的二进制文件。