gdb
ドキュメントは膨大で、探しているものを見つけるのは難しいですが、それを実現するにはちょっとしたスクリプトを微調整するだけです。
終了時に、gdb
は、終了コード値に$_exitcode
を設定します。
segvが発生した場合、値は変更されません。だから、私の考えは、それをいくつかのばかげた価値(私は244を選んだ)に設定して実行することでした。しかし、戻りコードが実行コマンドの後に、まだ244であれば、その後、
警告(多分それを行うための別の方法があります)ループを終了:先行ハック(それが動作します)
set $i=0
while($i<100)
set $i = $i+1
set $_exitcode = 244
r
if $_exitcode==244
set $i = 200
end
end
私はそれをテストしました対話型プログラム。セグメンテーションフォルトをトリガするために通常の実行、およびy
ためn
を入力し(まあ、それはないトリガーそれだろうが、それが起こるためには良いチャンスがあります)GDBセッション中
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("want segfault?\n");
char c = getchar();
if (c=='y')
{
printf("%s", 'a'); // this is broken on purpose, to trigger segfault
}
return 0;
}
テスト:
(gdb) source gdbloop.txt
[New Thread 6216.0x1d2c]
want segfault?
n
[Inferior 1 (process 6216) exited normally]
[New Thread 7008.0x1264]
want segfault?
n
[Inferior 1 (process 7008) exited normally]
[New Thread 8000.0x2754]
want segfault?
y
Breakpoint 1, 0x76b2d193 in wtoi() from C:\windows\syswow64\msvcrt.dll
(gdb)
だから、segfaultが起動されたときにプロンプトが出ます。
関連:https://stackoverflow.com/questions/6545763/how-can-i-rerun-a-program-with-gdb-until-a-segmentation-fault-occurs –
ページ設定をオフにする+終了時にブレークする私にとってはうまくいかなかったかもしれないし、多分私はそれを間違って使っている(私はGDBを初めて使っている)。 – Netap
関連https://stackoverflow.com/q/37299926/72178 – ks1322