【问题标题】:Why use WinDbg vs the Visual Studio (VS) debugger?为什么使用 WinDbg 与 Visual Studio (VS) 调试器?
【发布时间】:2010-09-11 10:22:51
【问题描述】:

使用WinDbg vs Visual Studio 调试器的主要原因是什么?

它通常用作 Visual Studio 调试器的完全替代品,还是在需要时用作更多。

【问题讨论】:

    标签: visual-studio windbg


    【解决方案1】:

    如果您想知道为什么应该使用 windbg 而不是 Visual Studio,那么您需要阅读 Advanced Windows Debugging。任何时候你需要调试一个真正丑陋的问题时,windbg 都有比 Visual Studio 更好的技术来解决它。 Windbg 拥有更强大的脚本语言,并允许您编写 DLL 来自动解决难题。它将安装 gflags.exe,让您更好地控制堆以调试内存覆盖。

    您实际上不需要运行安装,只需将文件复制过来即可开始安装。它还安装 adsplus.vb,因此您可以对正在运行的进程进行迷你转储。设置执行远程调试也很容易。没有什么比能够在自己的办公桌上调试问题而不是与测试 PC 上闪烁的 15 英寸显示器作斗争更好的了。

    对于日常代码编写,我使用 Visual Studio,但是一旦您需要从其他计算机开始调试问题或发现自己处于非常丑陋的境地,windbg 是唯一的出路。花一些时间学习windbg是一项巨大的投资。此外,如果您查看故障转储,则有两个很棒的资源,http://www.dumpanalysis.org/blog 和http://blogs.msdn.com/ntdebugging/default.aspx,它们使用 windbg 进行所有调试。

    【讨论】:

      【解决方案2】:

      这里有一些进一步的链接可帮助您使用 WinDbg,大多数是特定于 .NET 的。

      【讨论】:

        【解决方案3】:

        您无需指定是在调试本机代码还是托管代码。它不影响答案,WinDbg 对两者都非常有用,但许多人认为 WinDbg 在调试 .NET 应用程序时不那么相关。不是这样。作为奖励,您可以通过使用 SOS 扩展在 WinDbg 中调试您的 .NET 应用程序来了解很多关于 .NET 平台的工作原理。在 WinDbg 中运行(或附加到)您的 .NET 应用程序并键入...

        .loadby sos mscorwks
        

        ...确保为正在使用的 CLR 版本加载正确的扩展。然后输入...

        !help
        

        ...查看 SOS 扩展中可用的命令。

        我听人开玩笑说微软只有一个开发工具,那就是 WinDbg。您可能想要进行调试的所有内容都在其中,或者在扩展中。当然,这些东西的一个子集也可以在具有更友好 UI 的 VS 中使用...... :-)

        【讨论】:

        • 如果设置项目的调试属性并启用“非托管调试”,则可以将 SOS 扩展加载到 Visual Studio。启用非托管调试 -> 在某处设置断点 -> 运行 -> 当您遇到断点时,打开即时窗口 (ctrl+alt+i) 并键入 .load sos。请参阅blogs.msdn.com/vijaysk/archive/2007/11/15/… 了解更多信息。
        【解决方案4】:

        当我从 NT4.0 服务器收到 .dmp 文件时,我使用过它 - MSVC 不会加载这些旧格式文件。

        【讨论】:

          【解决方案5】:

          混合使用内核调试和远程用户模式调试。

          AFAIK,visual studio 仍然无法在我描述为“解决方案”的模式下进行远程调试。这是使用 windbg 的绝佳理由。

          问题:

          • 跨 1394 设置 windbg。您的应用程序在“目标”上运行。 Windbg 在“主机”上运行。
          • 在主机上运行 Visual Studio
          • 让 Visual Studio 使用远程工具在目标上启动您的应用。
          • 进入内核模式 windbg 以停止目标
          • 等待足够长的时间让 Visual Studio 的 TCP 连接超时
          • windbg 中的“g”用于取消停止目标
          • 当远程监视器意识到网络连接消失时,观察您的应用“弹出”
          • 重启你的应用:(

          解决方案:

          • 不要使用 Visual Studio。
          • 使用“-server”在目标上运行用户模式windbg
          • 让目标的 windbg 启动您的应用程序。
          • 在主机上,启动第二个 windbg,使用“-remote”连接到目标。
          • 如果 TCP 连接中断,只需在主机上启动另一个 windbg 实例,不会丢失任何内容。您的应用没有死掉,因为控制用户模式的 windbg 进程正在目标上运行。

          另外,我发现在内核模式和用户模式下使用同一个调试器更容易,即使在用户模式下,windbg 也非常强大,我可以利用我自己的 windbg 扩展 在内核模式和用户模式实例中。

          【讨论】:

            【解决方案6】:

            轻量级,无需安装在客户端机器上即可运行,速度快,可调试内核模式。

            【讨论】:

              【解决方案7】:

              最新的 Visual Studio 是否仍然缺少与 Windbg 的“-o”等效的功能,它使调试器自动附加到子进程?对于必须从复杂的 .bat 文件运行的应用程序或派生并退出父进程的应用程序非常有用。

              【讨论】:

                【解决方案8】:

                我一直很喜欢监视和跟踪功能:'wt' -> 它会在所有函数调用发生时将它们打印到输出窗口。那是很酷的东西!

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-05-22
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-01-25
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多