Visual Studio で、デバッガーを使用して X++ コードをデバッグする
この記事では、Microsoft Visual Studio のデバッグ機能を使用して X++ コードをデバッグする方法について確認します。
X++ コードをデバッグするには、Microsoft Visual Studio でデバッガを使用します。 このプロセスは、Visual Studio で作成される他のアプリケーションで使用されるプロセスに似ています。 たとえば、コードがブレークポイントで停止するときに、アプリケーションを検証する標準のツールを使用できます。
コードのデバッグ
X++ コードをデバッグするには、次の手順を実行します。
Visual Studio で、デバッグする X++ コードを開きます。
停止を実行する行または明細行を検索し、それらの明細行でブレークポイントを設定します。 行にブレークポイントを設定するには、コード エディターの左の列をクリックするか、カーソルがその行にある間に F9 を押します。 赤いドットは、ブレークポイントが設定されていることを示します。
スタートアップ プロジェクトおよびスタートアップ オブジェクトを設定します。 スタートアップ オブジェクトは、任意のフォーム、main メソッドを持つ任意のクラス、または任意のメニュー項目にすることができます。 スタートアップ オブジェクトはプロジェクトの プロパティ ウィンドウで設定することができます。 または、ソリューション エクスプローラーで要素を右クリックし、その後スタートアップ オブジェクトとして設定をクリックします。
デバッグメニューで、デバッグの開始をクリックします。
アプリケーションで、目的のコードを実行させるアクションを実行します。 標準的なアクションには、フォームを開くことが含まれます。 処理は、設定したブレークポイントで停止します。
Visual Studio のツールを使用して、アプリケーションを調べます。 たとえば、その値を表示するため、X++ コード内の変数をポイントします。 また、デバッグ メニュー上のコマンドを使用してコードを進めることができます。 また、Visual Studio の Autos ウィンドウのようなツールは、アプリケーションの状態に関する重要な情報を表示します。
財務と運用アプリケーションに固有の、もう 1 つのツールは情報ログです。 多くの場合、info() ステートメントは、アプリケーションの実行中に、ログ ステータス メッセージのコードに追加されます。 これらの情報ログ メッセージは、Visual Studio で直接表示できます。 表示メニューで、情報ログをクリックします。
アプリケーションのデバッグが終了した後、アプリケーションは終了します。 Visual Studio はデバッグ モードを終了します。
クラスへの ToString メソッドの追加
多くの場合、ToString メソッドをクラスに追加することが利点となります。 これを行うのに費やした労力は何度も戻ってきます。それは簡単です。
メモ
ToString メソッドが予期しない時に呼び出されることがあるため、ToString メソッドでオブジェクトの状態を変更することはお勧めできません。
選択されていないフィールドの識別
フィールドが選択ステートメントのフィールドの一覧に表示されない場合に、テーブルのフィールドを使用することがバグの一般的な発生源となります。 このようなフィールドには、そのタイプに従って既定値が設定されます。 デバッガー ブレークポイントを使用して、値が選択されたかどうかを確認できます。
次のコードを考慮してください。
class MyClass
{
public static void Main(Args a)
{
FMRental rental;
select EndMileage, RentalId from rental;
rental.Comments = "Something";
}
}
代入ステートメントにブレークポイントを設定します。 クラスをプロジェクトのスタートアップ オブジェクトにして、F5 キーを押して開始します。 ブレークポイントが検出されたときは、ローカルウィンドウで rental
変数を展開して表示します。 選択されているフィールドである EndMileage
と RentalId
では、選択された値が表示され、選択されていないフィールドには null
が表示されます。 これは、その値がデータベースからフェッチされなかったことを意味します。 当然、これはデバッグ コンポーネントです。 選択されていないフィールドの値は、フィールドのタイプの規定値になります。 これをステップオーバーし、デバッガーが実際の値のレンダリングをどのように変更するかを確認します。
メモ
テーブルにキャッシュが設定されている場合は、コードで指定されているフィールドリストに関係なく、常にテーブル全体からすべてのフィールドがフェッチされます。
自動および情報ログ ウィンドウ
デバッガーを使用すると、アプリケーションの状態の特定の部分に簡単にアクセスできます。 この情報は、現在の会社、パーティション、トランザクション レベル、および現在のユーザー ID が一覧表示される自動ウィンドウで使用できます。
また、Infolog に書き込まれるデータを表示するウィンドウもあります。
ブレークポイント機能
Visual Studio デバッガーでは、条件付きブレークポイントと、ヒット カウントによってトリガーされたブレークポイントをサポートします。 また、ブレークポイントをヒットするとき、ユーザーのためにシステムが特定のアクションを実行させることができます。
- ヒット カウントを使用することで、デバッガーが実行を中断する前にブレークポイントがヒットする回数を決定できます。 既定では、デバッガーはブレークポイントがヒットするたびに実行を中断します。 ブレークポイントが 2 回ヒットするたび、または 10 回ヒットするたび、または 512 回ヒットするたび、またはユーザーが選択した回数ヒットするたびにデバッガーが中断するよう、ヒット カウントを設定することができます。 一部のバグは、最初にユーザー プログラムがループを実行し、関数を呼び出し、または変数へアクセスする際に現れないため、ヒット数は役に立ちます。 場合によっては、100 回または 1000 回繰り返すまでバグが表示されない可能性があります、 このような問題をデバッグするには、ヒット数が 100 または 1000 のブレークポイントを設定します。
- 条件は、ブレークポイントがヒットするかスキップするかを決定する式です。 デバッガーは、ブレークポイントに到達すると、条件を評価します。 条件が満たされた場合にのみ、ブレークポイントにヒットします。 場所ブレークポイントを持つ条件を使用して、特定の条件が true の時にのみ指定された場所で停止することができます。 たとえば、勘定残高がマイナスにならないように、銀行決済プログラムをデバッグしているとします。 コード内の特定の場所でブレークポイントを設定し、
balance < 0
0 などの条件をそれぞれに添付する場合があります。 プログラムを実行するとき、残高が 0 より小さい場合にのみこれらの場所で実行が中断されます。 最初のブレークポイントの位置で変数およびプログラムの状態を調べ、2 つ目のブレークポイントの位置まで実行を続行、などを実行することができます。 - アクションは、ブレークポイントがヒットした場合に発生する必要のあるものを指定します。 既定では、デバッガーは実行を中断しますが、代わりにメッセージを印刷するか Visual Studio マクロを実行するかを選択できます。 中断するのではなく、メッセージを印刷する場合は、ブレークポイントは Trace ステートメントと非常に類似します。 このブレークポイントを使用するメソッドはトレース ポイントと呼ばれます。
条件を伴うブレークポイントの使用
次のコードを考慮してください。
class PVsClass
{
public static void Main(Args a)
{
int i;
for (i = 0; i < 10; i++)
{
print i;
}
}
}
そのステートメントが選択されているときに F9 キーを押すことで、印刷明細書にブレークポイントを設定します。 これにより、通常の無条件ブレークポイントが作成されます。 ここで、マウスを使用して、ブレークポイントのコンテキスト メニューを開き、条件を選択します。 "i" 変数が 5 を超えたときにブレークポイントが発生することを示す条件を配置します。 スタートアップ プロジェクトとしてクラスを設定し、プロジェクト内のスタートアップ項目としてコードを含むクラスを設定します。 コードを実行します。 デバッガーを使用して「i」の値を自由に変更してください。 ここで、このブレークポイントを削除し、ヒット カウント機能を使用して同じことを実現します。
メモ
ブレークポイントには、いくつかの条件があります。 多くの場合、ブレークポイントにカーソルを置くと役立つツールヒントが表示されれば便利です。 トレース ポイントは、しばしばトレースの実行に役立ちます。 対象の行に追跡ポイントを挿入し、変数の値を記録します。 トレース出力がデバッガーの出力ウィンドウに表示されます。
即時ウィンドウ
即時ウィンドウは、式とステートメントに入力できるデバッカー機能で、任意の時点で評価できます。 この機能は、X++ stack に実装されません。 ただし、まだ即時ウィンドウから利益を得ることができます。 スニペットは、X++ ではなく、C# で表示する必要があります。