分类: 嵌入式
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了.