验尸.Net调试

时间:2013-01-05 13:46:54

标签: .net debugging vb6 clr

在旧的VB6应用程序中添加了一个.Net组件(C#,COM interop)。在更改之前和之后,旧应用程序有时会崩溃(访问冲突)。但不同之处在于,事后调试器(即drwtsn32.exe)不再启动。 捕获C#中的错误不是一个选项,因为该bug不是.Net调用堆栈的一部分,因此MyHandler也不会被触发:

AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);

如何再次触发事后调试? 在此先感谢您的帮助! GMore

2 个答案:

答案 0 :(得分:1)

  1. 您可以配置注册表,以便调试器/转储器在崩溃时运行。有关Google的更多详情(请参阅Collecting User-Mode Dumps以及Configuring Automatic Debugging)。
  2. 正如Hans Passant所提到的,一些工具可以通过在第二次机会异常上创建转储来帮助解决问题(但如果错误是随机的并且很少见,那么这些工具就不那么有用了):ProcDump(SysInternals),ADPlus(适用于Windows的调试工具。)

答案 1 :(得分:1)

ProcDump在XP系统(发生问题时)上作为事后调试器工作正常,而如果.net是应用程序的一部分,则drwtsn32失败。谢谢你的帮助!