【问题标题】:How can I rerun a program with gdb until a segmentation fault occurs?如何使用 gdb 重新运行程序,直到出现分段错误?
【发布时间】:2011-09-26 14:36:39
【问题描述】:

我的程序有段错误的问题,但是很少出错(20次或更多一次),在GDB中调试,我需要手动重新运行程序,直到出现段错误(重新运行半天只有一次失败:()。

所以问题是,有没有办法告诉 GDB 重新运行程序,直到出现一些段错误?

【问题讨论】:

    标签: gdb


    【解决方案1】:

    在触发run 命令的程序的出口处放置一个断点,不要忘记set pagination off。 gdb 文档的Breakpoint Command Lists 部分提供了有关设置命令的信息。简而言之:

    set pagination off
    break _exit
    commands
    run
    end
    

    commands 行之后,您会看到接下来的两行作为到达断点时要执行的命令输入。

    【讨论】:

    • 在退出函数处下断点,“break exit commands run end”:)
    • 这适用于我的情况,但它运行了 5 次,然后我必须按回车键继续,然后再运行 5 次。这是正常的吗?
    • 答案似乎是在 gdb 中“设置分页关闭”
    • lldb 的等价物是什么?
    • @montefuscolo 如果子进程干净退出,这将运行并退出,如果出现段错误,则将您转储到交互式 lldb 中:“lldb -o run -b /path/to/binary -- args args args " 所以你可以将它包装在一个 shell 循环中以获得所需的效果。 "while lldb -o run -b /path/to/binary -- args args args;做睡眠 1;完成"
    【解决方案2】:
    (gdb) set pagination off
    (gdb) break exit
    (gdb) commands
    >run
    >end
    (gdb) run
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 2013-11-30
      • 2013-09-13
      • 1970-01-01
      相关资源
      最近更新 更多