1

プログラムで Valgrind を実行しています。2 つのエラーが表示されますが、それらに対するアドレスのみが言及されており、デバッグ ビルドであっても実際のコードは言及されていません。

よろしくお願いします。それが何を言っているのか、そして間違ったコード行に到達する方法を理解するのに役立ちますか?

出力は

==23002== Memcheck, a memory error detector.  
==23002== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.  
==23002== Using LibVEX rev 1575, a library for dynamic binary translation.  
==23002== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.  
==23002== Using valgrind-3.1.1, a dynamic binary instrumentation framework.  
==23002== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.  
==23002== For more details, rerun with: -v  
==23002==  
==23002== Invalid read of size 4  
==23002== at 0x8AAE6D: open_path (in /lib/ld-2.3.4.so)  
==23002== by 0x8AB68B: _dl_map_object (in /lib/ld-2.3.4.so)  
==23002== by 0x8AF307: openaux (in /lib/ld-2.3.4.so)  
==23002== by 0x8B066D: _dl_catch_error (in /lib/ld-2.3.4.so)  
==23002== by 0x8AF5A9: _dl_map_object_deps (in /lib/ld-2.3.4.so)  
==23002== by 0x8A6459: dl_main (in /lib/ld-2.3.4.so)  
==23002== by 0x8B3DF4: _dl_sysdep_start (in /lib/ld-2.3.4.so)  
==23002== by 0x8A53EF: _dl_start (in /lib/ld-2.3.4.so)  
==23002== by 0x8A47C6: (within /lib/ld-2.3.4.so)  
==23002== Address 0x2F8BBBF8 is not stack'd, malloc'd or (recently) free'd  
==23002==  
==23002== Process terminating with default action of signal 11 (SIGSEGV)  
==23002== Access not within mapped region at address 0x2F8BBBF8  
==23002== at 0x8AAE6D: open_path (in /lib/ld-2.3.4.so)  
==23002== by 0x8AB68B: _dl_map_object (in /lib/ld-2.3.4.so)  
==23002== by 0x8AF307: openaux (in /lib/ld-2.3.4.so)  
==23002== by 0x8B066D: _dl_catch_error (in /lib/ld-2.3.4.so)  
==23002== by 0x8AF5A9: _dl_map_object_deps (in /lib/ld-2.3.4.so)  
==23002== by 0x8A6459: dl_main (in /lib/ld-2.3.4.so)  
==23002== by 0x8B3DF4: _dl_sysdep_start (in /lib/ld-2.3.4.so)  
==23002== by 0x8A53EF: _dl_start (in /lib/ld-2.3.4.so)  
==23002== by 0x8A47C6: (within /lib/ld-2.3.4.so)  
==23002==  
==23002== Jump to the invalid address stated on the next line  
==23002== at 0x246: ???  
==23002== Address 0x246 is not stack'd, malloc'd or (recently) free'd  
==23002==  
==23002== Process terminating with default action of signal 11 (SIGSEGV)  
==23002== Bad permissions for mapped region at address 0x246  
==23002== at 0x246: ???  
==23002==  
==23002== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)  
==23002== malloc/free: in use at exit: 0 bytes in 0 blocks.  
==23002== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.  
==23002== For counts of detected errors, rerun with: -v  
==23002== All heap blocks were freed -- no leaks are possible.  
4

2 に答える 2

1

そのアドレスは偽物に見えます。valgrindを忘れて、gdbを起動して、プログラムがsegfaultingしている場所を見つけます。

于 2010-02-26T15:00:23.943 に答える
1

示されたコードはld-2.3.4.soライブラリ内にあるため (これは動的リンカーです)、デバッグ情報はありません。

実行可能ファイルが破損した動的ライブラリ ファイルに対してリンクされているように見えます (または、そのメカニズムを介して動的ライブラリではないファイルを読み込もうとしています)。

于 2010-02-27T06:51:12.063 に答える