是否可以在 Windows 服务崩溃时创建完整的内存转储?显然,有众所周知的事后调试器,它可以收集失败进程的内存转储。但 Windows 服务的问题在于它们在系统上下文中运行,而不是在用户上下文中运行。有谁能够帮我?
到目前为止,我用 WinDbg 尝试过:
- 我通过执行 WinDbg -I 将 WinDbg 设置为默认的事后调试器。
- 我确认在注册表的两个位置(HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug 和 HKLM\SOFTWARE\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\AeDebug)中存在 Auto 和 Debugger 这两个条目。
- 我将 WinDbg 配置为在启动时自动写入内存转储,方法是将 Debugger 条目更改为 "Path\WinDbg.exe" -p %ld –c ".dump /ma /u D:\CrashDump.dmp" -e %ld –g
- 我验证了 WinDbg 对内存转储文件的目标位置具有和不具有管理权限的权限。
但它不起作用。:(
如果我编写一个在启动后故意崩溃的普通用户模式应用程序,WinDbg 会弹出并自动将 .dmp 文件写入目标位置。但是,如果我的服务崩溃,它不会。在任务管理器中,我可以看到 WinDbg 在我的服务进程崩溃后启动,但两者都只保留在列表中,没有任何转储文件。