0

何らかの理由で、初期化中に SIGSEGV を生成してキャッチするガベージ コレクターを使用しています。

もちろん、デフォルトでは GDB がシグナルをキャッチします。私が最初にしたことはhandle SIGSEGV pass nostop noprint、下級者に合図を渡して続行することでした。

ただし、開発中にセグメンテーション違反が珍しくないため、これは面倒です。デバッグを開始するたびに、inferior を停止したり、ハンドラーを再初期化したり、実行を継続したりせずに、GDB にエラーをキャッチしてもらいたいと思っています。

これは、シグナル フックを使用して簡単に実現できますが、そのためのドキュメントは見つかりませんでした。

要するに、シグナルの最初の発生のみを渡す方法はありますか?

4

1 に答える 1

2

gdb の新しいバージョンには、まさにこの理由から「キャッチ シグナル」があります。次のことができるようになりました。

handle SIGSEGV nostop noprint pass
catch signal SIGSEGV
commands
  handle SIGSEGV stop print nopass
  # .. your breakpoint number here
  disable 1
  cont
end

これはまだ完全ではありません (最初の SEGV で「次へ」行くと干渉します) が、かなり良いです。

于 2013-08-01T21:06:22.413 に答える