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、崩溃和古怪
Python中pyqt QWebEngineView win32gui EnumWindows程序崩溃