我有以下情况:
我正在尝试将调试器附加到子进程并在崩溃之前对其进行调试
我试图使用gflags并设置调试器。问题是服务在会话0中运行,因此Windbg不可见。我无法将服务设置为“允许与桌面交互”,因为服务无法使用本地系统帐户,而是必须使用特定用户的凭据。
我不确定它是否打算像那样工作,但我也尝试使用Windbg -pe从另一个Windbg实例连接到会话0中的windbg(所以我将运行两个Windbg)。但它不起作用 - 第二个实例似乎无法停止进程并看到它的调用堆栈。
如何在调试程序崩溃之前将调试器附加到子进程以进行调试?
答案 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)
答案 3 :(得分:-1)
将Sleep(30000)
添加到您的子流程入口点。这将为您提供足够的时间来连接调试器。