Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2314726
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: 嵌入式

2012-03-01 17:13:47

在实际工作中发现有这样的需求: 程序已经发布给客户, 客户报告说有问题, 客户远在外地, 静态分析代码看不出可能的原因, 测试团队一次也不能复现.

在静态分析代码中怀疑一个关键的线程意外退出, 但代码中没有关于这一事件的日志, 所以需要一个工具来检查运行中的进程各个线程的调用栈. 要求是:

不影响客户的正常工作, 即这个进程(是个windows service)不能被停止.

VS的debugger是好用, 但在客户机器上安装是不可能的.

先是找到了codeplex上一个带UI的工具, 叫 MSE(Managed Sxx Explorer), 可惜只针对.NET 2.0

接下来找到了 Mike Stall的一篇blog:

Tool to get snapshot of managed callstacks

, 正好满足需求:

http://blogs.msdn.com/b/jmstall/archive/2005/11/28/snapshot.aspx

稍加修改, 通过 System.Process.GetProcessesByName 来找到要检测的进程. 可堪一用.

 

另外, 编译时, 需要 reference c:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\MdbgCore.dll 这个文件, 这是windows SDK的一部分.

运行时, 这个文件也需要. 但除这个文件之外, 不再依赖于其它非系统的DLL了.

阅读(1306) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~