私は散発的に失敗するプログラムを持っていますが、同じエラーがあります。それをデバッグするには、失敗するまでブレークポイントを設定して再実行するまでGDBの下で実行したいと思います。GDBでプログラムを何度も再実行するには?
gdb --args /path/to/program <program args>
しかし、私は、たとえば、「このプログラムを100回実行する」GDBを教えてくださいどのようにどこにも見つけることができません: は私が何をしますか。
私は散発的に失敗するプログラムを持っていますが、同じエラーがあります。それをデバッグするには、失敗するまでブレークポイントを設定して再実行するまでGDBの下で実行したいと思います。GDBでプログラムを何度も再実行するには?
gdb --args /path/to/program <program args>
しかし、私は、たとえば、「このプログラムを100回実行する」GDBを教えてくださいどのようにどこにも見つけることができません: は私が何をしますか。
この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
それが失敗したり、ループを破るはCtrl +Cを押すまで私は考えることができる最も簡単な解決策は、ループしながら、無限にプログラムを実行することです。
(gdb) while 1
>run
>end
ショート&シンプルなソリューション:) –
名前を 'my_program()'に変更し、 'my_program()'を100回呼び出す 'int main()'を追加しますか? (これは 'atexit() 'などでやるトリッキーなプログラムのいくつかが壊れるかもしれないが、回避策として役立つかもしれないことは分かっている) – DevSolar
これを100回実行するためのbashまたはdosスクリプトを書く。 – Gregg
@Greggこれは唯一の解決策だと思われます – sotona