如何使用 KCachegrind 和 Callgrind 只测量部分代码?

2024-01-03

我想用valgrind分析我的代码。问题是,我有一个我不感兴趣的巨大启动序列。

我在中找到了定义valgrind/callgrind.h这应该对我有帮助:

  • CALLGRIND_START_INSTRUMENTATION
  • CALLGRIND_STOP_INSTRUMENTATION
  • CALLGRIND_DUMP_STATS

根据本文 http://zariko.taba.free.fr/c++/callgrind_profile_only_a_part.html我必须执行valgrind有以下选项:

valgrind --tool=callgrind --instr-atstart=no ./application

当我这样做时,会创建两个文件:

  • 呼叫研磨.out.16060
  • callgrind.out.16060.1

然后我想使用 kcachegrind 来可视化我的结果。这很有效,但是用于跳过我的启动序列的 makros 似乎没有任何作用。我需要做什么才能只在我想要测量的地方测量性能?


假设您有以下开源程序:

int main()
{
    function1();

    function2();
    
    return 0;
}

假设您要执行Callgrind仅开启function2().

一种方法是插入Callgrind周围的宏function2(),并重新编译程序(请与上面进行比较):

#include <valgrind/callgrind.h>
int main()
{
    function1();

    CALLGRIND_START_INSTRUMENTATION;
    CALLGRIND_TOGGLE_COLLECT;
        function2();
    CALLGRIND_TOGGLE_COLLECT;
    CALLGRIND_STOP_INSTRUMENTATION;

    return 0;
}

在某些情况下,callgrind.h可能找不到,参见这里有类似的问题 https://stackoverflow.com/questions/32048354/valgrind-fatal-error-memcheck-h-no-such-file-or-directory。可能的解决方案是安装/编译valgrind-devel, see 这个答案 https://stackoverflow.com/a/32049682/3393574.

最后,您需要将两个新选项添加​​到您的callgrind命令,例如:

valgrind --tool=callgrind \
    --collect-atstart=no --instr-atstart=no \ #new options
    <program>

这个答案是一个延伸这个条目 https://developer.mantidproject.org/ProfilingWithValgrind.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 KCachegrind 和 Callgrind 只测量部分代码? 的相关文章

