第一次使用windbg调试一个没有警告就关闭的进程

发布于 2024-09-12 15:28:46 字数 157 浏览 10 评论 0原文

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

我应该如何使用windbg来理解这个问题?此外,我应该为符号文件路径放置什么?从 MS 符号服务器下载符号。我不确定是否也需要设置环境变量。

谢谢

I have a process which, when I click on a button on its UI, launches another process. This process it spawns shuts down without warning or any clues in the logs.

How should I use windbg to understand this problem? Furthermore, what do I put for the symbol files path? To download the symbols from the MS symbolserver. I am not sure if I need to set an env variable, too.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

微暖i 2024-09-19 15:28:46

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

一般来说,最简单的方法是设置一个环境变量:

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

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

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

无提示退出通常是其中之一的标志:

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

Here's how to find the symbols: http://support.microsoft.com/kb/311503 .

Generally, the easiest way to do this is to set an environment variable:

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

Make sure you start Windbg AFTER you've set the environment variable, and bear in mind that recent versions of VS will also use this environment variable, so their debugging will tend to be slower to start.

My first step would to try and separate the two processes - can you start the failing one directly, in such a way as it fails?

Silent quitting is often a sign of one of these:

  • a stack overflow (infinite recursion)
  • an exception in an exception handler (sometimes)
  • Messing with the main window setup sequence in WPF apps.
青衫负雪 2024-09-19 15:28:46

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

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

You can attach to the created process by setting an option in windbg that'll attach to any process that is created by the current process. Use ".child_dbg 1" (not sure about the exact command name). Once you have launched the UI process in windbg, just click on the button as usual and let the process get created. This will break in windbg. Once it does, just use "g" command to let the process continue. Whenever the child process exits, you'll get a notification in the debugger. You can thus figure out the cause of process exit.

If that doesn't help (if the process exits normally using exitprocess or is terminated using TerminateProcess), you can put breakpoints at exit functions and check the callstack.

无畏 2024-09-19 15:28:46

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

使用 WinDbg 并不是那么简单。除非您是一名优秀的程序员,否则您应该采取简单的方法。

If you can afford, open a support ticket via http://support.microsoft.com. The support guys can provide you detailed steps on how to capture necessary information.

Using WinDbg is not that trivial. Unless you are a decent programmer, you should take the easy way.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文