我怎么能抓住这个“这个应用程序已经请求运行时以一种不寻常的方式终止它”我的C程序错误?

时间:2013-04-26 05:24:03

标签: c windows runtime exit terminate

我有一个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语句之外,所以我无法分辨它退出的位置。

所以有两个问题:

  1. 我怀疑我需要使用适当的调试器来查看有关退出的更多详细信息,如果有,哪一个?
  2. 除了assert语句之外,还有其他关于此类错误的问题吗?我找到了很多关于此错误的C++博客条目,但没有太多C篇。
  3. 我正在使用Visual C ++ 2008 Express Edition。另外,我正在调用CMD.exe中的程序。

2 个答案:

答案 0 :(得分:1)

首先,您删除了对assert的调用,这通常是为了帮助追踪程序员所做的假设不成立的情况?真?嗯...

其次,您是否熟悉调试器? Visual C ++应该包含一个集成调试器,当程序在调试模式下运行时,它不仅可以显示进程退出的位置,还可以 显示程序崩溃的确切位置,它是如何进行的那个点和崩溃时变量的值是什么。想象一下!

这个article主要谈论C#,但原则是相同的。

答案 1 :(得分:0)

您获得的消息来自VC运行时。当抛出异常并且没有被捕获时,它会发生。

使用调试调试配置(应该是默认设置)编译程序并在调试器中运行,当遇到未处理的异常时,调试器将中断。在“Debug”菜单下,您将找到“Exceptions”项,它将帮助您微调调试器响应异常的方式。

请注意,在C ++和Windows的上下文中,“exception”可能意味着以下几种情况之一;有Win32异常,C ++异常和VS结构化异常处理。

断言是针对您从未期望发生的失败条件,但无法证明不会发生。你应该总是对一个断言感到惊讶。 assert()的许多(大多数?all?)实现仅在调试配置中编译,而不是在发布配置中编译。