使用 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
)。如果一切正常,就可以开始调试了。
我需要在 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
)。如果一切正常,就可以开始调试了。