我正在尝试使用callgrind探查器来分析我的C ++程序。我在Intel Centos 5.5上使用Valgrind版本3.6,1在Intel 32位处理器上。当我尝试配置我的程序时,我不断收到以下错误(如下所示)。 我已经使用过Linux gprof,但它没有提供任何有用的分析信息。请告诉我我做错了什么或我应该使用什么解决方法。谢谢
valgrind --tool = callgrind --dump-instr = yes --simulate-cache-yes --collect-jumps = yes ./MatchUpAccurate.exe -input /home/frankc/DQTTest5/MatchUpTest/TestData/mdata2003.dbf -fileloc / home / frankc / DQTTest5 / MatchUpTest / TestData -version 15,
== 25558 == Callgrind,一个生成缓存探查器的调用图, == 25558 ==版权所有(C)2002-2010,以及Josef Weidendorfer等人的GNU GPL'd, == 25558 ==使用Valgrind-3.6.1和LibVEX;用-h重新运行版权信息, == 25558 ==命令:./ MasterUpAccurate.exe -input /home/frankc/DQTTest5/MatchUpTest/TestData/mdata2003.dbf -fileloc / home / frankc / DQTTest5 / MatchUpTest / TestData -version 15, == == 25558, == 25558 ==对于交互式控制,请运行'callgrind_control -h'。, memcpy的, BB#486126,
Callgrind:jumps.c:164(new_jcc):断言'(0< = jmp)&& (jmp< = from-> bb-> cjmp_count)'失败。, == 25558 ==在0x3801E4C8:report_and_quit(m_libcassert.c:193), == 25558 == by 0x3801E69C:vgPlain_assert_fail(m_libcassert.c:267), == 25558 == by 0x3800FCD9:vgCallgrind_get_jcc(jumps.c:164), == 25558 == by 0x38003534:vgCallgrind_push_call_stack(callstack.c:217), == 25558 == by 0x38001FDB:vgCallgrind_setup_bbcc(bbcc.c:844), == 25558 == by 0x629B9E93:???,
sched状态:, running_tid = 1,
主题1:status = VgTs_Runnable, == 25558 ==在0xB64A30:memcpy(在/lib/libc-2.5.so中), == 25558 == by 0xC845D3:__ pthread_initialize_minimal(在/lib/libpthread-2.5.so中), == 25558 == by 0xC84217:??? (在/lib/libpthread-2.5.so中), == 25558 == by 0xC83DA7:??? (在/lib/libpthread-2.5.so中), == 25558 == by 0xAE2162:call_init(在/lib/ld-2.5.so中), == 25558 == by 0xAE228F:_dl_init(在/lib/ld-2.5.so中), == 25558 == by 0xAD484E:??? (在/lib/ld-2.5.so中),
注意:另请参阅源代码发布中的常见问题解答。 它包含几个常见问题的解决方法。 特别是,如果Valgrind在之后流产或崩溃, 识别你的程序中的问题,这是一个很好的机会, 修复这些问题将阻止Valgrind中止或崩溃, 特别是如果它发生在m_mallocfree.c。,
中如果这没有帮助,请将此错误报告给:www.valgrind.org,
在错误报告中,发送以上所有文本,valgrind, 版本,以及您正在使用的操作系统和版本。感谢。
答案 0 :(得分:1)
晚上好,我收到了Callgrind工程师Josef Weidenorfer的电子邮件。约瑟夫给我发了一个valgrind / callgrind补丁修复我的callgrind问题。这是补丁(如下所示)。我刚刚应用了补丁并重建了valgrind / callgrind。现在callgrind可以在Centos Linux 5.5上分析fibonacci(25)函数。谢谢。
--- a/callgrind/bbcc.c
+++ b/callgrind/bbcc.c
@@ -693,6 +693,7 @@ void CLG_(setup_bbcc)(BB* bb)
/* change source for delayed push */
CLG_(current_state).bbcc = top_ce->jcc->from;
sp = top_ce->sp;
+ passed = top_ce->jcc->jmp;
CLG_(pop_call_stack)();
}
else {
@@ -841,6 +841,7 @@ void CLG_(setup_bbcc)(BB* bb)
if (!skip && CLG_(current_state).nonskipped) {
/* a call from skipped to nonskipped */
CLG_(current_state).bbcc = CLG_(current_state).nonskipped;
+ passed = CLG_(current_state).bbcc->bb->cjmp_count;
}
CLG_(push_call_stack)(CLG_(current_state).bbcc, passed,
bbcc, sp, skip);