【问题标题】:How to re-run program in GDB several times?如何在 GDB 中多次重新运行程序?
【发布时间】:2016-05-18 12:39:12
【问题描述】:

我有一个程序偶尔会失败,但出现同样的错误。为了调试它,我想在 GDB 下运行它直到它失败,设置断点并重新运行它。 我该怎么办:

gdb --args /path/to/program <program args>

但是我找不到任何地方,例如,我如何告诉 GDB“运行这个程序 100 次”。

【问题讨论】:

  • main() 重命名为my_program() 并添加一个调用my_program() 100 次的int main()? (我知道这可能会破坏一些使用 atexit() 等的复杂程序,但它可能是一种解决方法。)
  • 编写一个bash或dos脚本运行100次。
  • @Gregg 这似乎是唯一的解决方案
  • 我建议使用 gdb 脚本。例如看这个问题:stackoverflow.com/questions/10748501/…
  • 是否有任何终止条件或者您想准确地运行程序 100 次?

标签: debugging gdb


【解决方案1】:

我能想到的最简单的解决方案是在无限循环中运行程序,直到它失败或者你按下 Ctrl+C 来中断循环。

(gdb) while 1
 >run
 >end

【讨论】:

    【解决方案2】:

    这个 gdb 脚本将运行程序 100 次,或者直到它收到一个信号。 $_siginfo 如果程序因信号而停止,则为非无效,如果程序退出,则为无效。据我所知,任何进程停止,包括断点、观察点和单步执行,都会将 $_siginfo 设置为某个值。

    set $n = 100
    while $n-- > 0
      printf "starting program\n"
      run
      if $_siginfo
        printf "Received signal %d, stopping\n", $_siginfo.si_signo
        loop_break
      else
        printf "program exited\n"
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2010-09-09
      • 2011-08-05
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 2011-04-12
      相关资源
      最近更新 更多