我想使我的 mfc 应用程序崩溃

Posted

技术标签:

【中文标题】我想使我的 mfc 应用程序崩溃【英文标题】:I want to crash my mfc application 【发布时间】:2014-04-23 03:48:43 【问题描述】:

当我执行这个...

void CcrashDlg::OnBnClickedBtnCrash()

    char* ptr = NULL;
    *ptr = 1;

应用程序只是记录“访问冲突”,没有发生任何事情。

如何使我的 MFC 应用程序崩溃? (视觉工作室 2010)

【问题讨论】:

您有任何异常处理程序吗?我不确定,但也许 MFC 在某些情况下会愚蠢地吞下异常(例如单击此按钮)。 使用发布版本尝试您的代码。 @JonathonReinhart 只是默认使用我的 onbnclickedbtncrash() 生成的代码。 @jussij 版本与调试相同 This 你可能会感兴趣。 【参考方案1】:

我相信答案隐藏在问题的 cmets 中,所以我将在这里总结一下 - 这是重要的东西。

完整的细节在这个链接:The case of the disappearing OnLoad exception – user-mode callback exceptions in x64。

您预计会导致程序崩溃的无效操作并非在所有情况下都会崩溃。这包括其他答案中概述的许多技术。

仅当您使用 64 位版本的 Windows 并且您位于由 Windows 内核调用的函数中时,才会出现此问题。在 32 位版本的 Windows 中,可以从调用内核的代码中捕获异常或无效操作,但在 64 位版本的 Windows 中这是不可能的。 Windows 本身会在用户/内核边界捕获错误,然后忽略!这被认为是比每次都使程序崩溃更好的结果,因为在 32 位中运行良好的 catch 块不再有机会处理错误。

您应该仍然可以使用 ExitProcessTerminateProcess 立即停止该过程,但我还没有尝试过。

【讨论】:

【参考方案2】:

只需将一个数字除以零,

int div = 1;
div--;
int cr = (any number)/div;

【讨论】:

【参考方案3】:

这是我用来使我的应用程序崩溃的原因。我想它和你的一样。在发布模式下,它也会崩溃。

*(int*)0 = 1;

【讨论】:

【参考方案4】:

Assert( NULL ) 将使您的应用程序在调试模式下崩溃。我认为您不想让发布版本崩溃,但如果是这样,您可以使用Verifythere/both。

其他导致崩溃的简单方法是使用带有错误格式说明符的sprintf,例如在预期“%d”时输入字符串。

【讨论】:

【参考方案5】:

    abort() 在释放模式下工作

    在 64 位操作系统上编译 win64 平台时应用崩溃。

【讨论】:

以上是关于我想使我的 mfc 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

强制任何正在运行的进程崩溃

Core Data 使我的应用程序崩溃

mmap.setonMarkerDragListener 使我的应用程序崩溃

我想从 C++ 非托管代码调用 C# 委托。无参数委托工作正常,但有参数委托使我的程序崩溃

为啥意图使我的应用程序崩溃?

为啥我的 unwind segue 会使我的应用程序崩溃?