我有一个C CLI程序崩溃并在Windows 7中生成此错误:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
首先,我在某处读到它可能导致assert
语句触发,因此作为第一个措施,我用if语句替换它们以捕获并记录任何潜在的失败断言。其次,我用printf
语句喷涂代码,以查看程序退出的位置。第三,我特别确保在没有首先记录退出的情况下代码不会退出。该程序是有线程的,因此有很多事情正在发生,但没有太复杂。
现在的问题是我第二次收到错误,表明程序退出我的printf
语句之外,所以我无法分辨它退出的位置。
所以有两个问题:
assert
语句之外,还有其他关于此类错误的问题吗?我找到了很多关于此错误的C++
博客条目,但没有太多C
篇。我正在使用Visual C ++ 2008 Express Edition。另外,我正在调用CMD.exe
中的程序。
答案 0 :(得分:1)
首先,您删除了对assert
的调用,这通常是为了帮助追踪程序员所做的假设不成立的情况?真?嗯...
其次,您是否熟悉调试器? Visual C ++应该包含一个集成调试器,当程序在调试模式下运行时,它不仅可以显示进程退出的位置,还可以 显示程序崩溃的确切位置,它是如何进行的那个点和崩溃时变量的值是什么。想象一下!
这个article主要谈论C#,但原则是相同的。
答案 1 :(得分:0)
您获得的消息来自VC运行时。当抛出异常并且没有被捕获时,它会发生。
使用调试调试配置(应该是默认设置)编译程序并在调试器中运行,当遇到未处理的异常时,调试器将中断。在“Debug”菜单下,您将找到“Exceptions”项,它将帮助您微调调试器响应异常的方式。
请注意,在C ++和Windows的上下文中,“exception”可能意味着以下几种情况之一;有Win32异常,C ++异常和VS结构化异常处理。
断言是针对您从未期望发生的失败条件,但无法证明不会发生。你应该总是对一个断言感到惊讶。 assert()的许多(大多数?all?)实现仅在调试配置中编译,而不是在发布配置中编译。