如何禁用调试断言对话框 Visual Studio 或输出 exe
Posted
技术标签:
【中文标题】如何禁用调试断言对话框 Visual Studio 或输出 exe【英文标题】:How to disable debug assertion dialog visual studio or on the output exe 【发布时间】:2015-02-04 08:23:32 【问题描述】:如何在 Visual Studio 或输出可执行文件上禁用断言对话框。 我正在使用 c++。
运行我的可执行文件时,我会看到带有选项 Abort/Retry/Ignore 的 Debug 对话框
我已经尝试过以下选项但没有成功: 注销后也没有成功:
选项 1:
在工具选项下的即时调试中清除托管、本机或脚本
选项 2:
HKLM\Software\Microsoft.NETFramework
将 DbgJITDebugLaunchSetting 从 10(十六进制)更改为 1(十六进制)
选项 3:
启动注册表编辑器并在 HKEY_LOCAL_MACHINE 子树中找到以下注册表子项: \SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\AEDEBUG
选择调试器值。
在“编辑”菜单上,单击“字符串”。• 要使用 Windows 调试器,请键入 windbg -p %ld -e %ld。 • 要使用 Visual C++ 4.2 或更早版本,请键入 msvc -p %ld -e %ld。 • 要使用 Visual C++ 5.0 或更高版本,请键入 msdev.exe -p %ld -e %ld。 • 要使用 Dr. Watson,请键入 drwtsn32.exe -p %ld -e %ld。您还可以通过运行以下命令将 Dr. Watson 设为默认调试器:drwtsn32.exe -i。 4. 选择确定并退出注册表编辑器。
【问题讨论】:
【参考方案1】:带有选项 Abort/Retry/Ignore 的调试对话框仅出现在程序的调试版本中。首先你可以尝试的是在Release中编译应用程序。第二个选项是重新定义使该对话框出现的 ASSERT 宏。当然,这些选项只有在您的应用程序包含在源代码中并且能够重新编译它时才有效。由于您有二进制应用程序,因此您只能在调用消息框以强制跳过消息框调用时破解此二进制文件。 更新:您似乎尝试使用影响 CLR (.NET) 应用程序的选项。使用非托管 C++ 时,它不起作用。请参阅项目属性->C/C++->常规->公共语言运行时支持选项。如果它为空或“不支持”,则您使用的是明确的非托管 C++
【讨论】:
但是,我想要一个强大的解决方案,除了断言禁用 NULL 访问和其他崩溃 如果您想要什么,请尝试索取。当应用程序遇到内存访问冲突或未处理的异常等情况时,情况就完全不同了。调试断言只是一个警告,它只是告诉你有什么不对或可能不对。访问冲突是一种通常无法恢复的严重错误。未处理的异常可以被 try-catch 块捕获,并且需要了解你的程序,即你只需要搞砸你的错误。 好吧,当应用程序崩溃时,您可以运行另一个进程来监控它并观察它完成。完成后,可以分析返回码。以上是关于如何禁用调试断言对话框 Visual Studio 或输出 exe的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 中禁用基于对话框的 MFC 应用程序的自动关闭?