コンセプト
- iLogic ルールは、Inventor プロセス内で実行します
- Visual Studio は、実行後に Inventor にアタッチする必要があります
- ブレーク ポイントは、ソース ファイルで事前に設定されるのではなく、ルール内からプログラムによって実行されます
- Visual Studio は、デバッグ用に読み取り専用の一時的なランタイム生成ファイルを開きます
Visual Studio を Inventor にアタッチする
手順
- Inventor を起動します
- コードの有無にかかわらず、Visual Studio を開きます
- Visual Studio の場合:
- [デバッグ] をクリックし、 [プロセスにアタッチ] を選びます
- 設定:
- 接続タイプ: ローカル
- プロセス: Inventor.exe
- [アタッチ] をクリックします
結果
- Visual Studio は Inventor の処理に反応するようになりました
- まだソース コードを開くことはできません
- Visual Studio はブレーク ポイントまたは例外にヒットした場合にのみアクティブになります
参照: Using Visual Studio to Debug iLogic Rules (英語)
iLogic ルールをデバッグする
仕組み
- Inventor は実行がブレーク ポイント呼び出しに達すると、デバッガに信号を送ります
- Visual Studio によってルールの一時的なランタイム バージョンが開きます
- ブレーク ラインで実行が一時停止します
- すべてのローカル変数、オブジェクト、コール スタックを検査できます
内部 iLogic ルール
内部 iLogic ルールにはブレーク ポイントとして機能し、実行の一時停止をトリガする組み込みキーワードがあります。
ルール内の任意の場所に次の行を追加します。
Break()
外部 iLogic ルール
外部ルールには、内部ルールと同じ機能に対して同様のメソッドを含めることができます。これらのルールは実行時に蓄積されるため、Inventor を再起動せずに変更をすぐに反映できます。
次のメソッドを外部ルール クラスに追加し、ルール内の任意の場所で呼び出します。
''' <summary>
''' Allow external debugger to attach like a breakpoint.
''' </summary>
''' <remarks>
''' <see cref="System.Diagnostics.DebuggerStepThroughAttribute"/> attribute prevents stepping into the helper method itself.
''' </remarks>
<System.Diagnostics.DebuggerStepThrough>
Public Shared Sub Break()
If System.Diagnostics.Debugger.IsAttached Then
System.Diagnostics.Debugger.Break()
End If
End Sub
iLogic キャッシュをリセットする
iLogic ではルールをキャッシュし、実行時の状態を保存することができます。次のコマンドは別のルールに追加でき、iLogic にメモリを強制的に解放させ、実行コンテキストをリセットします。
使用状況 (リセットを検討するタイミング)
- 一貫性のない内部ルールの動作
- 長いデバッグ セッション
ThisApplication.CommandManager.ControlDefinitions.OfType(Of ControlDefinition)() _
.FirstOrDefault(Function(c) c.InternalName = "iLogic.FreeILogicMemory") _
?.Execute()
よくあるミス
- ルールを実行する前に添付し忘れる
- 実行間でブレークポイントが持続されると期待する
- Visual Studio で開いた一時ファイルを編集する
概要
簡単なアタッチからプロセスへのセットアップにより、Visual Studio は iLogic 開発のための強力なデバッグ環境になります。このアプローチは、迅速なルール検査から大規模な外部ルール ワークフローまで拡張され、Inventor における自動化の一貫したデバッグ体験を提供します。
ラベル:
ここにコメントを追加するには、ご登録いただく必要があります。 ご登録済みの場合は、ログインしてください。 ご登録がまだの場合は、ご登録後にログインしてください。