随机推荐

  • Facebook api in python 和源码掌握吧!

    我对 python 有足够的了解 我想使用 facebook python api 为此我从开发人员网站获得了所有 API 密钥和应用程序秘密等 现在我想要的是一个很好的资源 为我提供如何使用Python IDLE 在win7中 验证和检索
  • 为什么我们应该避免使用修饰符形式的rescue?

    我来定义价值 但这个值可能是hash的key的值 我会用rescue如果该键不存在 则定义值为 nil 例如 foo bar a b c rescue nil 但在实践中告诉我不好的风格 因为我使用了修饰符形式的救援 我将更改逻辑以使用检查
  • 从文件中读取行而不在末尾添加“\n”[重复]

    这个问题在这里已经有答案了 我的文件是 xml txt 包含以下内容 books xml news xml mix xml 如果我使用 readline 函数 它会在所有文件的名称处附加 n 这是一个错误 因为我想打开 xml txt 中包
  • 安装Facebook修改的referrer参数值

    I used Google Play 安装引荐来源网址在我的 android 应用程序中并使用以下参数并生成URL正如所描述的 utm source utm medium utm content utm campaign 我编写了自己的自定
  • 如何高效抽分

    我的程序接收 PCL 点云并使用以下方法一一绘制每个点 glBegin GL POINTS glVertex3f point x point y point z glEnd 它可以工作 但由于点数量较多 程序速度相当慢 有没有更有效的方法来
  • 使用 .htaccess 重定向站点但排除两个以上文件夹

    根据这个answer https stackoverflow com a 3414030 3817111 您可以从重定向中排除单个子文件夹 如下所示 RewriteEngine on RewriteRule uploads http exa
  • 使用 Proguard 混淆 ORMLite 模型类

    我想在代码中混淆一些模型 我知道我可以忽略整个模型包 但我不想这样做 我尝试了一些混淆器调整并检查了所有相关帖子 但无济于事 ORMlite 不断抛出java lang RuntimeException Unable to create a
  • Flutter 中何时使用 setState?

    作为 flutter 的新手 使用时对我来说非常困惑setState in Flutter应用 在下面的代码中布尔值searching和变量resBody里面用的setState 我的问题是为什么只searching and resBody
  • Rails update_attribute

    我遇到了以下问题 我有一个名为 用户 的模型 其中有一列名为 已激活 我试图用激活的方法更新该值 但它给了我错误 验证失败 密码不能为空 密码太短 最少为 6 个字符 这对我来说没有意义 因为我没有接触密码字段 我只想更新激活的列 我把代码
  • 正则表达式匹配第一次出现*之后*出现的所有字符?

    例如 如果我尝试匹配输入字符串中的 w 爱德华 伍德沃德 第二个单词中的两个 w 应该匹配 而不是第一个单词中的两个 w 我有一种暗示 该解决方案可能涉及 消极后视 但只是无法获得任何可行的解决方案 我正在使用 Objective C 和正
  • 类型解构

    我的数据类型始终至少有两个参数 最后两个参数始终分别为 q 和 m LANGUAGE TypeFamilies FlexibleContexts UndecidableInstances TypeOperators DataKinds Co
  • R 传单突出显示选项

    我使用以下命令突出显示 R 传单上的一行 library leaflet m leaflet gt addTiles group OpenStreetMap x lt c 1 5 4 8 y lt c 1 3 4 7 data sp Spa
  • 麦克风检测 Actionscript 3

    我在检测是否检测到麦克风时遇到一些问题 我正在运行该函数Microphone getMicrophone 那应该返回null如果没有连接麦克风 或者用户在安全面板上单击了 拒绝 对吗 我面临的问题是 在某些没有安装麦克风的计算机上 Micr
  • 从并行流捕获异常

    我有一堆列作为 csv 文件中的字符串数组 现在我想解析它们 由于此解析需要日期解析和其他不太快的解析技术 因此我正在考虑并行性 我对其进行了计时 这需要一些时间 我的简单方法 Stream of columns parallel forE
  • 自定义相对布局不显示子视图

    我正在尝试创建一个包含两个 imageView 的自定义相对布局 一个图像视图出现在整个屏幕上 另一个图像视图出现在第一个图像视图的左上角 后来我在活动的 xml 文件中使用这个自定义视图 但是 以下代码不会在显示屏上显示任何内容 任何视图
  • AWS Glue:如何在输出中添加包含源文件名的列?

    有谁知道如何将源文件名添加为粘合作业中的列 我们创建了一个流程 在其中抓取 S3 中的一些文件以创建架构 然后 我们编写了一个作业 将文件转换为新格式 并将这些文件以 CSV 形式写回另一个 S3 存储桶 以供管道的其余部分使用 我们想要做
  • Rust:有没有办法使用 map 来缩短 if/else 代码?

    我很难如何使用地图 如下所示 为什么 Rust 需要 if let 语法 https stackoverflow com questions 27534364 why does rust need the if let syntax 有没有
  • 使用页码作为输入从现有 pdf 中剪辑并创建新 pdf - pdfbox

    我有一个 10 页的 pdf 文件 我需要将第 2 页剪切到第 5 页并创建一个新的 pdf 我正在做的事情如下 PDDocument pddDocument PDDocument load new File sample pdf PDFT
  • 冲突的 UNMET 依赖地狱 angular@2 / rxjs zone.js

    我相信我已经事先成功解决了此类问题 或多或少遵循了这个流行问题中概述的方法 https stackoverflow com a 35738361 108350 https stackoverflow com a 35738361 10835
  • 如何使用 KCachegrind 和 Callgrind 只测量部分代码?

    我想用valgrind分析我的代码 问题是 我有一个我不感兴趣的巨大启动序列 我在中找到了定义valgrind callgrind h这应该对我有帮助 CALLGRIND START INSTRUMENTATION CALLGRIND ST