源和exe不同步:注释行似乎在gdb中调用函数

时间:2015-04-14 15:23:21

标签: c debugging gdb

我是GDB调试的新手,我正在努力解决以下问题:我需要知道何时调用函数endpage(),所以我使用

设置断点
(gdb) b endpage

我运行程序,点击断点并查看调用堆栈:

(gdb) bt
#0  endpage () at ./szreptf.c:652
#1  0x0807ef91 in _repstr (s=0x80ac780 "") at mntrep.c:1818
#2  0x0807eef9 in repstr (s=0x80aa0f0 "") at mntrep.c:1798
[...]
#9  0x08052894 in main (argc=2, argv=0xbfb01994) at ./szmainf.c:514

这个函数的调用是一个注释行,并在那个空!

(gdb) l mntrep.c:1818
1813    //  extern int pdf_page_length;     /* sydenham - imanage project */
1814    //#endif /*I_MANAGE_SITE*/
1815    //
1816    //  if( !repcanwrite() )                
1817    //      return;
1818    //       
1819    //  if( keychst() == 'Q' && rep.pfquit != NULLFN)
1820    //      (*rep.pfquit)(); // Calls endpage() in szreptf.c 
1821    //  
1822    //  if( rep.on == 'C' )

这条线最初没有被评论过,但我试图看看GDB是否正在查看正确的文件,它是:我在该文件中做出的任何更改,我可以使用l命令在GDB中看到它。

但是由于某种原因,endpage()仍然被突然调用,所以看起来GDB向我显示的文件不是我编译的文件。

所以我的问题是: GDB在调试时如何决定显示哪个文件?我认为它是从可执行文件中推断出来的,但显然事实并非如此。

任何线索?

提前致谢:)

编辑:我忘了提及它,但我将GDB附加到正在运行的程序中,我没有用GDB启动程序。

0 个答案:

没有答案