2010-02-26 43 views
1

我在我的程序上运行Valgrind。它向我展示了两个错误,但只提到了针对它们的地址,即使在调试版本上也没有提供实际的代码。Valgrind输出显示的地址没有针对错误的代码

你可以请。帮助我理解它所说的内容以及如何达到错误的代码行?

输出是

==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. 
+1

我看到你正在使用Valgrind 3.1.1。这是一个非常*旧的版本。我建议你先考虑升级到3.5.0并再次尝试。新版本可能会为您提供更好的诊断。 – 2010-02-26 22:13:06

回答

1

这个地址看起来伪造的。忘记valgrind,启动gdb找到您的程序在哪里进行分段转换。

1

没有调试信息,因为指示的代码位于ld-2.3.4.so库(这是动态链接器)内。

它在我看来像你的可执行文件链接到一个损坏的动态库文件(或试图通过该机制加载一个不是动态库的文件)。