最終更新日 2024-09-25

Trace.WriteLine("...")やConsole.WriteLine("...")の確認方法

概要

ソースのサンプルに頻繁に出てくるTrace.WriteLineはどのように確認すればよいのでしょうか。
また、最も広く利用されているConsole.WriteLineを利用する方法はあるのでしょうか。

方法① HmDebugMonitorを使う方法

この方法は、秀丸エディタ・デバッグ出力モニターを利用することです。
そちらを参照してください。
秀丸ディタ・デバッグ出力モニターは、「Trace.WriteLine("...")」の出力も捕捉します。

方法② Visual Studio でデバッグ実行して、出力で確認する方法

Visual Studio でのデバッグ にて解説しています。

方法③ コンソールを表示し、Console.Output.WriteLine を出力してしまう方法

以下の数行を追加するだけで、この.dllを呼び出すマクロを実行した際に、コンソールも一緒に表示されるようになります。
この方法は「該当マクロ製作中の一時的な簡便対処」として意外とおすすめです。

ClassLibrary36.cs
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace ClassLibrary36
{
    public class Class1
    {
        [DllImport("kernel32.dll")]
        private static extern bool AllocConsole();

        // 静的コンストラクタ(static付きコンストラクタ)でコンソール表示を読んでおけば良い。
        static Class1()
        {
            AllocConsole();
        }

        [DllExport]
        public static int abc(int a, int b)
        {
            var sum = 10 + a + b;
            // コンソール枠にちゃんと出力される。
            Console.WriteLine(sum);
            return sum;
        }
    }
}

この方法は、最初に1回ソースをいじくれば、以降コンソール出力があるかのように制作・確認していけるため、
お手軽です。

方法④ コンソールを表示し、Console.Output.WriteLine も Trace.WriteLine も 両方出力してしまう方法

この方法は1つ前の発展です。

ClassLibrary36.cs
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace ClassLibrary36
{
    public class Class1
    {
        [DllImport("kernel32.dll")]
        private static extern bool AllocConsole();

        static Class1()
        {
            AllocConsole();

            // コンソールにトレース出力の受信能力を追加
            ConsoleTraceListener myWriter = new ConsoleTraceListener();
            Trace.Listeners.Add(myWriter);
        }

        [DllExport]
        public static int abc(int a, int b)
        {
            var sum = 10 + a + b;
            Console.WriteLine(sum);
            Trace.WriteLine(sum + 100);
            return sum;
        }
    }
}

本来はConsoleを使うならConsoleだけ、Traceを使うならTraceだけと統一した方がよいですが、
ソースの切り貼りなどで一旦混じっている際の簡易な暫定処置としては有効利用できるでしょう。