1

デバッグに gdb を使用していますが、セグメンテーション フォールトが発生し、メイン関数に別のブレーク ポイントを設定して、プログラムを最初から実行したいのですが、現在の実行を終了し、「The program is not not」と表示されます。実行されている」

「リスト」を入力すると

それはライブラリファイルのコードスニペットを示しています。これは、現在私がメイン関数にいないことを意味します

プログラムを再実行すると、main() の先頭にブレーク ポイントを設定しても、セグメンテーション エラーが発生します。これは、プログラムがライブラリ ファイル内で実行されていることを意味します。

では、main() 関数に戻る方法は? ありがとう!

ヒント: 私は libpcap.h を使用しており、コンパイル時に「-lpcap」オプションを使用しています。

ところで、ブレーク 9 を使用してブレークポイントを 9 に設定すると、gdb はプログラムを 11 行目まで実行しますか? この不正確さの何が問題になっていますか? ありがとう!

4

3 に答える 3

1

runコマンドを再発行するだけです。プログラムの状態は失われますが、必要なものと一致すると思われるブレークポイントは失われません。

于 2013-03-15T12:35:14.180 に答える
0

プログラムを再実行すると、main() の先頭にブレーク ポイントを設定しても、セグメンテーション エラーが発生します。これは、プログラムがライブラリ ファイル内で実行されていることを意味します。

実際には、main関数にブレークポイントを設定できなかったか、プログラムの実行が到達せずmain、セグメンテーション違反が発生したことを意味します。次の手順を試してください。

  1. デバッグ情報 ( -ggcc オプション) を使用してプログラムを最初から再構築します。ブレークポイントをリセットし、gdb からの警告を監視します。
  2. ブレークポイントを設定してもプログラムがクラッシュする場合mainは、スタック トレース ( btgdb のコマンド) を参照してください。おそらく以前に発生しており、スタック トレースにmainは表示されません。main
于 2013-03-16T09:05:58.217 に答える
0

「ところで、ブレーク 9 を使用してブレークポイントを 9 に設定すると、gdb はプログラムを 11 行目まで実行します」-これから、およびあなたが提供した他の情報から、おそらくソース コードが同期していないように思えますソース行へのアドレスの gdb のマッピング。ひょっとしてプログラムを編集していませんか?再コンパイルして gdb を再起動しましたか? 「実行可能ファイルがソースよりも新しい」のような警告を見たことがありますか?

于 2013-03-15T13:22:40.763 に答える