linux - 如何在 Centos Linux 5.5 上使用 callgrind

标签 linux callgrind

我正在尝试使用 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 -版本 15, ==25558==, ==25558== 对于交互式控制,运行'callgrind_control -h'。, 内存, 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== 通过 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== 通过 0x38001FDB:vgCallgrind_setup_bbcc (bbcc.c:844), ==25558== 来自 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, 版本,以及您使用的操作系统和版本。谢谢。

最佳答案

晚上好,我收到了 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);

关于linux - 如何在 Centos Linux 5.5 上使用 callgrind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5748883/

相关文章:

c++ - 为什么Callgrind使原子负载永无止境

profiling - Callgrind 配置文件格式包含/自费

python - 停止 callgrind 中的检测

linux - 将嵌套子目录中的文件复制到另一个文件夹中

python - django模板在哪里

regex - 仅打印以特定数值结尾的行

c++ - 在 callgrind 输出中解释 _dl_runtime_resolve_xsave'2

c++ - 使用 Boost.Spirit 解析标记化的自由形式语法

java - 从 java 调用简单的 shell 脚本不起作用

linux - 猫文件名 | grep "something"在 shell 脚本中结果为 "cat: grep: No such file or directory"