我是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启动程序。