提问人:Ian Boyd 提问时间:4/28/2010 最后编辑:Ian Boyd 更新时间:1/18/2011 访问量:1206
Win32:如何崩溃?
Win32: How to crash?
问:
我试图弄清楚 Windows 错误报告的保存位置;我今天早些时候点击了“发送”,但我忘记了我想“查看详细信息”,以便我可以检查内存小型转储。
但是我找不到它们的存储位置(谷歌也不知道)。
所以我想编写一个会崩溃的虚拟应用程序,显示 WER 对话框,让我单击“查看详细信息”,这样我就可以进入保存转储的文件夹。
如何在 Windows 上崩溃?
编辑:我问的原因是因为我已经尝试过溢出堆栈,以及浮点除以零。Stack Overflow 使应用程序消失,但没有弹出 WER 对话框。浮点除以零会得到 +INF,但没有异常,也没有崩溃。
答:
您假设内存转储仍然存在。发送转储后,AFAIK 将从计算机中删除转储。
转储本身应位于 %TEMP% 的某个位置。
至于崩溃,这并不难,只是做一些导致段错误的事情。
评论
应该是一个好的开始:
int main(int argc, char* argv[])
{
char *pointer = NULL;
printf("crash please %s", *pointer);
return 0;
}
评论
printf
printf
char *pointer = NULL; char crash = *pointer;
不确定这是否会触发“错误报告”对话框,但您可以尝试除以零。
评论
void crash(void)
{
char* a = 0;
*a = 0;
}
你们都太啰嗦了!:-)
下面是一个紧凑的方法:
*((int*)0)=0;
官方支持的故意触发崩溃的方法可以在这里找到:
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 键,然后按 滚动 LOCK 键两次。
无需编程;)这里没有轮子的重新发明:)
评论
有趣的是知道如何使 Windows 崩溃。但为什么不看看
%allusersprofile%\Application Data\Microsoft\Dr Watson\
第一?我还发现了特定于应用程序的 crashdata 文件夹,例如
...\FirefoxPortable\Data\profile\minidumps\
和
...\OpenOfficePortable\Data\settings\user\crashdata\.
评论