0
大きなネットワーク上にコードがあり、ここに貼り付けることができません。gdbで起動するとプロセスダンプが発生する
私の問題は、私がgdb
で起動すると、プロセスが開始されるとすぐにseg faultが表示されることです。しかし、gdbなしで実行すると、実行され続けていて、いくつかのランダムな時間に障害が発生します。理由は何でしょうか?確かにいくつかのメモリ破損はありますか?
大きなネットワーク上にコードがあり、ここに貼り付けることができません。gdbで起動するとプロセスダンプが発生する
私の問題は、私がgdb
で起動すると、プロセスが開始されるとすぐにseg faultが表示されることです。しかし、gdbなしで実行すると、実行され続けていて、いくつかのランダムな時間に障害が発生します。理由は何でしょうか?確かにいくつかのメモリ破損はありますか?
GDB内でプロセスがすぐにクラッシュする理由の1つは、GDBがアドレス空間のランダム化を無効にすることです。ASLR。
setarch x86_64 -R ./a.out ...
またはあなたがそうのような広いASLRシステムを無効にすることができます:
は(gdb) set disable-randomization off
(gdb) run
あなたがそうのようなGDBの外でASLRを無効にすることができます
あなたはそうのようにgdbでASLRを再度有効にすることができます
をsudo -c "echo 0 > /proc/sys/kernel/randomize_va_space"
いくつかのメモリ破損がありますかe?
確かにどこかにバグがあります。メモリ破損かその他のバグかどうかは、正確にはに依存します。とここでは、プロセスがクラッシュし、関連する詳細は教えていません。
コードを投稿に追加してください。エラーが発生した場所を見つけようとしましたか? – moooeeeep
考えられる理由:マルチスレッドアプリケーションで作業していて、スレッド間の同期が悪い場合は、最初にバックトレースを使用して問題をデバッグし、次に「休憩」を使用していくつかの手順を遅らせることで、誰がsegを引き起こしているのか確かめてください。 – Mouin
'valgrind'で同じコードを実行しようとしましたか? – dlmeetei