使用windbg仅获得第二次机会异常

ToB*_*oBe 2 windbg

我需要调试在Windows上运行的正在运行的程序.它有时会因"内存访问冲突"而崩溃.

使用windbg(无法使用IDE)我附加到运行进程(这是程序不能停止的要求)

命令行是

windbg -g -p <pid>
Run Code Online (Sandbox Code Playgroud)

问题是我现在抓住所有第一次机会异常,但我只对任何第二次机会异常感兴趣(不关心哪种类型的异常).

如何设置windbg以捕获任何第二次机会异常?

Tho*_*ler 5

WinDbg默认会捕获第二次机会异常,所以你只需要关闭第一次机会异常.对单一类型的异常执行此操作很简单:

0:000> sxd av
0:000> *** Check the setting
0:000> .shell -ci "sx" find "av"
Run Code Online (Sandbox Code Playgroud)

请参阅设置所有异常以将所有异常类型设置为仅次数.

由于在调试时似乎不是执行这些命令的选项,因此您还可以尝试配置禁用异常处理的工作区,然后重用工作区.为了理解工作空间的概念,MSDN文章揭示工作空间的工作原理非常有用.这是一组你应该自己做的实验.

有了这些背景知识,可以附加到任何流程

0:000> .foreach(exc {sx}) {.catch{sxd ${exc}}}
0:000> *** perhaps some other useful workspace relevant commands here
0:000> ***    e.g. .symfix seems useful
0:000> *** File / Save Workspace As ...
0:000> *** Enter a name, e.g. myworkspace
0:000> q
Run Code Online (Sandbox Code Playgroud)

使用-W myworkspace命令行开关重新启动WinDbg .附加到任何流程.检查是否已应用于您的设置(例如sx,.sympath).如果一切正常,您可以开始调试.