在 WinDbg 中调试 C# 应用程序

Debugging a c# application in WinDbg

我正在尝试在没有 Visual Studio 的系统上调试用 C# 编写的应用程序。应用程序没有崩溃......但我需要确定某些变量的值,以及是否访问代码的某些部分,基于我无法在 Visual Studio 所在的同一位置访问的驱动程序位于。

我在虚拟机中 运行 这个测试环境,无法访问互联网。我一直无法安装符号文件...但到目前为止这无关紧要。

我一直在使用附加到此应用程序的 WinDbg 对驱动程序 (c/c++) 进行故障排除。我希望也能够从 C# 向 WinDbg 发送调试消息。

System.Diagnostics.Debug.Write("hello world\n");

没有出现...我不知道是否相关,但是我在添加 Debug.Write 时注意到的唯一不同之处是一个新的异常,如果没有调试调用我就没有​​看到过。 ..(试图显示非常无辜的变量)

(c78.808): C++ EH exception - code e06d7363 (first chance)
(c78.808): C++ EH exception - code e06d7363 (first chance)
(c78.808): Access violation - code c0000005 (first chance)

如何在 C# 中将这些消息发送到附加到此应用程序的 WinDbg 输出?

在您的项目属性中 勾选 BOTH DEFINE TRACE constant and DEFINE DEBUG constant

Debug.WriteLIne 以及 ad Trace.Writeline 输出将在 windbg

中可见

代码

namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine("we should see both Debug and Trace .WriteLine\n");
            System.Diagnostics.Trace.WriteLine("This is From Debug.WriteLine\n");
            System.Diagnostics.Debug.WriteLine("This is From Trace.WriteLine\n");
            System.Diagnostics.Trace.WriteLine("This is From Debug.WriteLine\n");
            System.Diagnostics.Debug.WriteLine("This is From Trace.WriteLine\n");
            Console.WriteLine("watched 2 Dbg and 2 Trace WriteLine in windbg\n");
            System.Diagnostics.Trace.WriteLine("This is From Debug.WriteLine\n");
            System.Diagnostics.Debug.WriteLine("This is From Trace.WriteLine\n");
            System.Diagnostics.Trace.WriteLine("This is From Debug.WriteLine\n");
            System.Diagnostics.Debug.WriteLine("This is From Trace.WriteLine\n");
        }
    }
}

输出

:cdb -c "g;q" helloWorld.exe | grep -i WriteLine
we should see both Debug and Trace .WriteLine
This is From Debug.WriteLine
This is From Trace.WriteLine
This is From Debug.WriteLine
This is From Trace.WriteLine
watched 2 Dbg and 2 Trace WriteLine in windbg
This is From Debug.WriteLine
This is From Trace.WriteLine
This is From Debug.WriteLine
This is From Trace.WriteLine

尝试使用 DebugView,它应该会显示您的调试消息并且它没有依赖项,请确保您捕获了全局 win32 事件并且 Visual Studio 没有自行附加。