C# 如何获得崩溃转储
我需要从程序中获取崩溃转储。我怎么得到它? 程序是用C语言编写的。什么是崩溃转储?它是什么时候创建的?它保存在哪里?C# 如何获得崩溃转储,c#,debugging,C#,Debugging,我需要从程序中获取崩溃转储。我怎么得到它? 程序是用C语言编写的。什么是崩溃转储?它是什么时候创建的?它保存在哪里? 如何阅读它?您也可以尝试使用WinDbg 崩溃转储是指将RAM内存和处理器的某些部分的内容复制到文件中。此文件是在错误的临界点创建的,可用于调试问题 这在过去对我很有效。这是在windows中进行崩溃转储的快捷键 * Start Registry Editor. * Locate the following registry subkey: o HKEY_LOCAL_
如何阅读它?您也可以尝试使用WinDbg 崩溃转储是指将RAM内存和处理器的某些部分的内容复制到文件中。此文件是在错误的临界点创建的,可用于调试问题 这在过去对我很有效。这是在windows中进行崩溃转储的快捷键
* Start Registry Editor.
* Locate the following registry subkey:
o HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\i8042prt\Parameters
* On the Edit menu, click Add Value, and then add the following registry entry:
o Name: CrashOnCtrlScroll
Data Type: REG_DWORD
Value: 1
* Exit Registry Editor and then restart the computer.
Luke,崩溃转储是指在崩溃发生时与应用程序状态相关的一整包数据,转储意味着将所有这些信息记录在某个地方,通常记录在文本文件中 一种基本的方法是在异常发生时记录整个stacktrace,以便稍后进行调查,查看哪个方法失败,引发了哪个异常,参数值是什么,等等。这不是一个真正的压榨垃圾场,但在许多情况下帮助很大 微软最近开发了一些关于崩溃转储和应用程序崩溃的东西,我认为它实际上与Windows7有关 请参见此处:应用程序恢复和重新启动
在Windows XP上,您可以使用此实用程序创建转储文件: 安装后,浏览到安装目录并运行
userdump PID
在命令行中,PID是要获取崩溃转储的进程的PID,您可以在任务管理器中找到它,但可能需要将该列添加到标准视图中
然后可以在Visual Studio中打开此文件-您只需确保已生成符号
在Windows 7中,右键单击任务管理器中的进程,然后选择“创建转储文件”和“使用ADPlus”。它与Windows的调试工具一起提供。
它将在其主目录下创建崩溃转储文件夹。您可以在以后使用WinDbg对其进行分析。因为您说的是C,所以我假设您使用的是Windows平台 crashdump或just dump是进程在特定时间点的完整内存快照和其他相关系统信息。转储可以用来调试程序崩溃、挂起、内存和资源泄漏,可能还有更多我在这里没有列出的问题 在崩溃和挂起的情况下,您希望从崩溃转储获取的第一条数据将是callstack。这表示崩溃点或某个操作被阻止且从未返回的点,因此程序处于静止状态而不执行任何操作 对于资源泄漏,可以在一段时间内收集进程的多个内存转储,并检查内存中哪些对象增长最快。这有助于缩小导致泄漏的代码部分。要了解有关调试特定问题的更多信息,我强烈建议 有几种方法可以捕获转储文件 程序转储 VisualStudio2010 WinDbg-不错,但比其他工具更吓人 使用procdump,您只需执行以下操作:
c:\>procdump.exe -ma YourProcessName.exe
此命令的结果将是写入c:\的YourProcessName.dmp的完整内存快照。-ma开关指定转储完整的内存映像。如果您正在调试崩溃或挂起,您可能不需要使用-ma开关就可以逃脱。请记住,如果没有完整的内存转储,当您检查数据结构时,您可能没有有效的数据。如果没有完整的内存转储,您仍然会有callstack数据,这些数据通常足以应付崩溃和挂起。我通常错误的一面是硬盘空间很便宜,所以收集完整的转储文件
Procdump还将在时间间隔或满足特定条件时自动进行转储。有关更多信息,请阅读上面链接中的文档。我推荐的一个开关是-e
它不会立即写入转储,而只会在程序崩溃时写入
使用Visual Studio 2010,您可以使用调试器附加到进程并保存转储文件。请记住,当您进行F5调试时,Visual Studio会自动附加程序。当程序处于中断状态断点、未处理的异常、崩溃时,“调试”菜单将具有将转储另存为…的选项。。。。然后你可以把垃圾存放在任何你想要的地方
因为您提到了C,所以您很可能正在收集托管转储文件。最简单的方法是使用VisualStudio2010。简单地说,像打开任何其他文件一样打开您创建的转储文件并开始调试
但是,如果这不是一个选项,您可以始终将VS2008或WinDbg与SOS扩展一起使用。我强烈推荐VisualStudio2010,因为SOS扩展和WinDbg通常有一个相当陡峭的学习曲线。要了解有关SOS的更多信息,请查看这些MSDN文章和
我建议使用VisualStudio或procdump的另一个原因是,它们将收集您期望的转储文件。我建议不要使用任务管理器的创建转储文件工具。原因是它将收集32位p的64位转储
难以调试的进程 您的意思是当应用程序崩溃时需要创建转储,还是只需要对正在运行的应用程序进行内存转储?因为两者的实现方式截然不同解释得很好!CrashOnCtrlScrl的可能副本用于在Windows中强制内核模式崩溃转储蓝屏死机。如果OP使用的是C,这可能比他想要的要多,尽管你在更新之前发布了;如果可以避免的话,这比我想做的要多。我强烈建议不要使用任务管理器的创建转储文件。在64位系统上,它创建32位进程的64位转储。除非您只想使用WinDbg和WOW64扩展名,否则这些转储文件几乎毫无用处。
c:\>procdump.exe -ma -e YourProcessName.exe