2016-05-18 18 views
7

私は散発的に失敗するプログラムを持っていますが、同じエラーがあります。それをデバッグするには、失敗するまでブレークポイントを設定して再実行するまでGDBの下で実行したいと思います。GDBでプログラムを何度も再実行するには?

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

しかし、私は、たとえば、「このプログラムを100回実行する」GDBを教えてくださいどのようにどこにも見つけることができません: は私が何をしますか。

+1

名前を 'my_program()'に変更し、 'my_program()'を100回呼び出す 'int main()'を追加しますか? (これは 'atexit() 'などでやるトリッキーなプログラムのいくつかが壊れるかもしれないが、回避策として役立つかもしれないことは分かっている) – DevSolar

+3

これを100回実行するためのbashまたはdosスクリプトを書く。 – Gregg

+0

@Greggこれは唯一の解決策だと思われます – sotona

答えて

5

この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 
5

それが失敗したり、ループを破るはCtrl +Cを押すまで私は考えることができる最も簡単な解決策は、ループしながら、無限にプログラムを実行することです。

(gdb) while 1 
>run 
>end 
+0

ショート&シンプルなソリューション:) –

関連する問題