Visual StudioでRTSSアプリをデバッグする方法【RTX64入門】

コーディング

RTSSアプリをビルドできたら、次に直面するのが「デバッグどうやるの?」という問題です。RTSSプロセスは通常のWindowsアプリとは異なるローダーで動くため、F5を押す前にひと手間必要です。しかし、RTX64 SDKを使えばVisual Studioの使い慣れたデバッグ環境でRTSSアプリをデバッグできます。この記事では、ローカルデバッグの手順から、ブレークポイントの注意点、実行中プロセスへのアタッチ方法までを解説します。

デバッグの前提条件

RTSSアプリをVisual Studioでデバッグするには、以下の2つが必要です。

  • RTX64 SDK:デバッグ拡張機能(RTX64 Real-Time Debugger)がVisual Studioに追加される。Runtimeとは別購入・インストール
  • RTX64サブシステムが起動済みであること:デバッグセッション開始前にRTX64 Control PanelでSubsystemがRunningになっていることを確認する

RTX64 SDKをインストールすると、Visual Studioに次の2つのデバッガーが追加されます。

  • RTX64 Real-Time Debugger:同じPC上のRTSSアプリをデバッグする(ローカルデバッグ)
  • RTX64 Remote Real-Time Debugger:ネットワーク越しに別PCのRTSSアプリをデバッグする(リモートデバッグ)

この記事では日常の開発でよく使うローカルデバッグを中心に説明します。

基本的なデバッグ手順

手順①:RTSSDebug構成を選択する

Visual Studioのツールバーにあるソリューション構成のドロップダウンから「RTSSDebug」を選択します。このとき、プラットフォームは必ず「x64」にしてください。

RTSSDebugを選択すると、デバッガーが自動的に「RTX64 Real-Time Debugger」に切り替わります(手動で選択する必要はありません)。デバッグ情報付きの .rtss ファイルが生成されるため、ブレークポイントや変数の確認が可能になります。

手順②:ブレークポイントを設定する

デバッグしたい行の左余白(ガター部分)をクリックして赤丸のブレークポイントを設定します。RTX64でのブレークポイント設定はWindowsアプリと同じ操作です。

注意:割り込みサービスルーチン(ISR)内にはブレークポイントを設定できません。ISR内の処理を確認したい場合は、RtPrintfでログ出力する方法を使ってください。

手順③:ビルドしてF5でデバッグ開始

  1. メニューの「ビルド」→「ソリューションのビルド」でビルドする(Ctrl+Shift+B)
  2. メニューの「デバッグ」→「デバッグの開始」を選択するか、F5キーを押す

デバッグセッションが開始されると、RTX64 Serverコンソールウィンドウが開きます。アプリ内でRtPrintfを使っている場合、出力はこのウィンドウに表示されます。

ブレークポイントに到達すると実行が止まり、Visual Studioの通常のデバッグ操作(ステップ実行・変数確認・コールスタック確認)が使えます。

手順④:デバッグを続行または停止する

  • 続行」(F5):次のブレークポイントまで実行を再開
  • デバッグの停止」(Shift+F5):デバッグセッションを終了してRTSSプロセスを停止

デバッグセッションを終了した後、RTX64 Serverコンソールウィンドウは手動で閉じてください。

ブレークポイントの種類と使い分け

RTX64はVisual Studioの多様なブレークポイント機能をサポートしています。

種類概要対応バージョン
通常のブレークポイント指定行に到達したら停止全バージョン
条件付きブレークポイント変数の値など条件が成立したときだけ停止2015以降
TracePoint停止せずにOutputウィンドウへメッセージを出力2015以降
ハードコードブレークポイントコード内に直接記述するブレークポイント2015以降
一時的ブレークポイント一度ヒットしたら自動削除2022以降
依存ブレークポイント別のブレークポイントがヒットしたときだけ有効2022以降
Force Run To Cursorその行まで他のブレークポイントを全て無効化して実行2022以降

サポートされないもの:データブレークポイント(特定メモリアドレスの値変化で停止する機能)はRTX64では使えません。

実行中のRTSSプロセスにアタッチする

