Visual Studio 的免费性能调试工具(翻译)

原文地址如下:

http://www.codeproject.com/Articles/144643/Profiling-of-C-Applications-in-Visual-Studio-for-F?bmkres=success


Download ProfileResultViewer - 37.71 KB

Download ProfileSample - 133.88 KB

一、介绍

  Team版和Premium版的Visual Studio都包含了性能调试器,而Professional版却缺少这个特性。这篇文章里,我将展示一种方法,使用免费的工具来对C++程序进行性能调试,并且使用一个简单的程序来对结果中的信息进行有效地显示。



二、方法

此方法包含如下四步:

  • 使用Visual Studio产生特殊的"/PROFILE"生成版本(所有版本的Visual Studio都支持)。
  • 使用免费的微软工具“VSPerfCmd”对刚编译的程序进行性能调试。
  • 使用“VSPerfReport”将性能调试结果中的.vsp文件转换成.csv文件。
  • 使用附件中的Profile Result Viewer来对此结果中巨大数量的.csv文件进行分析。

1、产生一个/PROFILE生成版本

注意:以下步骤当然应该使用发布版本(Release Build)并且使能调试符号(Debugging Symbols)。

在Visual Studio 2008中,进入解决方案浏览器(Solution Explorer),选择工程并打开属性页。在选项卡,“配置属性”(Congfiguration Properties)中选择“链接”(Link)-“高级”(Advanced)。设置“性能调试”(Profile)为“允许生成性能调试信息(/PROFILE)”。(具体的步骤根据Visual Studio版本不同而有所不同)。

然后编译此程序。


2、生成性能调试报告(vsp文件)

首先,安装Visual Studio性能工具。Visual Studio 2008 Service Pack 1 Stand-Alone Profiler 

在报告的生成过程中需要在命令行中敲入几条命令。

准备命令行

打开命令提示符(cmd),定义一个指向性能工具的快捷方式,并切换到你要调试的程序所在目录:

set pt="C:\Program Files\Microsoft Visual Studio 9.0\Team Tools\Performance Tools"
cd [my_app_folder]

对程序的一次完整运行进行性能调试

此简单的方法用于调试程序的完整运行时间。

:: Start the profiler
%pt%\vsperfcmd /start:sample /output:my_sampled_data.vsp

:: Launch the application via the profiler
%pt%\vsperfcmd /launch:my_app.exe

:: Shut down the profiler (this command waits, until the application is terminated)
%pt%\vsperfcmd /shutdown

仅对程序的部分运行时间进行性能调试

仅对程序的部分运行时间进行性能调试也是可能的。

从这开始处理起来就有点繁琐了,所以我假设最好可以使用某种简单的程序来自动执行以下步骤(bat脚本)。不管怎样,我从未真正有过只对部分时间进行性能调试的需求,因为我总可以使修改代码(可能是修改程序的启动代码),是的90%的时间是花在相关需要调试的部分的。尽管如此,如果你无法适应性地改动你的代码,那么进行如下步骤:

如上节一样启动vsperfcmd并在之后将它附加到你的程序上:

:: Start the profiler
%pt%\vsperfcmd /start:sample /output:my_sampled_data.vsp

:: Send the profiler to a waiting state
%pt%\vsperfcmd /globaloff

:: Attach to your application by specifying the pid
%pt%\vsperfcmd /attach:[pid]
附加到你的程序上之后,做一些调试之前的必要的准备(如打开某个窗口,窗口中有一个可触发性能瓶颈的按钮)。现在初始化需要进行性能调试的功能(如点击之前提到的按钮)并激活性能调试器。

:: Activate the profiler
%pt%\vsperfcmd /globalon
当此功能完成时(或你觉得足够的时间过去了。。。),停止性能调试:

:: Detach the profiler from your application
%pt%\vsperfcmd /detach

:: Shut down the profiler
%pt%\vsperfcmd /shutdown

3、将性能调试报告转换成csv文件

工具vsperfreport加载符号文件(.pdb)并且与产生的报告(.vsp)联合起来生成.csv文件。

:: generate the report files (.csv)
%pt%\vsperfreport /summary:all my_sampled_data.vsp
如果你对系统调用的性能也有兴趣,那么你可以指定符号文件地址到一个符号服务器或本地缓存:

%pt%\vsperfreport /summary:all my_sampled_data.vsp 
/symbolpath:"srv*C:\MySymbolCache*http://msdl.microsoft.com/download/symbols"


4、查看报告

以上的csv文件原则上可使用任何电子表格软件打开,然而,它们通常都很大,且不能立即有用。

因此,我编写了一个小程序,解析其中一个文件(名为""...CallerCalleeSummary.csv")并且以树形显示,以所占的时间百分比排序。从这个视图可以很简单地发现性能问题的原因。对我来说,我可以找出不少瓶颈,这些只看代码是永远找不出来的。


三、代码使用

附件中也有一份我用来生成性能调试数据的C++小程序。生成的.vsp和.csv文件放在"Release"子文件夹中。使用ProfileResultViewer打开"my_sampled_data_CallerCalleeSummary.csv"可重现第一节中我给出的截图。


四、兴趣点

  • 性能调试报告只显示函数的统计,不对每行代码做统计。
  • 内联函数(inline)不包含在性能调试中,因为它们不会出现在本地调用堆栈中(native call stack)。
  • 展示的treeview不是严格地层次化的:如果A调用B,那么在显示中B可能要比A花费更多时间。这可能出现,因为是显示总的百分比,并非显示B在A中调用时B所花时间,而是B总共在程序中所花时间。我不确定 csv文件是否有足够的信息来报告更详细的情形。

当然,上述一些步骤可以很容易的整合到GUI程序中,只不过在我描述上述步骤的时候,我觉得对我来说已经足够简单了。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Visual Studio是一个集成开发环境(IDE),用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序、移动应用程序等。在Visual Studio中进行调试是一种找出并解决程序错误的过程。使用Visual Studio进行调试可以帮助开发人员定位和修复程序中的错误,提高代码质量和性能。 在Visual Studio中进行调试的步骤如下: 1. 设定断点:通过在代码中设置断点,可以在程序执行到断点处时暂停程序的执行,以便观察程序的状态和变量的值。 2. 运行程序:当设置好断点后,通过点击“开始调试”按钮或使用快捷键F5,可以启动程序的执行。 3. 单步执行:在程序暂停时,可以逐行或逐语句地执行程序。可以使用“单步进入”、“单步过”和“单步出”等功能进行调试。 4. 观察变量:在调试过程中,可以查看和监控程序中的变量的值,以便分析程序的执行过程。 5. 查看输出:可以查看程序的输出结果,以便判断程序的正确性。 6. 调试窗口:Visual Studio提供了多个调试窗口,例如内存查看窗口、局部变量窗口、堆栈窗口等,可以帮助开发人员更详细地了解程序的执行过程和状态。 通过以上步骤,开发人员可以有效地调试程序,找出并解决程序中的错误。 Visual Studio提供了丰富的调试功能和工具,帮助开发人员提升开发效率和代码质量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Visual Studio中程序调试的方法](https://blog.csdn.net/qq_39838607/article/details/115548399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [[Visual Studio]----调试技巧](https://blog.csdn.net/m0_68468727/article/details/127269049)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值