Eclipseを使用してJavaでコンソールアプリケーションを実行すると、Visual Studioのようにポップアップする代わりに、IDE自体のテキストボックスに出力が表示されます。これは、プログラムが終了した後でも、再度実行するまで消去されないため、プログラムに書き込まれたテキストを引き続き活用できるため、便利です。 Visual Studioでそのようなことを達成することは可能ですか?する代わりに
System.Console.WriteLine(str);
できます
System.Diagnostics.Debug.WriteLine(str);
ただし、ロードされたすべてのシンボルなどと同様に、[出力]ウィンドウに多くの「ジャンク」が表示されるため、まったく同じものではありません。
さらに良いのは、コンソールを実行する代わりに、アプリケーションを実行するときに、IDE自体ですべてを実行することは可能ですか?
[ツール]-> [Visual Studioオプション]ダイアログ-> [デバッグ]-> [すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトする]をオンにします。
Visual Studio [オプション]ダイアログ-> [デバッグ]-> [すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトする]をオンにします。次に、プロジェクト設定に移動し、タイプを「コンソールアプリケーション」から「Windowsアプリケーション」に変更します。その時点で、Visual Studioはコンソールウィンドウを開かなくなり、出力はVisual Studioの出力ウィンドウにリダイレクトされます。ただし、キーやテキストの入力を要求したり、コンソールをクリアしたりするなど、「創造的」なことはできません。実行時例外が発生します。
System.Diagnostics.Trace
を使用します
接続するリスナーに応じて、トレース出力はデバッグウィンドウ、コンソール、ファイル、データベース、またはすべてに一度に行くことができます。独自のTraceListenerの実装は非常に簡単なので、可能性は文字通り無限です。
まったく同じではありませんが、ブログの投稿を読んでくださいご存知ですか...外部ツールのテキストを出力ウィンドウに表示できますか?-#204。
実際のアプリを直接実行する代わりに、実行するラッパーアプリケーションを作成できます。ラッパーアプリケーションは、stdoutをリッスンし、すべてをTraceにリダイレクトできます。次に、実行設定を変更してラッパーを起動し、実行する実際のアプリへのパスを渡します。
デバッガーがラッパーにアタッチされている場合、ラッパーがデバッガーを新しいプロセスに自動的にアタッチすることもできます。
それでは、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つのデバッグツールを自由に使用できるようになります。
ご多幸を祈る!
コンソール機能(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);
}
}
注:必要なものだけをオーバーライドするため、他のタイプを作成する場合は、さらにオーバーライドする必要があります
代わりに、テスト結果で出力を収集できます。
入力を提供することはできませんが、異なるコマンドライン引数を使用して、各テストが出力を収集する複数のテストを簡単に提供できます。
デバッグが目標の場合、これは再現性のあるデバッグシナリオを提供するための簡単な方法です。
namespace Commandline.Test
{
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CommandlineTests
{
[TestMethod]
public void RunNoArguments()
{
Commandline.Program.Main(new string[0]);
}
}
}
これは単なる別の答えであることは知っていますが、新しいWeb開発者のために何かを書き留めようと思いました。VisualStudio 2013のMVCアプリケーションはデフォルトはクラスライブラリの出力タイプです。
Webアプリケーションは、デフォルトで「クラスライブラリ」の出力タイプとして設定されています。それを変更する必要はありません。私がしなければならなかったことは、[ツール]> [オプション]> [デバッグ]> [すべての出力ウィンドウテキストをイミディエイトウィンドウにリダイレクトする]の提案に従うことだけでした。次に、上記のJoel CoehoornによるSystem.Diagnostics.Trace
提案を使用しました。