生产时间会话0进程



我有以下场景:

  • Windows 2008
  • 使用特定用户凭据(即不是系统帐户)运行的服务。
  • 该服务启动子进程
  • 子进程启动,一秒钟后得到一个异常并崩溃

我正在尝试将调试器附加到子进程并在它崩溃之前调试它

我试图使用gflags并设置调试器。问题是服务在会话0中运行,因此Windbg是不可见的。我不能将服务设置为"允许与桌面交互",因为服务不能使用本地系统帐户,而是必须使用特定用户的凭据。

我不确定它是否打算这样工作,但我也试图使用windbg -pe从另一个windbg实例连接到会话0中的那个windbg(所以我会有两个windbg运行)。但是它不起作用——第二个实例似乎无法停止进程并查看它的调用堆栈。

任何想法如何附加调试器到子进程之前,它崩溃调试它?

您可以使用命令行调试器cdb。使用附加的cdb启动您的服务,并作为调试服务器启动。您可以添加以下命令

"c:program filesdebugging tools for windowscdbtcp:port=5500 -g -g

到注册表值的调试器(类型字符串)的注册表项

HKLMSoftwareMicrosoftWindows NTCurrentVersionImage File执行选项 YourApplication.Exe

然后使用windbg用

连接调试服务器

windbg -remote tcp:server=localhost,port=5500

还有一个选项:

当WinDbg自动启动时,你确实看不到它。但是,您可以将ntsd配置为jit调试器,并启用远程调试。然后,您可以将您的WinDbg连接到ntsd并远程调试该进程。

为什么不从崩溃转储开始呢?http://www.codeproject.com/KB/debug/automemorydump.aspx

Sleep(30000)添加到子进程入口点。这将给您足够的时间连接调试器。

最新更新