调试之路
文章平均质量分 75
分享一些调试技巧,包括内存泄露、崩溃、性能方面的调查。
muzizongheng
熟悉.net技术栈、web技术栈、ELK、xml/xslt/xsd、mfc、python等;熟悉DICOM、IHE熟悉敏捷、DDD
展开
-
WPF的TextBox抛出InvalidOperationException异常:Cannot close undo unit because no opened unit exists.
最近遇到一个问题,应用使用过程中突然崩溃,查看dump发现异常信息如下:UI dispatcher has encountered a problem:无法关闭撤消单元,因为不存在已打开的单元。在 at MS.Internal.Documents.UndoManager.Close(IParentUndoUnit unit, UndoCloseAction closeAction) at原创 2016-02-29 19:07:10 · 3061 阅读 · 3 评论 -
WPF输入框Paste时出错,IDataObject的GetData抛出OutOfMemoryException
现象:客户在使用过程中,在输入框粘贴时,程序崩溃分析:从dump和log看到是:Insufficient memory to continue the execution of the program. at System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC& format, STGMEDIUM& med原创 2016-02-01 19:16:39 · 2249 阅读 · 0 评论 -
WPF的TreeView执行ExpandSubtree时抛出异常System.NullReferenceException
最近拿到一个dump,有应用崩溃,通过查看dump,异常信息如下:0:012> !peException object: 0000000005187278Exception type: System.NullReferenceExceptionMessage: Object reference not set to an instance of an object.Inn原创 2016-02-27 21:18:33 · 3004 阅读 · 0 评论 -
Windbg调试WPF的依赖属性
我们用wndbg调试时,很多时候需要查看某个控件的依赖属性值。比如:我们查看DataGridColumnHeader的Content依赖属性 1.我们用到的windbg的命令有:!do, !da -details, .formats 2.利用!do查看依赖对象的成员变量, 找到具体依赖属性的地址0:000> !do 00000000039a71d8Name: System.Wi原创 2015-07-09 20:44:52 · 2112 阅读 · 0 评论 -
WPF内部DeliverEvent读锁和PrivateAddListener写锁导致死锁
准备工作1.对失去响应进程创建转储文件2.配置该进程的pdb文件3.复制该进程所在机器的系统dll(sos.dll, clr.dll, mscordacwks.dll)4.配置系统dll的pdb文件路径, 或者直接从msdl.microsoft/download/symbols下载(注意端口是否被封)分析过程:1.利用~*e !clrstack得到UI线程的ID 为122.利用~12e !cl原创 2015-07-09 19:54:07 · 2147 阅读 · 0 评论 -
安装chrome插件Advanced Rest Client来调试RESTFul
1.下载插件:Advanced Rest Client2.因为最新版的Chrome不支持本地安装插件,所以我们要使能开发者模式3.把插件后缀名crx改为zip,解压,然后点击‘加载正在开发的扩展程序’, 选择解压目录就可以加载成功4.如图:5. 点击‘详细信息’, 选择‘创建快捷方式’6.ok,现在可以随时启动Advanced Rest Client来调试RESTFul服务了原创 2015-03-10 14:25:57 · 41972 阅读 · 3 评论 -
Visual Studio 2010中的Profiler使用
Visual studio 2010 的Profiler是自带的性能工具, 利用它我们可以找出程序中的性能瓶颈,然后不断优化不断再测试。简介Profiler有利用向导启动程序和后期附加到程序两种关联被测模块的方式,测试方式也有两种:Sampling(采样)和Instrumentation(检测)。Sampling:按设置的时间间隔中断计算机处理器并收集函数调用堆栈。 调用堆栈是一个动态结构,用于原创 2015-03-05 16:19:28 · 4310 阅读 · 0 评论 -
如何用windbg分析内存泄露
1. 必须在命令行中设置为要分析的进程打开用户堆栈信息:C:\Program Files\Debugging Tools for Windows (x64)>gflags.exe -iYourDebugProcess.exe +ust2. 必须是Debug版本的进程3. 设置好windbg的pdb路径,即symbol path4. 利用windbg的原创 2014-01-17 17:20:41 · 14083 阅读 · 2 评论 -
如何用Visual Studio集成SOS.dll进行调试
1.用Visual Studio打开工程源码2.打开要调试的Project的属性, Debug\Enable unmanaged code debugging确认勾选。3.在需要调试的地方加上断点4.打开Tools\Attach to process..., 快捷键ctrl+alt+p5.选择要调试的进程, 注意:Attach To应该勾选上Native6.打开Debug\Windows\Imme原创 2015-03-04 13:07:56 · 3126 阅读 · 0 评论 -
使用SOS.dll调查内存泄露
1.用windbg或者VS加载SOS.dll, 可以参考我的另外一篇“如何用Visual Studio集成SOS.dll进行调试”2. (1)用GCHandleLeaks调查 具体示例如下:0:003> !gchandleleaks-------------------------------------------------------------------------------G原创 2015-03-04 13:13:54 · 1769 阅读 · 0 评论