在我的情况下,不需要任何注册表修改。根据这个主题和 Redd 的回答,我以这种方式修改了我的 Program.cs 文件:
static void Main()
{
try
{
System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
System.Windows.Forms.Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(OnGuiUnhandedException);
AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
var form = new MainForm();
form.ShowDialog();
}
catch (Exception e)
{
HandleUnhandledException(e);
}
finally
{
// Do stuff
}
}
private static void HandleUnhandledException(Object o)
{
// TODO: Log it!
Exception e = o as Exception;
if (e != null)
{
}
}
private static void OnUnhandledException(Object sender, UnhandledExceptionEventArgs e)
{
HandleUnhandledException(e.ExceptionObject);
}
private static void OnGuiUnhandedException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
HandleUnhandledException(e.Exception);
}
现在我的调试器工作正常,所以它会在未处理的异常上停止并且不会在处理过的异常上停止。看起来微软在操作系统级别为 Windows 7 64 位解决了 SP1 中的静默异常问题,但强制 VS 的正确工作仍然需要一些用户/程序员的操作。