【问题标题】:Debug information impacts profiling results c++调试信息影响分析结果 c++
【发布时间】:2012-05-31 21:58:27
【问题描述】:

我正在使用 IBM Quantify 来尝试比较我的程序中不同函数调用的运行时间,但令人头疼的是许多函数调用都有 DEBUG 宏输出这样的东西,

#ifdef DEBUG
cout << "Value is "<< value << endl;
#endif

当我进行分析时,我发现这些 IO 操作花费了大部分时间,当然我关心的是发布版本的实际运行时间。我可以做些什么来获得发布版本的更准确结果,而不是手动删除这些 DEBUG 宏?

我在调试模式下使用 Visual Studio 编译器构建代码,当我使用 -o 选项构建它时,它无法运行以进行分析,说没有可用的调试信息。

【问题讨论】:

    标签: c++ visual-studio compiler-construction profiling


    【解决方案1】:

    您肯定希望使用发布版本进行分析。您可以修改项目设置,以便为发布构建发出 PDB。

    【讨论】:

    • 嗨,我遇到了另一个问题。我构建了发布版本,PDB 也在那里,但是当我将它添加到分析运行时,Quantify 似乎无法识别 DLL。有没有办法可以将 PDB 与已发布的 DLL 链接起来?
    • 链接器自动将 PDB“绑定”到您的 DLL 图像文件,使用唯一标识 (GUID) 放置在图像和相关 PDB 文件中。在这里 (codeproject.com/Articles/37456/…) 有关此绑定机制及其测试方法的更多信息。
    【解决方案2】:

    我将问题分为两部分,整体测量时间,然后得到百分比。 整体测量很简单——给它足够的工作至少需要几秒钟,然后就可以计时了。如有必要,只需循环 10 或 1000 次即可。

    然后为了获得百分比,在它运行时,捕获一些堆栈快照。您可以使用堆栈抓取器,或者只是使用暂停按钮(重复)点击它并复制粘贴调用堆栈。 函数处于活动状态的时间百分比是它在堆栈上的时间百分比,大致是包含它的堆栈跟踪的百分比。 这并没有告诉您仅占一小部分的功能,但更改这些功能不会为您节省太多。

    【讨论】:

      猜你喜欢
      • 2012-10-21
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 2017-12-24
      相关资源
      最近更新 更多