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

使用windbg仅捕获第二次机会异常,windbg,Windbg,我需要调试在windows上运行的程序。 它有时会因“内存访问冲突”而崩溃 windbg(不可能使用IDE)I连接到运行进程(这是程序不应停止的要求) 命令行是 windbg -g -p <pid> windbg-g-p 问题是我现在捕获了所有第一次机会异常,但我只对任何第二次机会异常感兴趣(不关心哪种类型的异常) 如何设置windbg以捕获任何第二次机会异常?windbg将默认捕获第二次机会异常,因此您只需关闭第一次机会异常。对单一类型的异常执行此操作很简单: 0:000>

我需要调试在windows上运行的程序。 它有时会因“内存访问冲突”而崩溃

windbg(不可能使用IDE)I连接到运行进程(这是程序不应停止的要求)

命令行是

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


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

windbg将默认捕获第二次机会异常,因此您只需关闭第一次机会异常。对单一类型的异常执行此操作很简单:

0:000> sxd av
0:000> *** Check the setting
0:000> .shell -ci "sx" find "av"
请参阅将所有异常类型设置为仅限第二次机会

由于在调试时执行这些命令似乎不是一个选项,因此您还可以尝试配置禁用异常处理的工作区,然后重新使用该工作区。为了理解工作空间的概念,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

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

查看调试->事件筛选器,并将异常标记为禁用的
-将使调试程序仅在第二次机会时中断。该对话框有点神秘,但在文档的帮助下,可以正确设置它。不幸的是,当“调试对象正在运行”时,该对话框被禁用,当我未连接时,该对话框也被禁用。它仅在进程中断时可用。我不允许打断这个过程。谢谢你的回答。这个想法正在奏效。但是,我必须从调试器中断/停止正在运行的进程才能输入此命令。在我的用例中不允许暂停进程。在附加到进程之前,我正在搜索安装调试程序的解决方案。我已经尝试过了,此命令行选项将在首次中断/捕获后执行。@ToBe:我还不明白中断的关键是什么。使用
-c“sxd av;g”
应该没有什么影响。否则,配置的工作区可能会这样做。使用
-W
加载工作区。“我稍后会尝试扩展答案。@ThomasWeller:程序会定期发送一个由看门狗(硬件)保护的信号。”。如果程序因调试器中断而停止,它将因此关闭环境。需要环境来重现错误。但是通过工作区使用预设置是一个很有前途的想法。工作区方法似乎是可行的。我补充了一些细节。