首次使用windbg来调试一个在没有警告的情况下关闭的进程

时间:2010-07-29 09:45:20

标签: debugging windbg

我有一个流程,当我点击其UI上的按钮时,会启动另一个流程。它产生的这个过程在没有警告或日志中的任何线索的情况下关闭。

我应该如何使用windbg来理解这个问题?此外,我为符号文件路径添加了什么?从MS symbolserver下载符号。我不确定是否需要设置一个env变量。

由于

3 个答案:

答案 0 :(得分:1)

以下是查找符号的方法:http://support.microsoft.com/kb/311503

通常,最简单的方法是设置环境变量:

_NT_SYMBOL_PATH=SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols

确保在设置环境变量后启动Windbg,并记住最新版本的VS也将使用此环境变量,因此启动它们的调试速度会慢一些。

我的第一步是尝试将这两个进程分开 - 你能直接启动失败的进程吗?它会失败吗?

沉默戒烟往往是其中一种迹象:

  • 堆栈溢出(无限递归)
  • 异常处理程序中的异常(有时)
  • 使用WPF应用程序中的主窗口设置序列进行混乱。

答案 1 :(得分:1)

您可以通过在windbg中设置一个选项来附加到创建的进程,该选项将附加到当前进程创建的任何进程。使用“.child_dbg 1”(不确定确切的命令名称)。在windbg中启动UI流程后,只需像往常一样点击按钮,然后创建流程。这将打破windbg。一旦完成,只需使用“g”命令让该过程继续。每当子进程退出时,您将在调试器中收到通知。因此,您可以找出流程退出的原因。

如果这没有帮助(如果进程正常使用exitprocess退出或使用TerminateProcess终止),则可以在退出函数处放置断点并检查callstack。

答案 2 :(得分:0)

如果您负担得起,请通过http://support.microsoft.com打开支持服务单。支持人员可以为您提供有关如何捕获必要信息的详细步骤。

使用WinDbg并不是那么简单。除非你是一个体面的程序员,否则你应该采取简单的方法。