すでに起動しているRTSSプロセスに後からデバッガーをアタッチする方法です。スケジュールタスクで自動起動したプロセスや、別の方法で起動したプロセスをデバッグする際に使います。

ローカルプロセスへのアタッチ手順

  1. Visual Studioのメニューから「デバッグ」→「RTSSプロセスにアタッチ」を選択
  2. 「Attach to RTSS Process」ダイアログが開く。実行中のRTSSプロセスの名前とPIDが一覧表示される
  3. アタッチしたいプロセスを選択して「Attach」をクリック

グレーアウトしているプロセスは、すでにデバッグ中か、Watchdogタイムアウトでフリーズしているため、アタッチできません。グレーアウトされたプロセスにカーソルを合わせると理由がツールチップで表示されます。

デバッグ中の挙動と注意点

ブレークポイントで止まるのはデバッグ対象プロセスのみ

RTX64のデバッガーでブレークポイントにヒットしたとき、停止するのはデバッグ対象のプロセスだけです。他のRTSSプロセス(WMX3エンジンなど)とRTX64サブシステムは継続して動作します。これはWindowsデバッガーとは異なる重要な特徴です。WMX3と並行して自作のRTSSプロセスをデバッグする場合でも、WMX3の動作は止まりません。

デバッグ中はサブシステムを停止できない

RTSSプロセスをデバッグしている間は、RTX64 Control Panelからサブシステムを停止できません。デバッグセッションを終了(Shift+F5)してからサブシステムを停止してください。同様に、デバッグ中のプロセスはTask ManagerやRtssKillで終了させることもできません。

複数プロセスを同時にデバッグする場合

複数のRTSSアプリを同時にデバッグしたい場合は、Visual Studioのインスタンスを複数起動してそれぞれでデバッグします。1つのVisual Studioインスタンスで複数プロセスを同時にデバッグすることは推奨されていません。また、デバッグする各アプリは必ず異なるファイル名(プロセス名)にしてください。同じ名前が重複するとデバッグできません。

RTX64 Real-Time Debuggerが選択肢に出ない場合

プロジェクト作成後にデバッガーのドロップダウンに「RTX64 Real-Time Debugger」が表示されない場合は、以下を確認してください。

  • %RTX64COMMON%DebuggerExtensions フォルダに IntervalZero.targets が存在するか確認する
  • Visual Studioの「拡張機能と更新プログラム」(ツール → 拡張機能と更新プログラム)でRTX64 Real-Time Debuggerがインストール済みかつ有効になっているか確認する
  • プロジェクトファイル(.vcxproj)の末尾に IntervalZero.targets の Import行が含まれているか確認する

注意事項まとめ

  • RTX64 SDKが必要:Runtimeだけではデバッグ拡張機能がインストールされない
  • デバッグ前にサブシステムを起動する:サブシステムが停止しているとF5を押してもデバッグセッションが始まらない
  • ISR内にブレークポイントは設定不可:ISR内のデバッグにはRtPrintfによるログ出力を使う
  • データブレークポイントはサポート外:メモリアドレスの変化検知による停止は使えない
  • デバッグセッション終了前にサブシステムを停止しない:デバッグ中のプロセスが残ったままサブシステムを止めると不安定になる可能性がある
  • 複数プロセスのデバッグにはVSを複数起動する:1インスタンスで複数プロセスのデバッグは非推奨

まとめ

  • RTSSDebug構成を選ぶと自動的にRTX64 Real-Time Debuggerが選択される:サブシステムを起動してからF5でデバッグ開始
  • ブレークポイントで止まるのはデバッグ対象プロセスのみ:WMX3など他のRTSSプロセスは動き続ける
  • 起動済みプロセスへのアタッチは「デバッグ → RTSSプロセスにアタッチ」から:スケジュールタスクで自動起動したプロセスにも後からアタッチ可能
  • デバッグ中はサブシステムの停止不可・Task Manager/RtssKillによる終了も不可:デバッグセッションを先に終了してから操作する

以上が開発環境でRTSSを実行する方法でした。デバックはEtherCATとの通信を行っていても可能です。※コードを止めてもEtherCAT通信は止まりません。

コメント

タイトルとURLをコピーしました