从 Windows Vista 开始,我们可以选择直接从任务管理器创建进程的内存转储。遗憾的是,Windows Server 2003 还没有这个选项 :( 我找到了做一个完整的系统范围内存转储的方法,但这有点太多了。
有没有办法转储单个进程?由于这是一个生产服务器,我不想安装任何在后台运行的重量级工具或服务,理想情况下我只想转储进程,将转储复制到我自己的机器上并在那里调试它。
从 Windows Vista 开始,我们可以选择直接从任务管理器创建进程的内存转储。遗憾的是,Windows Server 2003 还没有这个选项 :( 我找到了做一个完整的系统范围内存转储的方法,但这有点太多了。
有没有办法转储单个进程?由于这是一个生产服务器,我不想安装任何在后台运行的重量级工具或服务,理想情况下我只想转储进程,将转储复制到我自己的机器上并在那里调试它。
您可以将Windows 调试器(ntsd 或 windbg)附加到进程,然后当您想要创建进程的转储时,您可以使用 .dump 命令:
0:000> .dump /ma myprocess-crash.dmp
Creating myprocess-crash.dmp - mini user dump
Dump successfully written
0:000>
是的,查找 userdump.exe。请参阅此知识库文章。
我认为这个“答案”应该是 jeffamaphone 答案下的评论,但我没有足够的声誉发表评论。
Windows Server 2003 附带 ntsd,因此无需安装任何东西。获取进程的进程 ID 并将 ntsd 附加到进程:
C:> ntsd -p 4356
然后使用 ntsd 转储进程:
.dump /f c:\MyDumpFiles\foo.dmp
不要忘记来自 sysinternals.com 的 procdump(重定向到 MS,因为他们几年前购买了它们)。非常小的下载。