コンテンツにスキップ

デバッグ

デバッグとは

デバッグは、コードに存在するエラーを検出して修正するプロセスです。

すべての.NETプログラムは、2つの異なるモードで実行できます。

  • リリースモード - 通常、本番環境で使用されます。 このモードでは、.NETはコードの実行速度を向上させ、メモリ使用量を削減するための様々なコンパイラおよびJust-In-Time最適化を有効にします。
  • デバッグモード - 主に開発およびテスト環境で使用されます。 すべての最適化が無効化され、.NETデバッガーをコードにアタッチできます。

.NETライブラリとアプリケーションを扱う際、デバッグには以下が含まれます:

  • デバッグモードでコードを実行する
  • .NETデバッガーをコードにアタッチする
  • 実行フローを一時停止すべき箇所を示すコードブレークポイントを設定する
  • ブレークポイントでの計画的な一時停止を伴う、コード実行フローの追跡

.NETデバッガーの定義

.NETデバッガーは、ランタイムAPIを使用するプログラムです。 これらのAPIは、.NETプロセスの実行フローを制御することを可能にします。 つまり、指定されたブレークポイントで実行を一時停止し、様々な状態(これらの状態中に個々の変数が保持する値を含む)を保存できます。

デバッグモードでのアルゴの構築

上記で説明したように、cBotやインジケーターをデバッグするには、この拡張機能をデバッグモードで構築する必要があります。 デフォルトでは、cTrader UIのビルドボタンをクリックすると、コードの最適化を有効にするためにリリースモードで拡張機能が実行されます。

cBotやインジケーターをデバッグモードで構築するには、.NET CLIまたはVisual Studioなどの外部IDEを使用する必要があります。 このドキュメントでは、Visual Studioでのデバッグプロセスを示していますが、 このプロセスは他のIDEでも若干の変更を加えて再現できます。

最新バージョンのVisual Studioをマシンにインストールし、以下の操作を行ってください:

  • コードエディターウィンドウ上部のEdit in...ドロップダウンにあるEdit in Visual Studioオプションを選択して、インジケーターまたはcBotをVisual Studioで開きます。

  • Visual Studioコードエディター上部のメニューで、デバッグを選択します。

Image title

  • cBotまたはインジケーターをデバッグモードでビルドします。

cBotまたはインジケーターのデバッグ

デバッグモードでcBotまたはインジケーターを構築する方法を理解したところで、実際にデバッグする方法に焦点を当てます。

  • インジケーターまたはcBotのアクセス権を FullAccess に変更します。

  • デバッガーをインジケーターまたはcBotの実行プロセスにアタッチします。 これは、System.Diagnostics.Debugger.Launch() メソッドを呼び出すことで行えます。

1
2
3
4
5
6
7
8
9
protected override void OnStart()
{
    var result = System.Diagnostics.Debugger.Launch();

    if (result is false)
    {
        Print("Debugger launch failed");
    }    
}
1
2
3
4
5
6
7
8
9
protected override void Initialize()
{
    var result = System.Diagnostics.Debugger.Launch();

    if (result is false)
    {
        Print("Debugger launch failed");
    }    
}

注意

System.Diagnostics.Debugger.Launch() メソッドは、OnStart() メソッド(cBotの場合)または Initialize() メソッド(インジケーターの場合)で呼び出す必要があります。

  • cBotまたはインジケーターの新しいインスタンスを実行します。 インスタンスがすでに実行中の場合は、UIで選択します。 デバッガーを選択するプロンプトとともにVisual Studioにリダイレクトされるはずです。 選択してOKをクリックします。

Image title

デバッグが開始されると、ブレークポイントの設定、コード行の(ステップイン)、コールスタックと変数値の確認ができます。

Visual Studioでのデバッグ方法の完全なガイドについては、Visual Studioデバッグドキュメントをご確認ください。

DEBUGプリプロセッサディレクティブの使用

cBotまたはインジケーターのコードで DEBUG プリプロセッサディレクティブを使用して、実行フローを制御することもできます。

#if DEBUG ディレクティブは、デバッグモードでのみコードのブロックまたは行を実行したい場合に便利です。

1
2
3
4
5
6
7
8
9
protected override void OnStart()
{
#if DEBUG
    System.Diagnostics.Debugger.Launch();
    Print("Debugging");
#else
    Print("Not Debugging");
#endif
}

上記の例では、cBotをデバッグモードでビルドすると、"Not Debugging"のコード行はコンパイルされません。

C#プロセッサディレクティブに関する追加情報は、このドキュメントで確認できます。