2012-06-16 60 views
4

我有从valgrind下面的堆栈跟踪。但它没有给我完整的堆栈跟踪。Valgrind(主要下面),如何获得完整的堆栈跟踪?

==2433== Invalid free()/delete/delete[]/realloc() 
==2433== at 0x402B06C: free (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) 
==2433== by 0x43F345B: av_freep (mem.c:172) 
==2433== by 0x5A6F4D2: (below main) (libc-start.c:226) 

在gdb中,我觉得得到同样的错误:

#5 0xb7c1345c in av_free (ptr=<optimized out>) at libavutil/mem.c:172 
#6 av_freep (arg=0x88a2e48) at libavutil/mem.c:181 
#7 0xb7c165c8 in av_opt_free (obj=0x88a2ba0) at libavutil/opt.c:787 
#8 0xb6b56efc in avcodec_close (avctx=0x88a2ba0) at libavcodec/utils.c:1675 
#9 0x0808a3e0 in encode_lavc_finish (ctx=0x8343a40) at encode_lavc.c:288 
#10 0x08077d0b in exit_player_with_rc (mpctx=0x8313058, how=EXIT_EOF, rc=0) 
at mplayer.c:705 
#11 0x0806ced0 in main (argc=8, argv=0xbffff374) at mplayer.c:4771 

但随着GDB跟踪去所有达main()的方式。

如何在valgrind中获得完整的堆栈跟踪,是否可能?

+0

您是否尝试过--logfile = file-basename选项并查看生成的日志? –

+0

@Vincenzo Maggio它给了我完全相同的输出。 – rhlee

+1

你读过这篇文章:http://valgrind.org/docs/manual/faq.html#faq.unhelpful? –

回答

2

In gdb, I think I get the same error

你没有在GDB得到错误。你在av_free上得到了一个断点,但当然av_free被称为lot,而且你没有提供任何证据表明这个特定的调用触发了Valgrind错误。

这很可能是一些其他调用av_free其实触发Valgrind的错误,并且它也很可能是该呼叫从atexit处理程序执行时,Valgrind的堆栈事实上一个完整的堆栈跟踪

如果您使用的是最新的Valgrind的版本,你其实可以调试Valgrind的下运行与--vgdb-error=1程序,并附加GDB 正是问题出在哪里发生。文档here

+0

是的,我刚刚发现附加一个调试器。也感谢@Vincenzo谁指出我的常见问题。当连接gdb时,堆栈跟踪与使用没有valgrind的gdb完全相同。 – rhlee

相关问题