如何仅为一个应用程序禁用Visual Studio调试器

时间:2012-01-17 13:55:40

标签: .net vb.net visual-studio

我目前正在开发一个处理COM dll中定义的对象的VB.net程序。 问题是,有时该对象会导致崩溃:抛出无法使用“Try Catch”处理的异常,并出现一个要求使用Visual Studio进行调试的对话框。 我想在此应用程序上禁用此对话框 。 所有其他.Net应用程序应在崩溃时显示此对话框。 顺便说一下,我使用visual Studio 2008。

1 个答案:

答案 0 :(得分:1)

我最终选择了另一种方法而不是Hans的方法(请参阅注释):配置注册表以使用自定义程序作为调试器而不是调试器。该程序(我们称之为“DebuggerCaller.exe”)然后重定向到Dr Watson(或任何其他已注册的调试器),或者以崩溃进程的名称静默创建转储文件或日志。

如果是托管应用程序

您需要注册表中的设置

KEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\DbgJITDebugLaunchSetting = 2

这使得在崩溃的情况下调用在HKEY_LOCAL_MACHINE \ Software \ Microsoft.NETFramework \ DbgManagedDebugger的注册表中定义的应用程序。它可能不存在或等于16(默认值)。 在安装了Visual Studio及其jit调试器的计算机中,值为:

HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\DbgManagedDebugger 
= "c:\WINDOWS\system32\vsjitdebugger.exe" PID %d APPDOM %d EXTEXT "%s" EVTHDL %d

应该用

之类的东西代替
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\DbgManagedDebugger 
= "MyDebugCaller.exe"  PID %d APPDOM %d EXTEXT "%s" EVTHDL %d

否则,该条目可能不存在或

HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\DbgManagedDebugger 
= "drwtsn32.exe" -p %ld -e %ld

应该替换为

之类的东西
HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\DbgManagedDebugger 
= "*MyDebugCaller.exe*"  -p %ld -e %ld

请注意,参数保持不变,这样我们的debuugger可以使用它们(尤其是PID)来确定进程名称,创建日志并在需要时转发到另一个调试器。

如果是原生应用

程序非常相似。 第一集

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Auto 
= 1

定义本机应用程序调试器的条目键是

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger 

如果安装了Visual Studio,则其值通常为drwtsn32.exe" -p %ld -e %ld"c:\WINDOWS\system32\vsjitdebugger.exe" -p %ld -e %ld。 它应该改成这样:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger 
= "*MyDebugCaller.exe*" -p %ld -e %ld

我希望这很清楚。 您可以在http://msdn.microsoft.com/en-us/library/2ac5yxx6%28v=vs.90%29.aspx

获取有关jit调试器设置的信息