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

Catch only second chance exception with windbg

我需要在 windows 上调试 运行 程序 运行。 它有时会因 "memory access violation" 而崩溃。

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

命令行是

windbg -g -p <pid>

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

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

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

0:000> sxd av
0:000> *** Check the setting
0:000> .shell -ci "sx" find "av"

请参阅 将所有异常类型设置为仅第二次机会。

由于似乎无法在调试时执行这些命令,您还可以尝试配置一个禁用异常处理的工作区,然后重新使用该工作区。为了理解工作区的概念,MSDN 文章 Uncovering how Workspaces work 非常有帮助。这是一组你应该自己做一次的实验。

有了这些背景知识,附加到任何进程

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

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