Category Archives: Debug

.NET Reflector 7.0 License 机制分析

.NET Reflector免费版只能升级到6.7.0.3. 可下载(http://reflector.red-gate.com/download.aspx?TreatAsUpdate=1)的最新版本为7.0. 运行时会要求Activate。   点击Active 按钮,弹出Activate 对话框 如果选择继续执行, 通过菜单也可以呼出Activate对话框 祭出WinDbg, F6, Attached到Reflector的进程上.根据WinDbg的输出,得知Reflector是基于.NET2.0的,*** wait with pending attachWARNING: Inaccessible path: ‘d:\mypdb’Symbol search path is: srv*d:\MsSymbols*http://msdl.microsoft.com/download/symbols;Executable search path is: ModLoad: 00400000 00848000   D:\_Personal\_DevTools\Reflector7\Reflector.exe…ModLoad: 79e70000 7a400000   C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll…因此执行 .loadby sos mscorwks  加载当前.NET版本对应的sos , 如果debug .NET 4.0, … Continue reading

Posted in Debug | Leave a comment

Why my ADPlus 7 can’t create dump for w3wp.exe on Win 7

用adplus生成dump是一件很容易的事,只需使用命令        adplus -hang -pn w3wp.exe -o d:\dumps 正常情况下,adplus会在的d:\dumps目录下生成一个单独的目录,并在目录下生成4个文件:ADPlus logADplus reportDebuggerScriptDump file 今天当我执行这个熟悉的命令时却只生成了ADPlus report和DebuggerScript。似乎是ADPlus生成好了Debugger Script, 传递给了CDB, 但CDB没有执行。 一度我怀疑是不是新版本的ADPlus 7有问题(ADPlus 7之前是script,现在是.NET exe)。于是我尝试对一个我自己写的小程序生成dump,完全没问题。 我只能怀疑Win7中万恶的AUC了,果然,以administrator身份打开cmd窗口,再执行asplus就可以正常生成dump了。

Posted in Debug | Leave a comment

真的猛士,敢于调戏各种Dump文件

Debug一个Dump文件貌似简单,好像只需点上一支烟,在WinDbg中打开Dump文件,加载SOS,执行几个命令,就可找出问题所在….可惜这只是童话中才存在的场景,其可爱指数直逼“从此,公主和王子过上了幸福的生活”。现实中的场景往往是这样的,工作在32bit开发环境中的Developer奉命debug一个在64bit工作环境中生成的64bit进程或32bit进程的dump文件,而且,工作环境中的.NET Framework也不一定和开发环境一样,更惨的是,生成dump文件的过程本身就是错误的,或这个dump文件也许根本就不是full dump,种种遭遇,只能用惨淡二字来形容,然而,说到惨淡二字,又让人联想起另外四个字,那就是“真的猛士”。真的猛士,敢于搞定各种Dump文件。 1.处理不同版本的.NET Framework下生成的dump    通常执行.loadby sos mscorwks 可以根据本机.NET核心dll 的版本加载对应的SOS    在.NET 4.0中core dll的名字被改变了,相应的命令参数变成:.loadby sos clr     但是如果执行SOS命令!threads 或!pe 显示    PDB symbol for mscorwks.dll not loaded    Failed to load data access DLL, 0x80004005     执行!clrstack不能显示堆栈中的函数名称   :019> !clrstack     OS Thread Id: … Continue reading

Posted in Debug | Leave a comment

Hardcore production debugging in .NET – Ingo Rammer

http://www.viddler.com/player/a1ea78dc/

Posted in Debug | Leave a comment

Tess Ferrandez:Common ASP.NET production issues and how to troubleshoot them with WinDbg

http://www.msteched.com/2008/Europe/WUX405http://channel9.msdn.com/Blogs/MSDNSweden/Vanliga-fel-som-grs-med-ASPNET-och-hur-du-hittar-dem-med-WinDbg Download: http://e.msteched.com/public/online/08_EU_WUX405_Low_DEV.wmv

Posted in Debug | Leave a comment

Tess Ferrandez: Debugging ASP.NET Applications with WinDbg

http://vimeo.com/9936296

Posted in Debug | Leave a comment

New Debugging Features in VS2010

1. VS中生成Dump文件 在调试过程中,选择菜单Debug->Save Dump As,保存当前目标进程的dump文件。 2. VS中调试dump文件 参考Hanselminutes on 9 – Debugging Crash Dumps with Tess Ferrandez and VS2010First look at debugging .NET 4.0 dumps in Visual Studio 2010 这是VS2010的一项新功能。但不幸的是: 这个功能只支持.NET4.0以上的.NET debug,.NET3.5和更早版本的只能进行Native Debug。 直接在VS2010 中打开(Ctrl+O)dump文件,可以看到 3. Parallel Stacks Debug->Windows->Parallel Stachs(Ctrl+D+S) … Continue reading

Posted in Debug | Leave a comment

在WinDbg中查看String的内容

比如有字符串,其地址为0d0e32180:026> !do 0d0e3218Name: System.StringMethodTable: 790fd8c4EEClass: 790fd824Size: 329922(0x508c2) bytes(C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)String: /wEPDwULLTE3MDA2MjU5MjQPZBYCAgMPZBYEAgEPEA8WB………. 可以用命令du 0d0e3218+0xc 0d0e3218+0x508c2来查看它的内容。du命令用来dump Unicodedu <start> <end>用来显示地址<start>和<end>之间的内容。要调查的字符串对象的地址是0d0e3218,真正的字符串起始地址是0d0e3218+0xc,根据!do命令的输出,这个字符串的长度是0x508c2。因此可以用命令du <address> <address>+size来显示。其输出为0:026> du 0d0e3218+0xc 0d0e3218+0x508c20d0e3224  "/wEPDwULLTE3MDA2MjU5MjQPZBYCAgMP"0d0e3264  "ZBYEAgEPEA8WBh4NRGF0YVRleHRGaWVs"0d0e32a4  "ZAULUHJvZHVjdE5hbWUeDkRhdGFWYWx1"0d0e32e4  "ZUZpZWxkBQtQcm9kdWN0TmFtZR4LXyFE"0d0e3324  "YXRhQm91bmRnZBAV6AcJUHJvZHVjdCAw"0d0e3364  "CVByb2R1Y3QgMQlQcm9kdWN0IDIJUHJv"……为了让WinDbg生成一个完整的字符串,用/pS 1 /ps 1略过输出的第一列,用.foreach命名把输出合并成一个字符串:0:026> .foreach /pS 1 /ps 1 (token {du 0d0e3218+0xc 0d0e3218+0x508c2}){.echo ${token}}/wEPDwULLTE3MDA2MjU5MjQPZBYCAgMPZBYEAgEPEA8WBh4NRGF0YVRleHRGaWVsZAULUHJvZHVjdE5hbWUeDkRhdGFWYWx1…. 这一招用在哪里呢?场景1:查看ViewState.BTW, … Continue reading

Posted in Debug | Leave a comment

《Windows用户态程序高效排错》 中涉及到的链接(ZT)

原书见作者Blog:http://www.cnblogs.com/lixiong/archive/2010/02/11/1667516.html 为了方便使用,我把 《Windows用户态程序高效排错》 中涉及到的链接都做成索引放到这里。其中好多链接本来是在我MSN Space blog上的,由于担心教育网用户可能无法访问MSN Blog,所以把相关的MSN Space上的文章也拷贝过来放到了这里。 DataSet and DataTable in ADO.NET 2.0http://msdn.microsoft.com/msdnmag/issues/05/11/DataPoints/default.aspx Reflector for .NEThttp://www.aisto.com/roeder/dotnet/ SafeHandle: A Reliability Case Study [Brian Grunkemeyer]http://blogs.msdn.com/bclteam/archive/2005/03/16/396900.aspx CLR SafeHandle Consideration [grapef]http://eparg.spaces.msn.com/blog/cns!59BFC22C0E7E1A76!576.entryhttp://blog.csdn.net/eparg/archive/2007/09/19/1791949.aspx RFC 1925 (RFC1925)http://www.faqs.org/rfcs/rfc1925.htmlhttp://blog.csdn.net/eparg/archive/2007/09/19/1791954.aspx Large memory support is available in Windows Server 2003 … Continue reading

Posted in Debug | 1 Comment

[笔记]VS2010 Debug小窍门

原文见:http://weblogs.asp.net/scottgu/archive/2010/08/18/debugging-tips-with-visual-studio-2010.aspxhttp://weblogs.asp.net/scottgu/archive/2010/04/21/vs-2010-debugger-improvements-breakpoints-datatips-import-export.aspx 1.执行到光标所在的代码行(Ctrl+F10)   常见的debug场景是:为了调查一段代码,会提前设置一个断点,中断后再单步执行(F10/F11)到要调查的代码。在VS2010中,不再需要单步执行N次,直接把光标置于要调查的代码行,再使用Ctrl+F10即可执行到要调查的代码行。 2. 给断点加Label 可以对Label进行排序,搜索 3. Pinn DataTips 4. pinned DataTip的第二个功能:保存Debug过程中中变量的值 5.条件断点(vs2008也支持)        Condition:根据某个变量值中断       Hit count:根据断点所在代码行被执行的次数中断    Filter:断点对某些进程,线程起作用 6.When Hit(vs2008也支持)    当断点断到时执行一些动作             Trace points:输出一些Trace信息,并选择继续执行,还是中断。                       比如输出:当前i={i}    Run Macro:在VS中点击菜单: Tools->Macro->Macros IDE(或Alt+F11),调出Macro编辑器,在MyMacros节点下编写自己的Macro函数     Sub DumpLocals()        Dim outputWindow As EnvDTE.OutputWindow        outputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object         … Continue reading

Posted in Debug | Leave a comment