gpt4 book ai didi

debugging - 为 Windows 服务设置事后调试器

转载 作者:行者123 更新时间:2023-12-04 20:09:25 24 4
gpt4 key购买 nike

是否可以在崩溃时创建 Windows 服务的完整内存转储?显然,有众所周知的事后调试器,它可以收集失败进程的内存转储。但是 Windows 服务的问题在于它们在系统上下文中运行,而不是在用户上下文中运行。
有谁能够帮助我?

到现在为止,我用 WinDbg 试了一下:

  • 我通过执行 WinDbg -I 将 WinDbg 设置为默认的事后调试器。
  • 我确认在注册表的两个位置(HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug 和 HKLM\SOFTWARE\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\AeDebug)中存在 Auto 和 Debugger 两个条目。
  • 我通过将调试器条目更改为“Path\WinDbg.exe” -p %ld –c “.dump/ma/u D:\CrashDump.dmp” -e %ld –g,将 WinDbg 配置为在启动时自动写入内存转储
  • 我验证了 WinDbg 对内存转储文件的目标位置具有管理权限和不具有管理权限。

  • 但它不起作用。 :(

    如果我编写了一个在启动后故意崩溃的普通用户模式应用程序,WinDbg 会弹出并自动将 .dmp 文件写入目标位置。但是如果我的服务崩溃了,它不会。
    在任务管理器中,我可以看到 WinDbg 在我的服务进程崩溃后启动,但两者都保留在列表中,没有任何转储文件。

    最佳答案

    确保自动为 AeDebug key 设置为 1 .还将windbg命令行更改为:"Path\WinDbg.exe" -p %ld –c ".dump /ma /u D:\CrashDump.dmp;qd" -e %ld –G
    如果您不与被调试对象分离,调试器将等待进一步的命令。 -G 选项也会在进程结束后立即关闭调试器。配置简单且可能更适合此类场景的是 procdump 来自 sysinternals - 它还可以创建完整的内存转储并使用以下命令安装它:procdump -ma -i D:\crashdump命令。

    关于debugging - 为 Windows 服务设置事后调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20607835/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com