Win32:如何崩溃?

Posted

技术标签:

【中文标题】Win32:如何崩溃?【英文标题】:Win32: How to crash? 【发布时间】:2011-02-13 09:34:48 【问题描述】:

我正在尝试找出 Windows 错误报告的保存位置;我今天早些时候点击了Send,但我忘记了我想“查看详细信息”以便检查内存小型转储。

但我找不到它们的存储位置(谷歌也不知道)。

所以我想编写一个会崩溃的虚拟应用程序,显示 WER 对话框,让我单击“查看详细信息”,这样我就可以进入保存转储的文件夹。

如何在 Windows 上崩溃?

编辑:我问的原因是因为我试过溢出堆栈,浮点除以零。 Stack Overflow 使应用程序消失,但没有弹出 WER 对话框。浮点除以零导致 +INF,但没有异常,也没有崩溃。

【问题讨论】:

我免费得到了其中一个带窗户的 @M28:您应该联系崩溃的应用程序的开发人员。在我的例子中,它是我们的进程内 COM 对象通过 ASP 脚本主机加载到 IIS6 的工作空间中。 它叫windows,在哪里可以找到它的开发者? :B 无意冒犯,但你没有幽默感。 也许你可以从 BF3 开发者那里得到一些提示如何使 Windows 崩溃 【参考方案1】:

你们都太啰嗦了! :-)

这是一种简洁的方法:

*((int*)0)=0;

【讨论】:

【参考方案2】:

应该是一个好的开始:

int main(int argc, char* argv[])

   char *pointer = NULL;
   printf("crash please %s", *pointer);
   return 0;

【讨论】:

可能希望将指针设置为 NULL 以外的其他值,因为它可能是 printf 检查的。也许是 0xDEADBEEF? 我使用了你的想法,我将 null 转换为一个对象,然后开始调用方法。 繁荣 @Billy ONeal:真正崩溃的不是printf,而是试图取消引用空指针。 printf 只是为了可爱,char *pointer = NULL; char crash = *pointer; 也可以。 啊,是的。我错过了那个小*字符:)【参考方案3】:

您假设内存转储仍然存在。发送后,AFAIK 转储将从机器中删除。

转储本身应该位于 %TEMP% 的某个地方。

就崩溃而言,这并不难,只要做一些导致段错误的事情。

【讨论】:

难度很大,前两次尝试都做不到。 KevinK 的想法,引用地址 0x00000000 奏效了。 您似乎是对的,XP 上的内存转储一旦发送就消失了。 Vista 保留它们,作为问题报告和解决方案中心的一部分。【参考方案4】:
void crash(void)

    char* a = 0;
    *a = 0;

【讨论】:

【参考方案5】:

不确定这是否会触发错误报告对话框,但您可以尝试除以零。

【讨论】:

这只是抛出一个异常。它不会在 Win32 上崩溃。 (注意我不是指C++异常,我指的是Win32 SEH)【参考方案6】:

官方支持的故意触发崩溃的方法可以在这里找到:

http://msdn.microsoft.com/en-us/library/ff545484(v=VS.85).aspx

基本上:

使用 USB 键盘,您必须启用 键盘引发的崩溃 注册表。在注册表项中 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\kbdhid\Parameters, 创建一个名为 CrashOnCtrlScroll,并将其设置为等于 REG_DWORD 值为 0x01。

然后:

您必须为这些重新启动系统 设置生效。

完成后,键盘 崩溃可以通过使用 以下热键顺序:按住 最右边的 CTRL 键,然后按 SCROLL LOCK 键两次。

无需编程 ;) 这里没有***改造 :)

【讨论】:

这个方法如何知道我正在调试哪个进程? (反问;你的答案是触发内核模式异常和蓝屏;我想触发用户模式进程的默认崩溃处理 - 我的进程) 我的错。我原以为您试图触发一般崩溃以查看转储文件,而不是特定进程崩溃。【参考方案7】:

有兴趣知道如何使 Windows 崩溃。但是为什么不看看

%allusersprofile%\Application Data\Microsoft\Dr Watson\ 

首先?寻找特定于应用程序的崩溃数据文件夹,我发现例如

...\FirefoxPortable\Data\profile\minidumps\ 

...\OpenOfficePortable\Data\settings\user\crashdata\.

【讨论】:

为什么?为什么不去那里看看?因为我不知道那个路径——而且我的机器上不存在那个文件夹。

以上是关于Win32:如何崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中访问 Process.MainModule.FileName 时如何避免 Win32 异常?

Win32 PrintDlg、PrintDlgEx、崩溃和古怪

进程崩溃时未释放 Win32 命名互斥锁

Python中pyqt QWebEngineView win32gui EnumWindows程序崩溃

结合 Tkinter 和 win32ui 使 Python 在退出时崩溃

作为 win32 服务运行时,OpenSSL SSL_CTX_new 崩溃