在 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 没有自行附加。
我正在尝试在没有 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 没有自行附加。