私はsegfaultを与えているC/C++コードを持っています。これは、RH Linux Enterpriseサーバー上でgcc/g ++を使用してコンパイルされます。私はValgrindのの出力メッセージの一つとしてこれを取得Valgrindの出力に基づいてさらにデバッグする方法
valgrind --tool=memcheck --leak-check=full --show-reachable=yes
:私は実行可能でValgrindはメモリチェッカーを使用
==7053== Invalid read of size 1
==7053== at 0xDBC96C: func1 (file1:4742)
==7053== by 0xDB8769: func2 (file1.c:3478)
==7053== by 0xDB167E: func3 (file1.c:2032)
==7053== by 0xDB0378: func4 (file1.c:1542)
==7053== by 0xDB97D8: func5 (file1.c:3697)
==7053== by 0xDB17A7: func6 (file1.c:2120)
==7053== by 0xDBD55E: func7 (file2.c:271)
==7053== Address 0x1bcaf2f0 is not stack'd, malloc'd or (recently) free'd
私は私のコードは、無効なメモリ位置にアクセスしたことを意味することを読んでに許可されていません。
私の質問:
私はそのバッファメモリへのアクセスを見つけるにはどうすればよいが無効になっている、との機能のこれは上記のことを行っています。
どのように使用することができます0x1bcaf2f0、valgrindは無効ですと言っています。そのアドレスでシンボル(基本的にはバッファ名)を見つけるにはどうすればよいですか?メモリマップファイル、他の方法。
メモリ(ヒープ/スタックの破損)エラーを検出するためにValgrindを使用するためのその他の一般的なポインタ、valgrindオプション、またはその他のツールはありますか?
ありがとうございます。上記のvalgrindの出力に表示されている '0x1bcaf2f0'というメモリ位置の変数をどのようにトレースするのですか? – goldenmean
特に示されたアドレスが動的に割り当てられたバッファから来た場合は? – goldenmean
スタックの破損に役立つものは何ですか? – xaxxon