C# 捕获控制台输出以在VS中调试?
在VS的外部工具设置下,有一个“使用输出窗口”复选框,用于捕获工具命令行输出并将其转储到VS选项卡 问题是:当我点击F5时,我的程序能得到同样的处理吗 编辑:FWIW我在C#但是如果这对你的答案有影响,那么你的答案不太可能是我想要的C# 捕获控制台输出以在VS中调试?,c#,visual-studio,debugging,C#,Visual Studio,Debugging,在VS的外部工具设置下,有一个“使用输出窗口”复选框,用于捕获工具命令行输出并将其转储到VS选项卡 问题是:当我点击F5时,我的程序能得到同样的处理吗 编辑:FWIW我在C#但是如果这对你的答案有影响,那么你的答案不太可能是我想要的 我想要的是使用输出重定向(“|”和“>”)在cmd提示符中使用的相同设备获取程序的输出流并将其传输到VS中的输出选项卡。System.Diagnostics.Debug.Writeline()或Trace.Writeline()您可以使用Systems.Diagno
我想要的是使用输出重定向(“|”和“>”)在cmd提示符中使用的相同设备获取程序的输出流并将其传输到VS中的输出选项卡。System.Diagnostics.Debug.Writeline()或Trace.Writeline()您可以使用Systems.Diagnostics.Trace类将输出写入输出窗口,而不是(或附加)控制台。它需要一点配置,但可以工作。这就是你想要的吗
您也可以根据添加自己的选项卡,但我从未尝试过。我将在这里做一些假设。首先,我假设您谈论的是来自应用程序的printf输出(无论是来自控制台应用程序还是来自windows GUI应用程序)。我的第二个假设是C语言 据我所知,您不能将printf输出直接指向devstudio中的output窗口,无论如何也不能直接。[重点由OP添加] 也许有办法,但我不知道。但您可以做的一件事是将printf函数调用定向到您自己的例程,该例程将
如果您不是在C/C++中执行此操作,则此方法将不适用于您。:-) 您应该能够捕获文本文件中的输出并使用它 我手边没有VS,所以这是记忆中的: < LI>创建C++项目
>output.txt
”现在,如果您在VS中打开此文件,您仍然可以在VS中看到输出,尽管与您希望的窗口不完全相同。也许这对您有用:在
主
中的关闭}
上设置断点,然后在关闭控制台窗口之前查看它。如果需要,你甚至可以从中复制文本
在我用于开发的每台机器上,我都以某种方式配置控制台窗口,这恰好使这种方法工作得更好:
控制台可以将其输出重定向到任何textwriter。如果您实现了一个写入Diagnostics.Debug的textwriter,则所有设置都已完成 这是一个向调试器写入的文本编写器
using System.Diagnostics;
using System.IO;
using System.Text;
namespace TestConsole
{
public class DebugTextWriter : TextWriter
{
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
//Required
public override void Write(char value)
{
Debug.Write(value);
}
//Added for efficiency
public override void Write(string value)
{
Debug.Write(value);
}
//Added for efficiency
public override void WriteLine(string value)
{
Debug.WriteLine(value);
}
}
}
因为它使用Diagnostics.Debug,所以它将遵循编译器设置,以确定是否应该写入任何输出。此输出也可以在Sysinternals DebugView中看到
以下是您如何使用它:
using System;
namespace TestConsole
{
class Program
{
static void Main(string[] args)
{
Console.SetOut(new DebugTextWriter());
Console.WriteLine("This text goes to the Visual Studio output window.");
}
}
}
如果要在发布模式下编译时在Sysinternals DebugView中查看输出,可以使用写入outputdugstring API的TextWriter。它可能是这样的:
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
namespace TestConsole
{
public class OutputDebugStringTextWriter : TextWriter
{
[DllImport("kernel32.dll")]
static extern void OutputDebugString(string lpOutputString);
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
//Required
public override void Write(char value)
{
OutputDebugString(value.ToString());
}
//Added for efficiency
public override void Write(string value)
{
OutputDebugString(value);
}
//Added for efficiency
public override void WriteLine(string value)
{
OutputDebugString(value);
}
}
}
我正在寻找一些不需要修改输出代码就能工作的东西。这个链接也不是。第2段似乎介绍了如何使其工作,尽管使用OutputDebugString也可以很好地工作。+1用于控制台窗口的配置。我会将窗口大小的设置高度增加到50。
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
namespace TestConsole
{
public class OutputDebugStringTextWriter : TextWriter
{
[DllImport("kernel32.dll")]
static extern void OutputDebugString(string lpOutputString);
public override Encoding Encoding
{
get { return Encoding.UTF8; }
}
//Required
public override void Write(char value)
{
OutputDebugString(value.ToString());
}
//Added for efficiency
public override void Write(string value)
{
OutputDebugString(value);
}
//Added for efficiency
public override void WriteLine(string value)
{
OutputDebugString(value);
}
}
}