Sof*_*Kng 7 windows debugging windbg
我正在尝试确定进程挂起的原因并且正在学习各种工具,例如Process Explorer,Process Monitor和WinDbg.
无论如何,我正在尝试使用WinDbg并在附加到我的进程后,调试器说:
(1e9c.1128): Break instruction exception - code 80000003 (first chance)
eax=7ffda000 ebx=00000000 ecx=00000000 edx=77c5c964 esi=00000000 edi=00000000
eip=77c18b2e esp=0543ff5c ebp=0543ff88 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
ntdll!DbgBreakPoint:
77c18b2e cc int 3
Run Code Online (Sandbox Code Playgroud)
如果我跑!analyze -v,它会显示:
FAULTING_IP:
ntdll!DbgBreakPoint+0
77c18b2e cc int 3
Run Code Online (Sandbox Code Playgroud)
我是一名软件开发人员(VB.NET/C#),没有这种调试级别的经验,所以我不确定我在做什么,但好像WinDbg附加到我的进程然后立即中断.然后,当我进行分析时,它认为断点(它刚刚设置)是应用程序的问题?
我应该如何使用WinDbg简单地附加到流程并进行分析?
(另外,有没有任何好的书籍/教程来开始这个级别的调试和WinDbg?)
WinDbg是一个用户和内核模式调试器,但它本身并不真正理解托管代码,因此该!analyze命令的用途有限.如果要使用WinDbg调试托管应用程序,则需要一些方法使WinDbg了解托管代码的内部结构.有许多扩展DLL可以实现这一点..NET框架附带sos.dll,还有psscor2.dll和sosex.dll等下载.
SOS和PSSCOR2提供或多或少相同的功能,而SOSEX为管理调试添加了新功能.可以使用WinDbg获得每个文件的帮助文件.例如,要获得SOS的帮助,您可以使用该!sos.help命令.
您必须加载SOS或PSSCOR2以及可能的SOSEX来使用WinDbg调试托管应用程序.例如,如果要加载SOS,请使用这样的加载命令
.loadby sos clr
这将从.NET运行时的位置加载SOS.请注意,运行时mscorwks在.NET 2和coreclrSilverlight中调用,因此如果您使用其中任何一个,则需要相应地更改.loadby命令.
WinDbg需要符号来显示其他信息.这对于非托管代码尤为重要.您可以使用该.symfix命令让WinDbg根据需要从Microsoft的符号服务器中检索符号.
当您的应用程序挂起时,您很可能会有一个或多个被阻止的线程.您可以使用!threads(或只是!t)命令查看托管线程.在.NET中,使用名为SyncBlocks的结构在内部实现简单锁.您可以使用该!syncblk命令查看这些内容.如果已加载SOSEX,则该!dlk命令可以自动检测死锁.
如果您想了解更多信息,可以阅读几本书和一些博客.
图书:
博客:
视频:
Tess Ferrandez的博客是.NET WinDbg材料的绝佳资源:
虽然她的许多文章都针对IIS/ASP.NET工作进程崩溃,挂起和泄漏,但大多数技术都可以应用于各种场景.
高级Windows调试将是一个良好的开端.
当Windbg附加到进程时,它会注入一个调用DbgBreakPoint的线程.这就是你所看到的.您可以使用〜来查看正在运行的线程,然后使用~n切换到不同的线程.k将为您提供当前线程的堆栈跟踪,这应该可以让您了解挂起.
| 归档时间: |
|
| 查看次数: |
4103 次 |
| 最近记录: |