2017-01-02 55 views
-1

对不起,不伦不类的标题步进,也想不出什么更好的主意。停止从GDB通过glibc的功能

当我通过GDB运行我的程序找到分段错误,我得到数千这种垃圾的行

(gdb) step 
_IO_new_file_xsputn (f=0x76fa0b40 <_IO_2_1_stdout_>, data=0x7efff284, n=7) at fileops.c 
1279 fileops.c: No such file or directory. 
(gdb) step 
1273 in fileops.c 
(gdb) step 
1279 in fileops.c 
(gdb) step 
1286 in fileops.c 
(gdb) step 
1288 in fileops.c 
(gdb) step 
1289 in fileops.c 
(gdb) step 
1292 in fileops.c 
(gdb) step 
1294 in fileops.c 
(gdb) step 
1292 in fileops.c 

...和和和。它使调试非常困难和乏味,因为:

  • 我必须键入step(或按回车)反复。
  • 我几乎看不到我的程序的输出,因为它隐藏在毫无意义的信息中。
  • 如果我按重复输入,我经常想念我在寻找赛格故障。

我怎么能告诉GDB退出打印这样的线?

1273  in fileops.c 

有没有我可以使用一些配置文件或命令行选项?

+1

你确定需要浏览'fileops.c'中的glibc代码吗?你可以'完成'去掉'_IO_new_file_xsputn'函数并继续调试你的代码。 – ks1322

+0

@ ks1322我认为这是我正在寻找的;我会尽快尝试。你可以把它放在答案中? –

+1

相关:[防止GDB进入函数(或文件)](http://stackoverflow.com/questions/1133365/preventing-gdb-from-stepping-into-a-function-or-file)。参见'skip'命令。 –

回答

2

您确定您需要浏览fileops.c中的glibc代码吗?

如果你只想调试你自己的代码,你应该在函数中走出_IO_new_file_xsputn函数,并且继续调试你的代码。

1

这就是step如何工作 - 它步骤 s通过代码。

约断点

什么?如果你设置了一个,那么调试器就会在那里停下来,让你手动完成代码。

对于像分割故障或类似的信号,中止执行,您可以runbacktrace当程序已经停止,以获得关于该位置停止执行的信息。然后在那里设置断点,程序将在违规指令处停止。

2

我怎么能告诉GDB退出打印这样的线?

通过使用step命令,你要求 GDB打印正是这种信息。

如果你不想要那个信息,你应该停止询问

我经常想念我在寻找赛格故障。

如果你只是run,当你得到SIGSEGV时,GDB会自动停止,你不能错过这个。

什么你可能要的是SIGSEGV前停止代码中的某个时间,并从那里一步。有几种技术可以实现这一点,reverse debugging就是其中之一。使用replay debugging是另一个。

很难提供更多的建议,因为你没有显示你是实际上试图做的。