我想使我的 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 块不再有机会处理错误。
您应该仍然可以使用 ExitProcess
或 TerminateProcess
立即停止该过程,但我还没有尝试过。
【讨论】:
【参考方案2】:只需将一个数字除以零,
int div = 1;
div--;
int cr = (any number)/div;
【讨论】:
【参考方案3】:这是我用来使我的应用程序崩溃的原因。我想它和你的一样。在发布模式下,它也会崩溃。
*(int*)0 = 1;
【讨论】:
【参考方案4】:Assert( NULL )
将使您的应用程序在调试模式下崩溃。我认为您不想让发布版本崩溃,但如果是这样,您可以使用Verify
there/both。
其他导致崩溃的简单方法是使用带有错误格式说明符的sprintf
,例如在预期“%d”时输入字符串。
【讨论】:
【参考方案5】:abort() 在释放模式下工作
在 64 位操作系统上编译 win64 平台时应用崩溃。
【讨论】:
以上是关于我想使我的 mfc 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
mmap.setonMarkerDragListener 使我的应用程序崩溃