我需要调试在Windows上运行的正在运行的程序.它有时会因"内存访问冲突"而崩溃.
使用windbg(无法使用IDE)我附加到运行进程(这是程序不能停止的要求)
命令行是
windbg -g -p <pid>
Run Code Online (Sandbox Code Playgroud)
问题是我现在抓住所有第一次机会异常,但我只对任何第二次机会异常感兴趣(不关心哪种类型的异常).
如何设置windbg以捕获任何第二次机会异常?
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
).如果一切正常,您可以开始调试.