【解決方法】セグメンテーション違反を見つけるためにvalgrindを使用する方法は?


ソースがない実行可能ファイルに沿って動作するライブラリがあります。
ライブラリを使用すると、セグメンテーション違反エラーが発生します
valgrind を使用して障害の理由を理解しましたが、理解できませんでした
これは、デバッグモードで自分で実行可能ファイルを作成できないために発生したと思います
セグメンテーション違反の理由を見つけるために私に何を提案しますか?
どうもありがとう

私が試したこと:

valgrind –track-origins ./myExecutable を実行しました
出力は次のとおりです。

Conditional jump or move depends on uninitialised value(s)
at 0x400BF71: _dl_relocate_object (in /lib/ld-2.13.so)
by 0x4003054: dl_main (in /lib/ld-2.13.so)
by 0x4014E9D: _dl_sysdep_start (in /lib/ld-2.13.so)
by 0x4004AD8: _dl_start (in /lib/ld-2.13.so)
by 0x4000806: ??? (in /lib/ld-2.13.so)
Uninitialised value was created by a stack allocation
at 0x400B3A6: _dl_relocate_object (in /lib/ld-2.13.so)

解決策 1

メッセージは、この問題の理由をかなり明確に示しています。

引用:

条件付きジャンプまたは移動は、初期化されていない値に依存します

引用:

初期化されていない値がスタック割り当てによって作成されました

理解するのはかなり難しいです。

この割り当てを担当するコードの場所については、言及されたシンボルに基づいて見つける必要があります。 初期化されていないポインターによって指定されたアドレスにデータをコピーしようとするのと同じくらい簡単かもしれません。

ビルド方法に関係なく、実行中のプログラムにデバッガーをアタッチできることに注意してください。

とはいえ、デバッガーで独自のコードを実行できない理由は何でしょうか?

コメント

タイトルとURLをコピーしました