問題なくコンパイルできる C 言語の大規模なプログラムがありますが、実行すると (./a.out)、バス エラー 10 が発生します。gdb デバッガーを使用してメモリ エラーを追跡しましたが、奇妙なことに、プログラムは gdb 内で正常に完了します。
1034 次
1 に答える
2
一部のオペレーティング システムでは、gdb は gdb で異なる方法でプログラムをロードします。MacOS では、gdb がアドレス空間レイアウトのランダム化を無効にすることを知っています。これにより、共有ライブラリの再配置がどのように行われるかが変わります。一部のオペレーティング システムでは、gdb は通常のプログラム実行よりも多くのセクションをロードするか、より広いパーミッションでそれらのセクションをロードします (非実行可能メモリが gdb で実行可能になるか、読み取り専用が書き込み可能になります)。
最善の策は、問題のコア ダンプを取得し、そこからデバッグを続行することです。Valgrind は、この種のバグの検出にも優れています。
于 2012-09-17T10:33:19.930 に答える