【问题标题】:Investigating a class in C++ software at runtime在运行时调查 C++ 软件中的类
【发布时间】:2012-12-03 10:03:55
【问题描述】:

我有一个基于 C++ 的程序正在运行,我的问题是我想知道:

  • 调用次数最多的top10、top5、topX方法有哪些
  • 什么是计算量最大的类或哪些线程需要最大时钟周期

是否可以在 Linux 下使用 valgrindperf 或类似工具来执行此操作?

我不应该说这个应用程序使用了许多第三方库,但我对这些不感兴趣,因为我想要修改和改进的是应用程序本身的核心,所以我可以将所有可能的方法列表缩减为仅由“实际应用程序”实现的那些。

一般而言,如何检测导致分支失败和性能损失最大的类或方法是什么?

【问题讨论】:

  • 如果一个函数被调用,用变量记下它,然后在控制台中显示每个函数变量,看看哪个被调用的次数最多?
  • @Need4Sleep 不完全是一个“解决方案”,我也想调查可执行文件,我不想为这个应用程序操作整个代码库,它很大而且做起来很危险,而且而且,这将是浪费时间。

标签: c++ valgrind performance-testing perf


【解决方案1】:

您正在寻找分析器,例如gprof

【讨论】:

  • 我刚刚快速浏览了一下,但我想问一下,gprof 只有在应用程序使用调试符号编译时才有效? (-g gcc 下的标志)在任何情况下都没有任何作用?
【解决方案2】:

您正在搜索的程序称为分析器。它为您提供调用的方法列表以及它们使用的程序运行时间的百分比。如果你在 Linux 下,你可以使用 valgrind 之类的工具,在 Windows 上我个人使用 Very Sleepy。您还可以在此线程中查看 Linux 下的探查器列表: thread

【讨论】:

  • 同样在 MacOS/X 下,包含的 Activity Monitor 实用程序内置了一个迷你分析器......只需在进程列表中单击您的(已经运行的)进程,然后单击“示例处理”按钮,等待几秒钟,就会出现一个报告。
【解决方案3】:

要计算函数的机器周期或调用的深度,您可以使用 QUANTIFY 工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 2012-01-27
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2012-11-28
    相关资源
    最近更新 更多