2

我正在尝试使用 callgrind 分析器来分析我的 C++ 程序。我在 Intel 32 位处理器上的 Linux Centos 版本 5.5 上使用 Valgrind 版本 3.6,1。当我尝试分析我的程序时,我不断收到以下错误(如下所示)。我已经使用过 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 -版本 15,

==25558== Callgrind,一个调用图生成缓存分析器,==25558== 版权所有 (C) 2002-2010,以及 Josef Weidendorfer 等人的 GNU GPL'd,==25558== 使用 Valgrind-3.6 .1 和 LibVEX;使用 -h 重新运行以获得版权信息,==25558== 命令:./MatchUpAccurate.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): Assertion '(0 <= jmp) && (jmp <= from->bb->cjmp_count)' failed., ==25558== at 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 :217), ==25558== by 0x38001FDB: vgCallgrind_setup_bbcc (bbcc.c:844), ==25558== by 0x629B9E93: ???,

调度状态:, running_tid=1,

线程 1:状态 = VgTs_Runnable,==25558== 位于 0xB64A30:memcpy(在 /lib/libc-2.5.so 中),==25558== 由 0xC845D3:__pthread_initialize_minimal(在 /lib/libpthread-2.5.so 中),= =25558== 由 0xC84217: ??? (在 /lib/libpthread-2.5.so 中),==25558== 由 0xC83DA7: ??? (在 /lib/libpthread-2.5.so 中),==25558== 通过 0xAE2162:call_init(在 /lib/ld-2.5.so 中),==25558== 通过 0xAE228F:_dl_init(在 /lib/ld-2.5 .so), ==25558== 由 0xAD484E: ??? (在 /lib/ld-2.5.so 中),

注意:另请参阅源代码分发中的常见问题解答。它包含几个常见问题的解决方法。特别是,如果 Valgrind 在识别程序中的问题之后中止或崩溃,则很有可能修复这些问题将阻止 Valgrind 中止或者,崩溃,特别是如果它发生在 m_mallocfree.c. 中,

如果这没有帮助,请将此错误报告给:www.valgrind.org,

在错误报告中,发送上述所有文本、valgrind、版本以及您使用的操作系统和版本。谢谢。

4

1 回答 1

1

晚上好,我收到了一封来自 Callgrind 工程师 Josef Weidenorfer 的电子邮件。Josef 给我发了一个 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);
于 2011-04-27T23:16:25.510 回答