阻止GDB逐步执行glibc函数

时间:2017-01-02 19:31:01

标签: c debugging gdb output

对于不起眼的标题感到抱歉,想不出更好的事情。

当我通过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(或按 Enter )。
  • 我几乎看不到程序的输出,因为它隐藏在无意义的信息中。
  • 如果我反复按 Enter ,我经常会错过我正在寻找的Seg Fault。

如何告诉gdb退出打印这样的行?

1273     in fileops.c

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

3 个答案:

答案 0 :(得分:2)

  

如何告诉gdb退出打印这样的行?

使用step命令,您要求 GDB准确打印此信息。

如果您不想要该信息,则应停止询问

  

我经常想念我正在寻找的Seg Fault。

如果您只是run,GDB会在您获得SIGSEGV后自动停止,您不能错过。

您可能想要的是在SIGSEGV之前的某个时间停留在您的代码中,然后从那里开始。有几种技术可以实现这一点,reverse debugging就是其中之一。使用replay debugging是另一个。

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

答案 1 :(得分:2)

您确定需要在@extends('layouts.app') @section('navbar-dropdown') <li><a class="blue-text waves-effect" href="#!">Create Project</a></li> <li><a class="blue-text waves-effect" href="#!">Manage Projects</a></li> <li class="divider"></li> <li><a class="blue-text waves-effect" href="#!">Settings</a></li> <li><a class="blue-text waves-effect" href="{{ url('auth/logout') }}">Logout</a></li> <li class="divider"></li> <li><a class="blue-text waves-effect" href="#!">Help</a></li> <li><a class="blue-text waves-effect" href="#!">Report a Problem</a></li> @endsection 中逐步执行glibc代码吗?

如果您只想调试自己的代码,那么在进入代码并继续调试代码后,fileops.c当前框架应该退出finish函数。

答案 2 :(得分:1)

这就是step的工作原理 - 它通过代码步骤

断点怎么样?如果您设置了一个,调试器将停在那里,让您手动单步执行代码。

对于中断执行的分段错误或类似信号,当程序停止以获取有关位置执行停止的信息时,您可以runbacktrace。然后在那里设置断点,程序将停在违规指令处。