web-dev-qa-db-ja.com

コンソールではなくVisual Studioでコンソールアプリケーションの出力を取得する

Eclipseを使用してJavaでコンソールアプリケーションを実行すると、Visual Studioのようにポップアップする代わりに、IDE自体のテキストボックスに出力が表示されます。これは、プログラムが終了した後でも、再度実行するまで消去されないため、プログラムに書き込まれたテキストを引き続き活用できるため、便利です。 Visual Studioでそのようなことを達成することは可能ですか?する代わりに

System.Console.WriteLine(str);

できます

System.Diagnostics.Debug.WriteLine(str);

ただし、ロードされたすべてのシンボルなどと同様に、[出力]ウィンドウに多くの「ジャンク」が表示されるため、まったく同じものではありません。

さらに良いのは、コンソールを実行する代わりに、アプリケーションを実行するときに、IDE自体ですべてを実行することは可能ですか?

108

[ツール]-> [Visual Studioオプション]ダイアログ-> [デバッグ]-> [すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトする]をオンにします。

42
SharpSteve

Visual Studio [オプション]ダイアログ-> [デバッグ]-> [すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトする]をオンにします。次に、プロジェクト設定に移動し、タイプを「コンソールアプリケーション」から「Windowsアプリケーション」に変更します。その時点で、Visual Studioはコンソールウィンドウを開かなくなり、出力はVisual Studioの出力ウィンドウにリダイレクトされます。ただし、キーやテキストの入力を要求したり、コンソールをクリアしたりするなど、「創造的」なことはできません。実行時例外が発生します。

38
stolsvik

System.Diagnostics.Trace を使用します

接続するリスナーに応じて、トレース出力はデバッグウィンドウ、コンソール、ファイル、データベース、またはすべてに一度に行くことができます。独自のTraceListenerの実装は非常に簡単なので、可能性は文字通り無限です。

6
Joel Coehoorn

まったく同じではありませんが、ブログの投稿を読んでくださいご存知ですか...外部ツールのテキストを出力ウィンドウに表示できますか?-#204

3
vittore

デバッグ設定ウィンドウの「すべての出力をリダイレクト...」チェックボックスをオンにします。

Make sure the check the "**Redirect All Output...**" checkbox in the debugging setting windows:

2

実際のアプリを直接実行する代わりに、実行するラッパーアプリケーションを作成できます。ラッパーアプリケーションは、stdoutをリッスンし、すべてをTraceにリダイレクトできます。次に、実行設定を変更してラッパーを起動し、実行する実際のアプリへのパスを渡します。

デバッガーがラッパーにアタッチされている場合、ラッパーがデバッガーを新しいプロセスに自動的にアタッチすることもできます。

1
Samuel Neff

それでは、Visual Studioの最新リリースを確認してください。これまでに一部のユーザーにとって機能しなかった最も推奨されるソリューションが、現在機能する可能性があります。

Visual Studio 2017(リリースバージョン15.4.2以降)では、Tools > Options > Debugging > General > (Check Box) Redirect all Output Window text to Immediate Windowに移動できました。

いくつかの注意:1.イミディエイトウィンドウを表示するには、Debuggingモードになっていることを確認してください。 2.これで、以下に示すように、コールスタック、ブレークポイント、コマンドウィンドウの3つのデバッグツールを自由に使用できるようになります。

enter image description here

ご多幸を祈る!

0
kuzevni

コンソール機能(ReadKey、Formatおよびargなどの文字列など)を操作し、出力を表示して保存する、私にとって有効な簡単なソリューション:

ConsoleおよびTraceに書き込むTextWriterを作成し、Console.Outをそれに置き換えます。

[ダイアログ]-> [デバッグ]-> [すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトする]を選択すると、イミディエイトウィンドウに表示され、きれいになります。

私のコード:私のコードの始めに:

   Console.SetOut(new TextHelper());

そしてクラス:

public class TextHelper : TextWriter
    {
        TextWriter console;

        public TextHelper() {
            console = Console.Out;
        }

        public override Encoding Encoding { get { return this.console.Encoding; } }
        public override void WriteLine(string format, params object[] arg)
        {
            string s = string.Format(format, arg);
            WriteLine(s);
        }
        public override void Write(object value)
        {
            console.Write(value);
            System.Diagnostics.Trace.Write(value);
        }

        public override void WriteLine(object value)
        {
            Write(value);
            Write("\n");
        }
        public override void WriteLine(string value)
        {
            console.WriteLine(value);
            System.Diagnostics.Trace.WriteLine(value);

        }

    }

注:必要なものだけをオーバーライドするため、他のタイプを作成する場合は、さらにオーバーライドする必要があります

0

代わりに、テスト結果で出力を収集できます。

入力を提供することはできませんが、異なるコマンドライン引数を使用して、各テストが出力を収集する複数のテストを簡単に提供できます。

デバッグが目標の場合、これは再現性のあるデバッグシナリオを提供するための簡単な方法です。

namespace Commandline.Test
{
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    [TestClass]
    public class CommandlineTests
    {
        [TestMethod]
        public void RunNoArguments()
        {
            Commandline.Program.Main(new string[0]);
        }
    }
}
0
uffehellum

これは単なる別の答えであることは知っていますが、新しいWeb開発者のために何かを書き留めようと思いました。VisualStudio 2013のMVCアプリケーションはデフォルトはクラスライブラリの出力タイプです。

Webアプリケーションは、デフォルトで「クラスライブラリ」の出力タイプとして設定されています。それを変更する必要はありません。私がしなければならなかったことは、[ツール]> [オプション]> [デバッグ]> [すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトする]の提案に従うことだけでした。次に、上記のJoel CoehoornによるSystem.Diagnostics.Trace提案を使用しました。

0
joshmcode