如何用windbg + Very Sleepy打造window平台的C++程序免费调优工具(profiler) .
2012-02-20 18:05
603 查看
如何用windbg + Very Sleepy打造window平台的C++程序免费调优工具(profiler)
分类:C++ 调试技术
2012-02-20 18:05
437人阅读 评论(0)
收藏
举报
profiler工具平台c++profiling多线程
基于Linux平台的免费且优秀的C++ 调优工具很多,而在window平台基本上都是商业的,在google搜了一大圈后来找到一个叫
very sleepy的调优工具http://www.codersnotes.com/sleepy 目前的版本是0.82,已经加入了对多线程的支持。
下载下来用了一下,发现在调试多线程的时候有些不太方便,它是通过选择目前内存任务管理中正在运行的进程的全部或某个线程来进行profiling.
这样的操作适合那些服务类的进程,而如果对于那种运行完就结束的程序就会不方便,我做了实验,如果直接在Very Sleep加载某个程序运行
则最后只会得出第一个启动的线程的统计数据。无法得出其他线程的统计数据,后来笔者摸索了一个方法是利用windbg来配合进行调试的方法。
(windbg is a powerful and great tool)
1. 写个简单的多线程例子程序,这个例子程序是在命令行程序的主线程中创建两个线程,简单重复的输出字符串N遍。
#include "stdafx.h"
#include "iostream"
#include <process.h> /* _beginthread, _endthread */
#include <windows.h>
using namespace std;
void Test(void* dummy)
{
for(int i =0 ;i < 10000; i ++)
{
cout << "1:Hello World" << endl;
}
}
void Test2(void* dummy)
{
for(int i =0 ;i < 10000; i ++)
{
cout << "2:Hello World" << endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread1 = (HANDLE) _beginthread(Test,0,NULL);
HANDLE hThread2 = (HANDLE) _beginthread(Test2,0,NULL);
WaitForSingleObject(hThread1, INFINITE );
WaitForSingleObject(hThread2, INFINITE );
return 0;
}
2. Windbg运行test.exe,在下图所示中设置断点,并运行到该断点。这一步的目的是为了在刚好在创建完线程后中断,
这样Very Sleepy可以检测到test.exe进程中的所有线程,同时这些线程又暂时挂住。
3.打开Very Sleepy,找到test.exe,选中它后,发现右边窗口显示出test.exe所有的线程,如果Very Sleepy已经打开,则点击Refresh按钮即可看到。
4.这一步则比较搞,因为你必须在windbg继续执行挂起的线程之后,马上点击Very Sleepy的Profile All才能比较准确的统计每个线程的时间。
我是这样做的,在windbg里先输入g不回车,然后把鼠标移到Profile All键上,然后瞬间秒杀”输入回车“ + ”点击鼠标左键“这两个动作。
5. 这时候,可以看到profiling的进行过程,而且提示有多少个线程在运行
6. profiling结束后,可以看到统计结果,这时你可以进行各种操作来分析瓶颈。具体操作就不详说了。
分享到:
上一篇:用windbg根据堆内存地址查找分配内存的代码位置下一篇:在IIS上部署基于django WEB框架的python网站应用
相关文章推荐
- 如何用windbg + Very Sleepy打造window平台的C++程序免费调优工具(profiler)
- 基于Windows平台,C++ 如何调用exe程序
- c++游戏程序移植到android平台后,如何更新程序,重新编译
- C/C++ 如何劫持别人家的命令||函数||程序(只能对于window而言)
- 基于Windows平台,C++ 如何调用exe程序
- 【转】如何在Android平台下编译带STL的C++程序
- 如何在Mac 平台下写c++程序
- [9]DevOps 自动化运维工具Chef---如何解决在Window平台上执行一些knife子命令时所报的错误, knife search, knife status?
- 如何在Android平台下编译带STL的C++程序
- c\c++出bug调试技巧 —— 如何利用windbg + dump + map分析程序异常 .
- 我是如何打造一款千万级小程序,并送出1770万圣诞帽
- 如何自己建网站,免费自助建站系统平台哪个最好?
- linux下如何用GDB调试c++程序
- Python Web中REST API使用示例——基于云平台+云服务打造自己的在线翻译工具
- 扫盲贴 Visual Studio 2005/2008中如何编译和运行C++程序
- 如何用Windbg调试禁止使用调试器的程序
- [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler
- 泛C++开发: 如何用C++写跨平台应用
- 在Linux平台下如何编译一个C++工程
- 免费开源程序企业构建集成系统iMatrix平台发布,分享下!