生产时间调试 - 会话0过程

时间:2011-09-20 04:38:12

标签: debugging windbg

我有以下情况:

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

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

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

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

如何在调试程序崩溃之前将调试器附加到子进程以进行调试?

4 个答案:

答案 0 :(得分:3)

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

  

“用于Windows \ cdb的c:\ program files \ debugging tools”--server   tcp:port = 5500 -g -G

到注册表项的注册表值Debugger(类型字符串)

  

HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution   选项\ YourApplication.Exe

然后使用windbg通过

连接到调试服务器
  

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

答案 1 :(得分:1)

还有一个选择:

当WinDbg自动启动时,你确实看不到它。但是,您可以将ntsd配置为jit调试器,并启用远程调试。然后,您可以将WinDbg连接到ntsd并远程调试该过程。有关详细信息,请参阅:Debugging a Service on Windows Vista

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

Sleep(30000)添加到您的子流程入口点。这将为您提供足够的时间来连接调试器。