You are on page 1of 286

ユーザー ガイド ProDG Debugger for PlayStation®3

Index

ProDG Debugger for


PlayStation®3
ユーザー ガイド

SN Systems Limited
バージョン470.1
2015年1月27日

© SCEI Doc-To-Help Standard Template


-1-
© 2015 Sony Computer Entertainment Inc. / SN Systems Ltd. All Rights Reserved.

"ProDG" は、SN Systems Ltd の登録商標です。SN のロゴは、SN Systems Ltd の商標です。


"PlayStation" は Sony Computer Entertainment Inc. の登録商標です。"Microsoft"、
"Visual Studio"、"Win32"、"Windows" およびWindows NT はMicrosoft Corporationの登録
商標であり、"GNU"はFree Software Foundation の商標です。 この文書で使用される他の商品名または会社名
は、それぞれの所有者の商標である可能性があります。

© SCEI ProDG Debugger for PlayStation®3 v470.1


-2-
ProDG Debugger for PlayStation®3 ユーザー ガイド
目次

目次
1: はじめに .............................................................................................................................................. 10
互換性 .......................................................................................................................................... 11
制限と警告 .................................................................................................................... 11
システム要件................................................................................................................................ 11
PC の要件 ..................................................................................................................... 11
その他の要件 ................................................................................................................ 11
2: ユーザー インターフェイス ................................................................................................................ 12
デバッガの起動 ............................................................................................................................ 12
デバッガのコマンドライン構文 ................................................................................... 12
デバッガのコマンドラインの具体例 ............................................................................ 15
ファイルの関連付けを利用したデバッガの起動 .......................................................... 15
デバッガの概観 ............................................................................................................................ 16
ビューの生成 ................................................................................................................ 16
ビューの削除 ................................................................................................................ 16
デバッガ ビューの更新 ................................................................................................................ 17
すべてのデバッガ ビューの更新 .................................................................................. 17
デバッガ ビュー間でのデータ移動 .............................................................................................. 17
ドラッグ&ドロップのタイプ ........................................................................................ 17
ドラッグ&ドロップとソース ビュー ............................................................................ 18
Windows エクスプローラからのファイルのドラッグ&ドロップ ................................ 18
デバッガ ビュー間でのデータ コピー ......................................................................................... 19
ビュー内でのコラムの表示/非表示の切り替え ............................................................................ 19
メニュー、ツールバー、ステータス バー ................................................................................... 19
メニュー バー ............................................................................................................... 19
ツールバー .................................................................................................................... 24
ショートカット メニュー ............................................................................................. 24
ステータス バー............................................................................................................ 25
デバッガが実行中であるかどうかの検出 .................................................................................... 25
3: デバッガのカスタマイズ ..................................................................................................................... 26
ビュータイプの変更 ..................................................................................................................... 26
ビューのユニットを変更 .............................................................................................. 26
[ユニットの変更] サブメニュー .................................................................................... 26
[ユニットの変更 (グローバル)] および [ユニットの変更 (全ビュー)] サブメニュー .... 27
ユニットにビューをロック .......................................................................................... 27
ビューをサブビューに分割 .......................................................................................................... 28
デバッガのビュー分割バーの移動................................................................................ 28
フローティング&ドッキング ビュー............................................................................................ 28
メニューとツールバーのカスタマイズ ........................................................................................ 29
メニュー コマンドのカスタマイズ............................................................................... 30
ボタン エディタ............................................................................................................ 31
環境設定 ....................................................................................................................................... 32
© SCEI ProDG Debugger for PlayStation®3 v470.1
-3-
ProDG Debugger for PlayStation®3 ユーザー ガイド
目次

キーボードの設定 ......................................................................................................... 32
表示の設定 .................................................................................................................... 34
オートコンプリート設定 .............................................................................................. 35
クリップボード設定 ..................................................................................................... 36
ワークスペース設定 ..................................................................................................... 37
履歴設定 ....................................................................................................................... 38
ソース設定 .................................................................................................................... 38
VSI 設定 ........................................................................................................................ 41
フォントと色設定 ......................................................................................................... 41
プロジェクト設定 ........................................................................................................................ 43
プロジェクトのオプション .......................................................................................... 43
パスのマッピング ......................................................................................................... 44
検索ディレクトリ ......................................................................................................... 46
ステップ制御 ................................................................................................................ 50
PS3 設定 ...................................................................................................................................... 54
PPU デバッギング設定................................................................................................. 54
SPU デバッギング設定................................................................................................. 55
リセット オプション .................................................................................................... 56
デバッガ構成の保存 ..................................................................................................................... 57
4: ゲームのビルドおよびロード .............................................................................................................. 58
デバッグ用ビルド ........................................................................................................................ 58
ソース コードのコンパイル (raw モード SPU サポート) ............................................ 58
ターゲットへの接続 ..................................................................................................................... 59
ターゲットへの接続 ..................................................................................................... 59
複数ユーザーによる 1 台のターゲット上でのデバッグ............................................... 60
実行ファイルの読み込みと実行................................................................................................... 61
実行可能ファイルのロード .......................................................................................... 61
デバイスからのロード .................................................................................................. 63
実行可能ファイルのリロード ....................................................................................... 64
相対ベース ディレクトリの設定 .................................................................................. 64
ゲームの実行................................................................................................................................ 65
アプリケーションの再起動 .......................................................................................... 65
アプリケーションの起動 .............................................................................................. 65
アプリケーションの中止 .............................................................................................. 65
オブジェクト モジュールのロード .............................................................................................. 65
必須条件 ....................................................................................................................... 66
OML (オブジェクト モジュール ローディング) 用にマップ ファイルを使用する ...... 66
デバッガで ELF ファイルをロード .............................................................................. 66
オブジェクト モジュールの置換 (デバッガから) ......................................................... 67
オブジェクト モジュールの置換 (外部アプリケーションから) ................................... 67
安全なロード ポイントの選択 ...................................................................................... 68
制限 ............................................................................................................................... 69
よく発生する問題 ......................................................................................................... 69
オブジェクト モジュールの自動ロード ....................................................................... 70

© SCEI ProDG Debugger for PlayStation®3 v470.1


-4-
ProDG Debugger for PlayStation®3 ユーザー ガイド
目次

オブジェクト モジュール ローディングのチュートリアル ......................................... 70


コア ダンプ ファイルのロード .................................................................................................... 75
PRX のデバッグ ........................................................................................................................... 76
インライン関数 ............................................................................................................................ 76
SELF サポート ............................................................................................................................. 77
5: プログラムのブラウズ ......................................................................................................................... 79
プロジェクトの使用 ..................................................................................................................... 79
ワークスペース ビューの使用 ...................................................................................... 79
ワークスペースビューのオプション ............................................................................ 80
プロジェクト ビュー .................................................................................................................... 80
モジュールの追加 ......................................................................................................... 82
モジュールのプロパティ .............................................................................................. 82
ターゲットのモジュールへの関連付け ........................................................................ 84
モジュールのリセット パラメータの設定 .................................................................... 85
モジュールに対して検索パスを設定 ............................................................................ 85
モジュールへのパス マッピングの設定 ....................................................................... 86
ステップ制御フォルダの設定 ....................................................................................... 87
ステップ制御で無視する関数を指定 ............................................................................ 88
ファイル ビュー ........................................................................................................................... 90
参照ビュー ................................................................................................................................... 91
関数の参照 .................................................................................................................... 92
名称のデマングル ......................................................................................................... 92
6: 式 93
式の使用 ....................................................................................................................................... 93
数式の入力 .................................................................................................................... 93
アドレスの入力............................................................................................................. 94
式のビルド ................................................................................................................................... 95
式の評価 ....................................................................................................................................... 95
式内の名称検索順序 ..................................................................................................... 95
式評価機能でのコンテキスト指定子オペレータ .......................................................... 96
ソースビューでのホバー評価 ....................................................................................... 96
変数の自動展開 ............................................................................................................................ 97
自動展開の構文............................................................................................................. 97
ビットフィールド指定子 .............................................................................................. 98
フォーマット指定子 ..................................................................................................... 98
プレビュー ブロック .................................................................................................... 98
子ブロック .................................................................................................................... 99
条件ステートメント ................................................................................................... 100
Array ステートメント ................................................................................................. 100
List ステートメント .................................................................................................... 100
Tree ステートメント .................................................................................................. 101
Switch ステートメント ............................................................................................... 101
7: ソースおよび逆アセンブリの閲覧 .................................................................................................... 102
ソースの閲覧.............................................................................................................................. 102
© SCEI ProDG Debugger for PlayStation®3 v470.1
-5-
ProDG Debugger for PlayStation®3 ユーザー ガイド
目次

ソースファイルの配置 ................................................................................................ 102


ELF デバッグ情報でのソース ファイルのリスト表示 ............................................... 103
ソース ビュー ............................................................................................................. 103
式チップ ..................................................................................................................... 105
異なる場所にビルトインされているコードの閲覧 .................................................... 105
ソース ビューのショートカット メニュー ................................................................. 107
表示サブメニュー ....................................................................................................... 109
逆アセンブリの閲覧 ................................................................................................................... 110
逆アセンブリ ビュー .................................................................................................. 110
命令のヘルプ .............................................................................................................. 111
[逆アセンブリ] ビューのショートカット メニュー .................................................... 112
逆アセンブリ サブメニュー ....................................................................................... 115
表示サブメニュー ....................................................................................................... 116
レジスタの色分け ....................................................................................................... 116
逆アセンブリをファイルに保存 ................................................................................. 116
ソースと逆アセンブリを同時に閲覧 .......................................................................... 117
ソースと逆アセンブリ内の検索................................................................................................. 117
ブックマークの使用 ................................................................................................... 118
テキストの検出........................................................................................................... 118
正規表現 ..................................................................................................................... 118
パイプライン アナライザ .......................................................................................................... 120
PPU............................................................................................................................. 120
SPU............................................................................................................................. 122
8: ブレークポイントおよびステッピング ............................................................................................. 124
プログラム実行の中止 ............................................................................................................... 124
ブレークポイントの設定・閲覧 ................................................................................. 124
プログラムを 1 ステップずつ実行............................................................................................. 125
プログラムを 1 ステップずつ実行する ...................................................................... 125
現行関数をステップアウトする ................................................................................. 125
ブレークポイント ビュー .......................................................................................................... 125
ブレークポイントの種類 ............................................................................................ 126
ブレークポイント ビューのショートカット メニュー............................................... 128
ブレークポイント ビューのツールバー ..................................................................... 128
[ブレークポイントのプロパティ] ダイアログ ............................................................ 129
条件付きブレークポイント ........................................................................................................ 130
条件付きブレークポイントの設定.............................................................................. 130
スレッド特有のブレークポイント ............................................................................................. 131
スレッド特有のブレークポイントの設定 ................................................................... 131
埋め込み SPU 内のブレークポイント ― グローバル ブレークポイント ................................. 131
SPU ビューからのグローバル ブレークポイントの追加および削除 ......................... 131
グローバル ブレークポイントの復元 ......................................................................... 132
トレースポイント ...................................................................................................................... 132
トレースポイントの追加 ............................................................................................ 133
トレースポイントの削除 ............................................................................................ 135
ハードウェア ブレークポイント................................................................................................ 135
© SCEI ProDG Debugger for PlayStation®3 v470.1
-6-
ProDG Debugger for PlayStation®3 ユーザー ガイド
目次

ハードウェア ブレークポイントの設定 ..................................................................... 136


メモリ アクセス トラップ (MAT) .............................................................................................. 136
9: メモリとレジスタの閲覧・変更 ........................................................................................................ 140
メモリの閲覧・変更 ................................................................................................................... 140
メモリ ビュー ............................................................................................................. 140
メモリを変更・選択する ............................................................................................ 141
メモリ ビューのショートカット メニュー ................................................................. 141
値でメモリをフィルする ............................................................................................ 142
ターゲット メモリをバイナリ ファイルに保存する .................................................. 144
ターゲット メモリをバイナリ ファイルからロードする ........................................... 144
メモリ ビューをポインタ アドレスにロックする ...................................................... 145
レジスタの閲覧・変更 ............................................................................................................... 145
レジスタ ビュー.......................................................................................................... 146
レジスタ ビューのショートカット メニュー ............................................................. 146
ユーザー定義レジスタ テンプレート ......................................................................... 147
10: ローカル変数とウォッチ変数の閲覧 ................................................................................................. 149
ローカル変数の閲覧 ................................................................................................................... 149
ローカル ビュー.......................................................................................................... 149
ローカル ビューのショートカット メニュー ............................................................. 150
PC 周辺の変数を表示 ................................................................................................................ 150
オート ビュー ............................................................................................................. 150
オート ビューのショートカット メニュー ................................................................. 151
変数のモニタリング ................................................................................................................... 151
ウォッチ ビュー.......................................................................................................... 152
ウォッチ ビューのショートカット メニュー ............................................................. 152
ウォッチ変数の追加 ................................................................................................... 154
変数ブラウザを使用したウォッチの追加 ................................................................... 154
クラス/構造体の式から親への変更............................................................................. 154
表現の短縮 .................................................................................................................. 155
ウォッチ ビューで 128ビット レジスタを表示 .......................................................... 155
書式指定子を使用して変数を表示.............................................................................. 155
ローカル ビューとウォッチ ビューでの配列の使用.................................................................. 156
ユーザー定義の配列サイズ – ウォッチ ビューのみ ................................................... 156
配列のインデックスのスクロール – ウォッチ ビューとローカル ビュー ................. 157
11: コールスタック情報の表示 ............................................................................................................... 158
コールスタックの閲覧 ............................................................................................................... 158
コールスタック ビュー ............................................................................................... 158
コールスタック ビューのショートカット メニュー .................................................. 159
12: TTY 情報の表示 ................................................................................................................................. 160
TTY 出力の閲覧 ......................................................................................................................... 160
TTY ビュー ................................................................................................................. 160
TTY ビューのショートカット メニュー ..................................................................... 161
TTY チャンネルのプロパティ .................................................................................... 162

© SCEI ProDG Debugger for PlayStation®3 v470.1


-7-
ProDG Debugger for PlayStation®3 ユーザー ガイド
目次

TTY 出力のフィルタリング ........................................................................................ 164


TTY チャンネルの管理 ............................................................................................... 166
13: カーネル情報の表示 .......................................................................................................................... 167
カーネル ビュー ......................................................................................................................... 167
プロセス ..................................................................................................................... 167
PPU スレッド ............................................................................................................. 168
スレッド デッドロック検出 ....................................................................................... 170
セマフォ ..................................................................................................................... 170
ミューテックス........................................................................................................... 172
軽量ミューテックス ................................................................................................... 173
条件変数 ..................................................................................................................... 174
読み書きロック........................................................................................................... 175
イベント キュー.......................................................................................................... 176
軽量条件変数 .............................................................................................................. 177
仮想メモリ領域........................................................................................................... 177
モジュール .................................................................................................................. 179
メモリ コンテナ.......................................................................................................... 181
イベント フラグ.......................................................................................................... 182
カーネル ビューのショートカット メニュー ............................................................. 183
14: プロセス情報の表示 .......................................................................................................................... 184
プロセス ビュー ......................................................................................................................... 184
プロセス ビューのショートカット メニュー ............................................................. 186
プロセス ビューのツールバー .................................................................................... 189
プロセス ビューのオプション .................................................................................... 190
ファイバ情報.............................................................................................................................. 191
ファイバ スケジューラでファイバを使用 .................................................................. 191
ファイバ コンテキストの使用 .................................................................................... 193
ファイバ ユーティリティ ライブラリの使用 ............................................................. 194
ファイバのデバッグ ................................................................................................... 194
15: SPU デバッギング ............................................................................................................................. 196
SPU検索パス ............................................................................................................................. 196
SPU raw/スレッド モジュール .................................................................................................. 196
raw SPU モジュールのビルド .................................................................................... 196
スレッド SPU モジュールのビルド ........................................................................... 197
SPUモジュールのロードと実行 ................................................................................. 197
SPUモジュールのデバッグ ........................................................................................ 197
SPUモジュールのアンロード ..................................................................................... 198
SPU スレッド グループのデバッグ ........................................................................... 198
SPURS デバッグへの対応 ......................................................................................................... 199
SPURS モジュールのビルド ...................................................................................... 199
SPURS モジュールのデバッグ .................................................................................. 199
操作手順: SPURS モジュールを最初からデバッグする ............................................ 200
SPURS モジュールの各インスタンスをデバッグ ..................................................... 201
SPU 設定の持続 ......................................................................................................................... 201
© SCEI ProDG Debugger for PlayStation®3 v470.1
-8-
ProDG Debugger for PlayStation®3 ユーザー ガイド
目次

SPU 書き込み可能セクション ................................................................................................... 202


16: デバッガ スクリプト ......................................................................................................................... 203
デバッガ スクリプトとは .......................................................................................................... 203
インストールの注意 ................................................................................................... 203
トラブルシューティング ............................................................................................ 204
スクリプトの使用方法 ............................................................................................................... 204
スクリプト ビュー ...................................................................................................... 204
スクリプト ビューのショートカット メニュー ......................................................... 205
イミディエイト モードのステートメント .................................................................. 205
スクリプトの読み込みと実行 .................................................................................................... 206
autoexec.eic を使用する ............................................................................................ 206
ショートカット メニューからスクリプト ダイアログを実行する............................. 206
プロジェクトに保存されたスクリプト ...................................................................... 206
使用可能なライブラリ関数 ........................................................................................................ 206
標準 C ライブラリ関数 ............................................................................................... 206
SN Systems 関数 ........................................................................................................ 207
式の評価 ..................................................................................................................................... 207
ターゲット変数に新しい値を割り当てる ................................................................... 208
詳細なスクリプティング ........................................................................................................... 208
GDI 関数 ..................................................................................................................... 208
通知の使用方法........................................................................................................... 209
メニュー項目の追加 - 標準モード............................................................................ 210
メニュー項目の追加 – command view ....................................................................... 211
タイプ表示の変更 ....................................................................................................... 212
スクリプト サンプル .................................................................................................................. 213
スクリプティングの制限 ........................................................................................................... 215
17: 付録 A: スクリプティング API .......................................................................................................... 216
基本的な typedefs ...................................................................................................................... 216
標準 C 関数 ................................................................................................................................ 216
Stdlib.h ........................................................................................................................ 216
Stdio.h ......................................................................................................................... 216
String.h ....................................................................................................................... 217
Math.h ......................................................................................................................... 217
デバッガ スクリプティング API リファレンス ......................................................................... 218
18: 付録 B: 正規表現シンタックス.......................................................................................................... 272
基本シンタックス ...................................................................................................................... 272
省略形 ........................................................................................................................................ 273
19: 付録 C: libsn.a .................................................................................................................................. 274
libsn.a API .................................................................................................................................. 274
20: 付録 D: Debugger キーボード ショートカット ............................................................................... 276
21: インデックス ..................................................................................................................................... 282

© SCEI ProDG Debugger for PlayStation®3 v470.1


-9-
ProDG Debugger for PlayStation®3 ユーザー ガイド
はじめに

1: はじめに
ProDG Debugger for PlayStation®3 ("デバッガ") では、Sony Computer Entertainment PlayStation®3 開
発用ハードウェアを使用し、開発中のアプリケーションをロード、実行、デバッグすることができます。
デバッガには、ソース コード、逆アセンブリ、メモリ、レジスタ、変数、TTY、コールスタックを検証
するための総合的な支援機能が用意されています。デバッガのペイン分割機能では、ペインのレイアウト
を自由に設定できるため、使いやすさも向上しています。シングルステップは、条件ブレークポイントを
使用することにより、ユーザーがコントロールできます。また、繰り返しの多い作業は、デバッガのスク
リプト言語を使用して自動化することもできます。
このデバッガの主な特徴は以下のとおりです。
• プロセッサへの完全対応― ProDG は、PPU と SPU のオペコードとレジスタの全表示を含め、
PlayStation®3 の新しい Cell CPU に完全対応しています。
• 実行、ステップ、ブレークポイントのコントロール―デバッガは、ソース レベルのシングルステッ
プ、ステップオーバー、ステップイン、カーソルまで実行、ブレークポイントに対応しています。
• 条件式/カウント式ブレークポイントに対応―条件式ブレークポイントでは、コード内でブレークを
トリガする特殊条件を使用できるため、デバッグの支援となります。また、カウント式ブレークポ
イントを使用することにより、指定した回数ブレークポイントがトリガされた際に、コードの実行
を一時停止することができます。
• パイプライン アナライザ―パイプライン アナライザでは、PPU/SPU パイプラインでのプログラム
のフローがチェックされ、コードのアセンブリの隣には、ストール サイクルの数、命令の長さの合
計、ピッチとレイテンシー、ストールの理由など、便利な情報が表示されます。
• ドラッグ アンド ドロップ機能―名前や式は、ソース ペインからウォッチ ペインに自由にドラッグ
して、ウォッチを追加できます。また、ほとんどのペインはクリップボードのマークとコピーに対
応し、多くのペインでは、それぞれの情報をテキスト ファイルに直接ダンプすることもできます。
• ウォッチ ペインとローカル ペイン―ローカル ペインでは、'this' ポインタのタブと 'auto' コンテキ
ストのタブを使用して、すべてのローカル変数が自動的に追跡されます。ウォッチ ペインでは、
typecast を含む任意の式を使用できます。C/C++ データは、クラス、ユニオン、構造体、配列を、
展開/折り畳み機能を使用してわかりやすく表示できます。また、カスタム テンプレートを使用する
ことにより、特定データ タイプの表示方法を指定できます。デバッガでは、スクリプト ペインでの
複合表現式の一回単位の評価にも対応しています。
• スクリプトへの総合的な対応―スクリプト ペインでは、ユーザーが作成した ANSI-C プログラムを
実行することにより、メモリとのデータ送受信など、複雑なデバッガ処理を行うことができます。
このペインでは、実行の開始や停止、ブレークポイントの設定、実行ファイルの読み込み、デバッ
ガのコンテキスト メニューのカスタマイズ、テキストやグラフィックの描画、ファイルの操作、ウ
ォッチ表示方法の変更、その他のプログラムの実行などが可能です。スクリプトはプレーン テキス
トファイルですが、ランタイムにコンパイルされるため、実行時間がかなり短くてすみます。スク
リプトは、デバッガの起動時に自動的に読み込むことができ、デバッガの終了時にカスタムのスク
リプト ペインを保存させ、デバッガの起動時に再び読み込ませることもできます。
• シンプルなプロジェクト ナビゲーションを搭載したワークスペース ペイン―ワークスペース ペイン
には、SELF ファイルのファイル、関数、グローバル、クラス定義への簡単なアクセス方法が用意さ
れています。この機能をソース コードの検索パスと組み合わせることにより、ビルド担当者や設定
を問わず、ソース コードに関連する任意のアイテムをデバッグできます。
• ソース/逆アセンブリ ペインの混合 モード―混合モード ペインでは、ソース コードの形式を簡単に
切り替えることができます。コードの逆アセンブリがオリジナルのソース行にインターリーブされ
るソース、逆アセンブリ、ミックス モードを表示できます。
• 正規表現―正規表現は、文字列パターンを記述するための一般的な方法で、デバッガ内での検索に
使用できます。
• 柔軟なペイン/ウィンドウ システム―CPU レジスタ、メモリ、逆アセンブリ、ソース、ローカル変
数、ウォッチ ポイントは、複数を同時に表示できます。このレイアウトは自由に保存し、必要に応
じて呼び出すことができます。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 10 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
はじめに

• 各種ペイン間でのセーブとロード―多くのペインには、情報ブロックをディスクにセーブまたはデ
ィスクからロードする機能が用意されています。この機能を使用することにより、ゲームの状態を
簡単に復元、または異なるハードウェア上でのメモリを比較することなどができます。
• ユーザー設定可能なショートカットとカラー設定―デバッガのキー マップは、自由に変更できま
す。Visual Studio および SN (SDevTC 製品を使い慣れたユーザー用または別プラットフォームで
ProDG を使用しているユーザー用) には、キー マップが用意されています。テキストのフォント、
サイズ、カラーは、各ペインに対して設定できます。
• ポップアップ式の数式評価機能―デバッガのソース ペインには、フローティング式の評価機能が用
意されています。テキストや選択項目にカーソルを合わせると、対象アイテムの評価や値がツール
チップ上に瞬時にポップアップ表示されます。
• Visual Studio .NETとの統合―上記の機能と Visual Studio .NET (2003/2005) との統合は、Add-ins
および Appwizards を使用して行います。以下の機能が用意されています。

互換性
ProDG for PlayStation®3 デバッガ v2.x は次と互換性があります。
• ProDG Target Manager for PlayStation®3 v1.x以降
• Visual Studio .NET 統合環境版 v1.3.x 以降
• SCE Cell ツールチェーン Windows 版

制限と警告
制限:
• Unicode への対応は限定的で、これがもっとも顕著なのはファイル パス処理です。

システム要件
Windows PC が開発用ハードウェアに接続されている必要があります。
SCE PlayStation® ハードウェアには使用環境の条件があるため、使用する PC は、最低でもこの条件を満
たしている必要があります (詳細は、SCE のドキュメントを参照)。

PC の要件
ProDG ツールが最高性能を発揮するために PC は少なくとも以下を搭載していることを推奨します。
• Intel Pentium III (または同等品) 以上のプロセッサ
• Windows XP Pro.
• ネットワーク アダプタ
• 512MB RAM
• 8MB ビデオ メモリ
• 最低 24MB のハードディスク スペース

メモ:ProDG デバッガでさまざまな配色を見られるようにするため、モニタは少なくともハイカラー
(16ビット) の解像度に設定する必要があります。

その他の要件
• Sony コンピュータ エンターテイメント PlayStation®3 開発用ハードウェア
• Sony コンピュータ エンターテイメント PlayStation®3 ソフトウェア開発キット (SDK)

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 11 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

2: ユーザー インターフェイス
この章では、デバッガの起動方法やビューの変更方法、および使用可能なコマンドについて説明します。
この章には、以下のセクションがあります。
• デバッガの起動
• デバッガの概観
• デバッガ ビューの更新
• デバッガ ビュー間でのデータ移動
• メニュー、ツールバー、ステータス バー

デバッガの起動
ProDG デバッガは、コマンドライン、または Windows のショートカットから起動します。Windows の
ショートカットを使用して起動する場合は、ショートカットのプロパティで、必要に応じてデバッガへの
コマンドライン パラメータと、デバッガの実行ディレクトリを設定する必要があります。
ProDG Visual Studio Integration をインストールしてある場合は、デバッガを Microsoft Visual Studio の
ツールバーボタンから起動することもできます。
デバッガの起動時に Target Manager が実行されていない場合、Target Manager は自動的に起動します
(パス上にあることが条件)。

メモ:Target Manager で最低 1 台のターゲットが設定されていないと、ProDG デバッガは起動しま


せん。その際は Target Manager を起動し、ターゲットを追加します。

作業ディレクトリは、デバッガのコマンドラインに入ったときの現行ディレクトリ (または、Windowsシ
ョートカット プロパティ ダイアログの作業フォルダ フィールドで指定したディレクトリ) です。
ここでは、Windows のショートカット用の作業ディレクトリを設定します。設定しない場合、デバッガ
の設定ファイルが現在のディレクトリに応じた別の場所に保存されます。デバッガの設定に関する詳細
は、「デバッガ構成の保存」を参照してください。

デバッガのコマンドライン構文
デバッガのコマンドライン構文は以下のとおりです。
ps3debugger <switches> <file> <app_params>

<switches> デバッガのオプションを指定する省略可能なスイッチ。

<file> 実行ファイル (SELF) または SN プロジェクト ファイル (.snproj) を指定しま


す。このファイルをコマンドラインで指定しない場合は、後で ELF ファイル
をメニューからロードする必要があります。
メモ:ファイル名にスペースが含まれている場合は、ファイル名を二重
引用符で囲んでください。

<app_params> main() に引き渡される argc パラメータと argv[] パラメータ。

SELFファイルを指定したにもかかわらず、ターゲットにダウンロードしなかった場合は、シンボルのみ
がロードされます。このモードは、クラッシュしたターゲットの事後デバッグを行う場合に適していま
す。
有効なスイッチは以下のとおりです。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 12 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

-autoexp 追加「autoexp.dat」ファイルを設定します (「変数の自動展開」を参照)。こ


<filename> のファイルはデバッガが起動されるたびに (任意のローカル「autoexp.dat」
ファイルと共に) ロードされます。この設定は、デバッガの [オプション] ダ
イアログからも行えます (「表示の設定」を参照)。

-c SAMBA および Linux を使用するディベロッパ用のデバッガで大文字・小文


字の区別を可能にします。

-clrtty 実行ファイルをロードする前にすべての TTY ストリームをクリアします。

-coredump コアダンプ <filename> を読み込み、<symbolfilename> からシンボルを読


<filename> み込みます (省略可能)。-t<name> (<name> はコアダンプ ターゲット) と使用
<symbolfilename>
するときは、指定したターゲットが使用されます。<name> がコアダンプ タ
ーゲットでない場合には、新しいターゲットが作成されます。これ以外の場
合、現在接続されているターゲットが使用されます。

-coredumpx <filename> からコア ダンプ ファイルをロードし、新規コア ダンプ ターゲ


<filename> ットを強制的に作成します。

-d デフォルトでは、プログラムが実行 (-x を使用) されると main() で停止しま


す。この動作は、コマンドライン スイッチ -d を使用してオフにできるた
め、プログラムの実行を継続できます。

-da デバッガが終了したとき、ターゲットを切断した状態にします。デフォルト
設定では、デバッガ起動時の状態にターゲットが維持されます。

-e 記号情報に加えてファイルの実行可能部分をダウンロードします。

-exit コマンドラインの解析後、デバッガの終了を指定します。

-f [<path>] オプション パスが指定されていない限り、<file> 引数でロードされた実行


ファイルのディレクトリで接続対象のファイルサーバーのルート ディレクト
リをリセットします。

-h[<path>] オプション パスが指定されていない限り、ターゲットのディレクトリを設置


します。

-I AI_nnnn デバッグ セッションの開始・終了時点で、Visual Studio のブレークポイン


トをインポート・エクスポートするなど、Microsoft Visual Studio.NET の互
換機能を有効にします。
スイッチ「AI_nnnn」は、現在使用している Visual Studio devenv.exe のプ
ロセス ID を示すもので、ここで nnnn はそのプロセス ID を示します。これ
は Windows のタスク マネージャーから入手するか、または Visual Studio
からデバッガを起動した後で、Visual Studio .NET の出力ペインを観察する
ことで入手できます。

-m デバッガの複数インスタンスの実行を可能にします。

-mimplicit –m の振る舞いを拡張します。このスイッチは、デフォルトではデバッガの
新しいインスタンスを起動するためのその後の読み込みを強制します。「プ
ロジェクトのオプション」を参照してください。

-mexplicit –mimplicit スイッチを無効化し、単一インスタンスの起動に戻します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 13 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

-md2 デバッガがクラッシュしなければならないという予想外の状況が発生したと
きに、フル メモリ ダンプ ファイルの出力を有効にします。

-M<monitor id> ロード時に、デバッガを指定モニタに移動します。構成ファイルに保存され


たウィンドウ位置が、指定モニタの始点からのオフセットとして使用されま
す。
このスイッチは、構成ファイルに保存された位置を変更するものではありま
せん。
メモ:モニタ ID は、[ウィンドウ表示プロパティ] ダイアログ内の「
Identify」関数によって示される数値と一致します。

-nd デバッガ終了時に、ターゲットの接続を解除しないようにします。デフォル
ト設定では、デバッガ起動時の状態にターゲットが維持されます。

-noppu PPU デバッギングを無効化します。「実行可能ファイルのロード」を参照し


てください。

-nospu SPU デバッギングを無効化します。「実行可能ファイルのロード」を参照し


てください。

-nostep 「ステップ インしない/ステップ インする」ルールが、指定ファイルからイ


<filename> ンポートされるように指定します。このスイッチと –exit を組み合わせる
と、実行制御ルールのインポートが自動化できます (例:1 つのリストを複数
ユーザーに行き渡らせる場合など)。

-p<path> パス名の接頭辞 <path> を指定します。ここで、<path> はドライブ文字、


コロン、'/'、およびディレクトリ名で構成します。このパスは、'/'で始まる
ように指定されたすべてのパスの前に付加されます。

-priority <n> オプションで優先度レベルが指定されていない限り、読み込み中の実行可能


ファイルからデフォルトのスレッド優先度を使用します。

-prj <path> 起動時にロードする SN プロジェクト ファイル (.snprj ファイル) のパスを指


定します。
メモ:ファイル名にスペースが含まれている場合は、ファイル名を二重
引用符で囲んでください。

-r 実行可能ファイルのダウンロード前にターゲットをリセットします。

-relbase オプション パスが指定されていない限り、<file> 引数で読み込まれた実行


可能ファイルの場所に対して相対ベース ディレクトリを設定します。

-runexit ターゲット上で実行されているプロセスが終了したらデバッガを閉じるよう
指定します。

-s –mimplicit オプションに関わらず、単一インスタンスの読み込みを強制しま
す。既存のデバッガ インスタンスがある場合は、コマンド ライン上で渡さ
れます。

-S <path> デバッガの起動スクリプトのパスを指定します。この <path> には、デバッ


ガが実行されるディレクトリの相対パスと絶対パスのいずれも指定できま
す。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 14 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

-stack <n> オプションでスタック サイズが (バイトで) 指定されていない限り、読み込


み中の実行可能ファイルからデフォルトのスタック サイズを使用します。

-t<name> ターゲット <name> に接続します。ターゲット <name> への接続名にスペー


スが含まれている場合は、スペースを引用符で囲んでください。
デバッガのインスタンスの一部がすでに実行されており、かつその 1 つ
が -t<name> により指定されているターゲットに接続している場合には、-m
が指定されていない限りコマンドラインはそのインスタンスに渡されま
す。-m が指定されている場合、コマンドラインは新しいデバッガのインス
タンスに渡されます。
-m が指定されておらず一部のデバッガのインスタンスが実行されているも
のの、-t<name> により指定されているターゲットに接続していない場合に
は、コマンドラインは、開始されている最後のデバッガ インスタンスに渡さ
れ、指定されているターゲットに対するインスタンスに再接続されます。

-u コア ダンプを強制的に有効にします。

-x ターゲットにプログラムがロードされた後、このスイッチによってプログラ
ムが実行され、main() で停止します。このスイッチを使用しない場合、プロ
グラムはロード後にエントリ ポイントで停止します。

デバッガのコマンドラインの具体例
コマンドラインの一例を以下に示します。
ps3debugger -e -r -pc:/cygwin balloon.self

これでデバッガが起動され、ファイル balloon.self からシンボルをロードし、PlayStation® をリセット


し、balloon.self をロードし、プログラムを main() まで自動的に実行します。パス 'C:/cygwin' が、'/' で
始まるすべてのパスの前に付加されます。

ファイルの関連付けを利用したデバッガの起動
サポートされているファイルをダブルクリックすると、デバッガを起動できます。現在サポートされてい
るファイル拡張子は、'SNT'、'SNTPROJ' および 'SNPROJ' です。
ファイルの関連付けによるデバッガの起動のサポートは、SNLauncher によって行われています。
SNLauncher は、ある特定の種類の SN Systems のファイルを、対応する SN Systems のアプリケーショ
ンで開くためのアプリケーションです。
SN Systems の一部のファイル拡張子は、デバッガと Tuner の PS3 バージョンと PSP バージョンの両方で
サポートされています。SNLauncher は、ファイル拡張子を確認し、ファイルを読み取り、どのアプリケ
ーションで開くかを決定します。SNLauncher はバックグラウンドで実行されるため、ユーザーの目には
見えません。なお、SNLauncher は SN Systems のインストーラによりインストールされるため、
SNLauncher アプリケーションを明示的に実行する必要はありません。
SNLauncher の実行ファイルはどのフォルダに移動しても構いません。そのような場合には、
SNLauncher をダブルクリックして、インストールしなおしてください。再インストールを行うと、サポ
ートされているファイル拡張子が、SNLauncher の実行可能ファイルのインスタンスと再度関連付けられ
ます。

注意: SN Systems のファイル拡張子を別のアプリケーションに手動で関連付けている場合、


SNLauncher を手動で再インストールすると、SNLauncher によりその関連付けが再度制御されること
になります。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 15 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

デバッガの概観
ターゲットの状態は、各種ビューに表示されます。

詳細は、「ビューの生成」および「ビューの削除」を参照してください。
デバッガの主要機能には、メニュー オプション「メニュー バー」を参照)、ツールバー ボタン(「ツール
バー」を参照)、およびショートカット キー (ビューの説明を参照) を使ってアクセスできます。
ビューの配置は、各デバッグ セッション終了時にデバッガ構成ファイルに保存されます (「デバッガ構成
の保存」を参照)。

ビューの生成
新しいデバッグ ビューはいつでも生成できます。ビューは、[ウィンドウ ] メニューの [新しいビュー] コ
マンド (「[ウィンドウ] メニュー」を参照) または、ビュー ツールバーのボタンから開くことができま
す。
各ビュー タイプには、マウスの右クリックでアクセスできる固有のショートカット メニューがありま
す。詳細は、「ショートカット メニュー」を参照してください。
デフォルトでは、アプリケーションがターゲット上で実行を中断するたびに、デバッガ ビューが現在の
情報に更新されます。この他にも、いくつかの更新オプションを設定できます。詳細は、「すべてのデバ
ッガ ビューの更新」を参照してください。
ビューは、ドッキング機能を使用して整理できます。「フローティング&ドッキング ビュー」」を参照し
てください。

ビューの削除
ビューを削除する場合は、タイトル バーの「閉じる」ボタンをクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 16 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

デバッガ ビューの更新
デフォルトでは、すべてのデバッガのビューは、ターゲットが動作を中止すると更新されます。ビューは
すべて、強制的に更新することができます。

すべてのデバッガ ビューの更新

[更新ビュー] ボタン は、すべてのビューの内容を一回でリフレッシュします。[自動更新] ボタン


を使用して自動更新が有効となっている場合には、ターゲットを呼び出す度に更新情報を継続してリフレ
ッシュします。

デバッガ ビュー間でのデータ移動

ドラッグ&ドロップのタイプ
ドラッグ&ドロップは、異なるビュー間の移動を円滑に行うために実装されています。たとえば、特定の
関数にブレークポイントを追加したいが、正確な関数名またはスペルが思い出せない場合、ワークスペー
ス ビューを参照し、関数を検索できます。そして関数名をブレークポイントビューに「ドラッグ」後、
「ドロップ」します。これによって関数のアドレスにブレークポイントが追加されます。
ドラッグ&ドロップ作業の結果は、データをドラッグまたはドロップするビューによって異なります。起
こりうる組み合わせの表を以下に示します。

ドラッグ先

ドラッグ元 ソース/DIS メモリ ウォッチ ブレーク 逆アセンブル


ポイント

AUTO/ローカル アドレスに ウォッチに


移動 追加

ブレーク 関数に移動 アドレスに ウォッチに 関数に移動


ポイント 移動 追加

コールスタック 関数に移動 アドレスに ウォッチに ブレークポイ 関数に移動


移動 追加 ントの追加

メモリ 関数に移動 アドレスに ウォッチに 関数に移動


移動 追加

プロセス ユニットの ユニットの ユニットの ユニットの ユニットの


変更 変更 変更 変更 変更

レジスタ アドレスに アドレスに ウォッチに アドレスに


移動 移動 追加 移動

ソース/DIS 関数に移動 アドレスに ウォッチに ブレークポイ アドレスに


移動 追加 ントの追加 移動

TTY 関数に移動 アドレスに ウォッチに ブレークポイ 関数に移動


移動 追加 ントの追加

ウォッチ 関数に移動 アドレスに ウォッチに ブレークポイ 関数に移動


移動 追加 ントの追加

ワークスペース 関数に移動 アドレスに ウォッチに ブレークポイ アドレスに


ブラウズ 移動 追加 ントの追加 移動

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 17 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

ワークスペース ロード
ファイル

マウスがデータをドラッグしている間は、マウスはデータがドラッグ中であることを示す表示に変わりま
す。

Drag cursor — ドラッグ&ドロップが進行中

No Entry cursor — ここへのドロップは不可能


• Go to 操作 (ソース ビューにドラッグする) は、現在のところ関数上でのみ有効です。
• メモリ ビューからタイプの異なるビューへのドラッグは、オブジェクトの先頭アドレスからのみ実
行可能です。たとえば、メモリ ビューの 8 バイト ビューで 32 ビット変数を表示するときは、ウォ
ッチ ビューに第 1 バイトをドラッグした場合にのみ、変数名が正しく評価されます。その他のメモ
リ ビューにドラッグする場合はあらゆるアドレスから実行できます。
• アドレスは、メモリ ビューの左側の列からドラッグします。
• ウォッチ ビューに構造体が追加され、拡張されると、アイテム メンバがウォッチ ビューにドロップ
され、そのメンバに関するウォッチ数式が追加されます。たとえば「front_end_game_data」がウォ
ッチ ビューに追加され、拡張されると、'selected_country' のメンバ変数をドラッグし、ウォッチ ビ
ューにドロップしなおすことによって、「front_end_game _data.selected_country」の新たなウォッ
チ式が追加されます。
• それ自身にドラッグ&ドロップするには、カーソルを少なくともドロップする行の高さにまで移動す
る必要があります。これは誤ったドラッグ操作を防ぐためです (構造体を拡張するためにクリックす
る時のマウス移動など)。

ドラッグ&ドロップとソース ビュー
ソース ビューから情報をドラッグするには、テキスト選択を行ないます。その後、選択したデータ上で
マウス ボタンを押して、通常どおりのドラッグ操作を行ないます。選択が複数行におよぶ場合は、最初
の行のみが「ドロップ」されます。
たとえば、コード内の「front_end_game_data.selected_country」を選択し、ウォッチ ビューにドラッグ
すると、このクラス メンバがウォッチ ビューに追加されます。ただし、行の「front_end_game_data」
部分のみを選択し、ウォッチ ビューにドロップすると、実際のクラスがウォッチ変数として追加され、
すべてのメンバ変数を表示するように拡張されます。
main()
{
front_end_game_data.selected_country = 0;
front_end_game_data.selected_game_mode = WWR_TIME_ATTACK_MODE;
front_end_game_data.selected_class = NOVICE_CLASS;
front_end_game_data.selected_car = WWR_DOUBLE_MOON;
...
}

Windows エクスプローラからのファイルのドラッグ&ドロップ
デバッガでは、Windows エクスプローラからドラッグ&ドロップしてソース ファイルをロードすること
がきます。
• エクスプローラから 1 つのファイルをドラッグしてソース ビューにドロップすると、そのビューに
ドロップしたファイルがロードされます。
• 1 つ以上のファイルがソース ビューにドラッグされると、ドロップしたそれぞれのソース ファイル
に新しいタグが作られます。
• デバッガのその他の部分にファイルをドラッグした場合、ファイルごとに新しいソース ビューが開
きます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 18 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

デバッガ ビュー間でのデータ コピー


すべてのビューにおいて、現在の選択内容のコピーには Ctrl+C が使用できますが、ビューにグリッド表
示が使用されている場合 (プロセス ビューなど)、このメソッドでは行全体が選択されます。ただし、以
下の手順に従い、個別セル (編集可能または不可能なセルの両方) を選択することが可能です。
• コピー元となるセルを選択し、Shift キーを押しながらコピーしたいセルをクリックします。これに
より、該当セルがハイライト表示され、コピー可能となります。データをコピーするには Ctrl+C を
押します。
クリップボードの形式オプションに関する詳細は、「クリップボード設定」を参照してください。

ビュー内でのコラムの表示/非表示の切り替え
タブ形式でデータを表示するビュー ([ウォッチ]、[ローカル]、[オート]、[コールスタック]、[ブレークポ
イント] および [プロセス] の各ビュー) を使うと、個々のカラムの表示/非表示を切り替えることができま
す。表示の切り替えを行うときは、これらのビューのヘッダーを右クリックします。それぞれのカラムの
メニュー項目を含むコンテキスト メニューが表示されます。現在表示されているカラムのとなりにはチ
ェックマークが表示されます。これらのメニュー項目のいずれかを選択すると、状態が切り替えられ、カ
ラムが表示/非表示になります。

メニュー、ツールバー、ステータス バー

メニュー バー
デフォルトのデバッガ メニューバーには、[ファイル]、[デバッグ]、[ツール]、[ウィンドウ]、[ヘルプ] の
各オプションがあります。詳細は以下のとおりです。メニューバーの設定についての詳細は、「メニュー
とツールバーのカスタマイズ」を参照してください。

[ファイル] メニュー

新規プロジェクト 新しい空のプロジェクトを作成します。新プロジェクトの設定にはワーク

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 19 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

スペース ビューを使用します。「ワークスペース ビューの使用」を参


照。

ロード [ロード] サブメニューにアクセスします。「[ロード] サブメニュー」を参


照。

プロジェクトを閉じる プロジェクトを閉じます。

モジュールの追加 プロジェクトに実行可能ファイルを追加できます。

モジュールの モジュールのプロパティを表示します。「モジュールのプロパティ」を参
プロパティ 照。

保存 [保存] サブメニューにアクセスします。「[保存] サブメニュー」を参照。

最近使用したソース フ 最近アクセスしたソース ファイルのサブメニュー リストにアクセスする


ァイル 場合に使用します。

最近使用した 最近アクセスしたプロジェクトのサブメニュー リストにアクセスする場


プロジェクト 合に使用します。

終了 デバッガを終了します。

[ファイル] メニューの一部のコマンドは、[プロジェクト] ツール バーからも使用できます。

[ロード] サブメニュー

プロジェクト プロジェクトをデバッガにロードします。ダイアログを使用して、SN
Systems プロジェクト (.snproj) ファイルを選択し、デバッガにロードしま
す。

実行ファイル 実行可能ファイル (SELF) をターゲットにロードします。表示されるダイ


アログでは、ファイル名の選択とファイル ロード オプションの設定がで
きます。「実行可能ファイルのロード」を参照。

シンボル シンボルとデバッグ情報のみをロードします。表示されるダイアログ ボッ
クスを使うと、ファイル名が指定できます。ここからシンボルとデバッグ
情報が読み込まれます。

コアダンプ デバッガにコア ダンプ ファイルをロードします。Shift キーを押しながら


このオプションを選択すると、新規コア ダンプ ターゲットが強制的に作

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 20 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

成されます。「コア ダンプ ファイルのロード」を参照。

ソース (現在このオプションは使用不可)

デフォルト DefaultLayout.xml ファイルから、ウィンドウとツールバーのレイアウト


レイアウト を復元します。

オブジェクト ターゲットにオブジェクト ファイルをダウンロードします。ファイルを選


ファイル 択できるダイアログが表示されます。「オブジェクト モジュールのロー
ド」を参照。

オブジェクト 現在のプログラムがビルドされてから修正が加えられたオブジェクト ファ
ファイル: オート イルを自動的に読み込みます。「オブジェクト モジュールの自動ロード」
を参照。

Autoexp.dat 自動展開定義ファイルをロードします。「変数の自動展開」を参照。

[保存] サブメニュー

プロジェクトを保存 プロジェクトを保存します。

プロジェクトを別名で プロジェクトを別名で保存します。
保存

デフォルト レイアウト 現在のウィンドウとツールバーのレイアウトを、DefaultLayout.xml ファ


イルに保存します。

[デバッグ] メニュー

実行 現在アクティブなビューに関連するスレッドを開始します。
メモ:現在のビューに関連するスレッドがない場合は、[実行]、[停止]
、[ステップ]、[制限ステップ イン]、[ステップ オーバー]、[ステップ ア
ウト] オプションにより、アクティブな PPU スレッドが制御されますが
、現在アクティブなビューがプロセス ビューである場合、これらのオプ
ションは無効化されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 21 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

停止 現在アクティブなビューに関連するスレッドを停止します。

リセットとリロード プログラムの開始ポイントにプログラム カウンタをリセットします。ロード


に使用できるモジュールがない場合は、[実行ファイルのロード] ダイアログ
が表示されます (「実行可能ファイルのロード」を参照)。

ステップ デバッガで現在アクティブなビューに関連するスレッドのシングル ステップ


を実行します。

制限ステップ イン ステッピング制御フォルダのいずれかにソース ファイルが存在する関数コー


ルをシングル ステッピングする場合、該当関数コールは無視され、代わりに
「ステップ オーバー」処理が実行されます (「ステップ制御」を参照)。

ステップ オーバー 現在のソース行にある関数のコードをとばして、現在の関数の次の行まで 1


ステップずつ実行します。

ステップ アウト 現在の関数から移動し、呼び出し関数の次の行まで 1 ステップずつ実行しま


す。

プロセスのアタッチ デバッガによって実行されなかった .self ファイルをアタッチおよびデバッグ


することができます。このオプションは、プロセスがすでにアタッチされて
いるときは灰色になり、選択できなくなります。これを有効化するには、
Target Manager から ELF ファイルを読み込んでから、デバッガをロードし
てください。

ブレークポイントの Visual Studio 内で現在設定されているブレークポイントをインポートし、そ


同期 れらをターゲットメモリに追加します。

ハードウェア [ハードウェア ブレークポイント] ダイアログを表示します。「ハードウェア


ブレークポイント ブレークポイント」を参照。

メモリ アクセス [メモリ アクセス トラップ (MAT)] ダイアログを使用すると、書き込み処理


トラップ (MAT) または読み込み/書き込み操作アクセス時に、ブレークポイントを引き起こ
すメモリ領域にフラグを立てることができます。詳細は「メモリ アクセス
トラップ (MAT)」を参照。

[デバッグ] メニューの一部のコマンドは、[デバッグ コントロール] ツール バーからも使用できます。

[ツール] メニュー

ターゲットの選択 デバッグするターゲットを選択します。表示される [ターゲットの選択] ダイ


アログ ボックスには、ネットワーク上のターゲットを検索するための [ター
ゲットを検索] オプションが用意されています (詳細は『Target Manager ユ
ーザーガイド』を参照してください)。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 22 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

インストール済みツ [外部ツール] オプションで宣言された外部ツールのリストを表示します。


ール

外部ツール [カスタマイズ] ダイアログボックスの [ツール] タブで、外部ツールの宣言が


行えます (詳細は 「メニューとツールバーのカスタマイズ」を参照)。これら
のツールへのショートカットが、 [ツール] メニュー ([インストール済みツー
ル] セクション) に追加されます。

検索パス表示 すべての検索フォルダと、これらの場所で見つかった ELF ファイルのツリー


ビューを表示します。ターゲット上で ELF が検出された場合、このダイアロ
グに表示されているすべての ELF ファイルに対して検索が行われ、見つかれ
ば、その ELF のシンボルがロードされます。「検索ディレクトリ」を参照。

オプション デバッガのカスタマイズを行います。「メニューとツールバーのカスタマイ
ズ」を参照。

[ウィンドウ] メニュー

新規ビュー デバッガで新しいウィンドウを作成するときに使用します。

ビューの変更 このサブメニューを使用すると、現在のビュー タイプを別のビュー タイプ


に変更できます。

横に分割 現在のビューを横方向に分割するときに使用します。

縦に分割 現在のビューを縦方向に分割するときに使用します。

新しいタブ 現在のビューに新しいタブを追加するときに使用します。

重ねて表示 すべてのウィンドウを標準の Windows カスケード形式で (重ねて) 表示しま


す。

並べて表示 すべてのデバッガ ウィンドウを標準の Windows タイル形式で (重ねずに) 配


置します。

アイコンを整理 すべての最小化されたウィンドウを整列します。

すべて閉じる 開いているすべてのウィンドウを閉じます。

横方向/縦方向の分割、または新しいタブの追加を行うとき、追加される新しいビューは、現在のビュー
にすることも、利用可能なビューのリストから選択することもできます。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 23 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

メニューの下部にデバッガが現在開いているウィンドウのリストが表示されます。

[ヘルプ] メニュー

ProDG ヘルプ ProDG のヘルプが表示されます。

Debugger ヘルプ ProDG Debugger のヘルプが表示されます。

ダンプ ファイルを ダンプ ファイルが生成されます。


生成する

バージョン情報 バージョン情報が表示されます。

ツールバー
[デバッガ] ツールバーには 4 つのオプションがあります。ツールバーの任意の部分を右クリックすると、
以下のようなツールバーのショートカット メニューが表示されます。

ツールバー横の印は、そのツールバーが表示されていることを示します。
[ウィンドウ] メニューの一部のコマンドは、以下の [ビュー] ツールバー、

および [ウィンドウ コントロール] ツール バー、

および [ビューの変更] ツール バーにも用意されています。

ショートカット メニュー
各ビューには、ショートカット メニューがあり、ビュー上を右クリックすると表示されます。
ショートカット メニューには、各ビュー タイプ用のコマンドが含まれています。頻繁に使用するコマン
ドはキーボードのショートカットからアクセスすることもできます。
メニューのフォーマットはさまざまですが、すべてのビュー タイプに共通するメニュー アイテムもあり
ます。

ビューの切り替え このサブメニューを使用すると、現在のビューのタイプを別のビュータイ

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 24 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス

プに変更できます。

ユニットの変更 [ユニットの変更] サブメニューにアクセスします。このオプションは複数


のユニットにアクセス可能な場合にのみ使用可能となります。詳細は、
「[ユニットの変更] サブメニュー」を参照してください。

ユニットの変更 [ユニットの変更 (全ビュー)] サブメニューにアクセスします。 このオプシ


(全ビュー) ョンは、複数のユニットにアクセス可能な場合にのみ使用できます。 詳細
は、「 [ユニットの変更 (グローバル)] および [ユニットの変更 (全ビュー)]
サブメニュー」を参照してください。

横に分割 選択したビューを横分割表示します。

縦に分割 選択したビューを縦分割表示します。

新しいタブ 選択されたビューで新しいタブを作成します。

コピー ビューで選択した項目をクリップボードにコピーします。選択されたテキ
ストはクリップボードよりメモ帳などのアプリケーションへ、またビュー
全体のビットマップ イメージはペイントなどのアプリケーションへ、それ
ぞれ貼り付け可能です。

ステータス バー
デバッガ ウィンドウの下部にはステータス バーがあります。
ステータス バーは、現在の [ステッピング モード] を、フォーカスを持つビューの [ソース] または [逆ア
センブリ] のいずれかで表示します。

デバッガが実行中であるかどうかの検出
デバッガが現在実行中であるかどうかを、ゲーム コード内から自動的に検出する関数が役立つ場合もあ
ります。これを実行するには以下を呼び出します。
int snIsDebuggerPresent();

デバッガが実行中の場合は 1 が、それ以外の場合は 0 が戻されます。


この関数を使用するには、定義を含むヘッダー ファイル libsn.h をインクルードし、libsn.a.install ディレ
クトリにリンクする必要があります。これらのファイルは、デバッガのインストール ディレクトリ \SN
Systems\PS3\ppu\include and \SN Systems\PS3\ppu\lib subfolders にあります。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 25 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

3: デバッガのカスタマイズ
この章では、ビューのレイアウト変更方法、メニューやツールバー コマンドのカスタマイズ方法、各種
項目の設定方法について説明します。
この章には、以下のセクションがあります。
• ビュー タイプの変更
• ビューをサブビューに分割
• フローティング&ドッキング ビュー
• メニューとツール バーのカスタマイズ
• 環境設定
• プロジェクト設定
• PS3 設定
• デバッガ構成の保存

ビュータイプの変更
表示中のビュータイプは、ビューのショートカット メニューの [ 表示変更 ] コマンドを使用して変更でき
ます。

ビューのユニットを変更
マルチプロセッサ (-unit) 開発ハードウェアの場合、以下のいずれかの方法で、別のユニットに関連する
情報を表示するように切り替えることができます。
• ビューの任意の場所を右クリックしてショートカット メニューを表示し、このビューのみについて
ユニットを変更する [ユニットの変更] を選択、または選択したウィンドウの全ビューについてユニ
ットを変更する [ユニットの変更 (全ビュー)] を選択します。詳細は、「ショートカット メニュー」
を参照してください。
• ウィンドウのタイトル バーで [ユニットの変更 (全ビュー)] ツールバー ボタンをクリックします。

これにより、[ユニットの変更 (全ビュー)] サブメニューが表示されます。詳細は、「 [ユニットの変更 (グ


ローバル)] および [ユニットの変更 (全ビュー)] サブメニュー」を参照してください。

[ユニットの変更] サブメニュー

PPU / SPU 現在のビューを、選択したプロセッサ ユニットに関する情報を表示するよう


に変更します。

アクティブな SPU アクティブな SPU を追跡管理するビューを設定します。これにより、最後に


を追跡 停止した SPU、またはプロセス ビューでダブルクリックして選択した SPU を

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 26 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

確認できるようになります。

アクティブな PPU アクティブな PPU または SPU を追跡管理するビューを設定します。これによ


または SPU を追跡 り、最後に停止した PPU/SPU、またはプロセス ビューでダブルクリックして
選択した PPU/SPU を確認できるようになります。この項目を選択すると、ビ
ューは PPU と SPU 間で切り替わります。

次のユニットに ビューを次に有効なユニットに切り替えます。
サイクル

ユニットの変更 有効なビューのリストを含む、[ユニットの変更] ダイアログボックスを表示し


ダイアログ ます。以下はその例です。

ユニットにロック 現在、SPU/PPU を追跡するよう設定されているユニットが、アクティブなス


レッドが変更されても切り替わらないようにします。

[ユニットの変更 (グローバル)] および [ユニットの変更 (全ビュー)] サブメニュー


この 2 つのサブメニューは、上述の [ユニットの変更] サブメニューと同一ですが、選択できる項目は、
現在のコンテナにあるすべてのビュー (全ビュー) とデバッガ内にあるすべてのビューに関するもの (グロ
ーバル) となります。また、[ユニットの変更] サブメニュー内でメニュー項目のロックを切り替えると、
個々のロック/ロック解除のメニュー項目に分けられます。

ユニットにビューをロック
[ユニットにロック] 切り替え機能を含む [ユニットの変更] メニューを使うと、ビューをある特定のユニ
ットに限定して、自動表示変更機能によって表示内容が変更されないようにロックすることができます。
ユニットにビューをロックするには、次の手順に従います。
(1) ロックしたいビューを選択します。
(2) 右クリックしてそのビューのショートカット メニューを呼び出し、[ユニットの変更] をクリックし
てから [ユニットにロック] をクリックします (Ctrl+Shift+Alt+L)。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 27 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

(3) ビューがロックされると、「Watch [PPU – ロック]」といったように、ビューのキャプションのユニ


ット名の終わりに「- ロック」と表示されます。ユニットの変更操作はすべて無視され、ビューは現
在のユニットに固定されたままになります。
(4) ビューのロックを解除するときは、[ユニットにロック] をもう一度クリックし、ロック状態をトグ
ルします。

ビューをサブビューに分割
既存ビューを分割するには、次の手順に従います。
(1) 分割したいビューを選択します。
(2) 右クリックでビューのショートカット メニューを表示し、[横に分割] または [縦に分割] を選択する
か、デバッガのツールバーから、[横に分割] または[縦に分割] ツールバー ボタンをクリックしま
す。

(3) ビューが横方向、または縦方向に分割され、新しくできたビューに、最初に選択したビューと同じ
ビュー タイプが割り当てられます。
(4) ここで、ショートカット メニューの [ビューの切り替え] オプションを使用して、新しく作成された
ビュー部分の中で必要なビューを示す必要があります。

デバッガのビュー分割バーの移動
分割ビューの分割バーは、移動してそれぞれのビューの配置スペースの割合を変えることができます。4
分割しているビューの交差部分の分割バーを移動したい方向に動かして、4 分割ビューの表示割合を一度
に変更することもできます。

フローティング&ドッキング ビュー
各ビューは、「フローティング モード」と「ドッキング モード」に切り替えることができます。
フローティング モードでは、デバッガのメイン ウィンドウ内でビューを移動させることができ、画面外
(別のモニタなど) に表示させることもできます。フローティング モードのウィンドウは、常に別のビュ
ーの手前に表示されます。
ドッキング モードでは、デバッガのメイン ウィンドウの左右にビューが固定されます。ビューのサイズ
を変更することはできますが、移動することはできません。
ビューをフローティング モードにするには、次の手順に従います。
(1) フローティングにしたいビューのタイトル バー内にあるフローティング ウィンドウ アイコン (左か
ら2 つ目) をクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 28 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

(2) タイトル バーをクリックし、グレーの枠線を目的の位置までドラッグします。


(3) 枠線は、別のビューの境界のドッキング可能な位置にスナップ (吸着) しますが、フローティング状
態にしておくこともできます。
(4) 別のビューへのスナップをオフにする場合は Ctrl キー、ビューの位置を拡張する場合は Shift キー
を使用します。
(5) フローティング ビューを、デバッガのウィンドウ内に戻すと、再度ドッキングさせることができま
す。

メニューとツールバーのカスタマイズ
このセクションでは、メニュー コマンドのテキストやメニュー アイコンの画像を含め、メニューとツー
ルバーのカスタマイズ方法を説明します。既存のメニュー コマンドは、移動することができ、新しいメ
ニューを作成することも可能です。
メニューやツールバーをカスタマイズするには、次の手順に従います。
(1) メニュー バーまたはツールバーを右クリックし、[カスタマイズ] を選択します。

(2) [ツール バー] タブでチェックボックスを選択/選択解除し、表示するツールバーを選択します。


(3) [コマンド] タブには、利用可能なメニュー コマンドがリスト表示されます。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 29 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

(4) メニューにコマンドを追加する場合は、カテゴリを選択し、このダイアログ ボックスからメニュー


名までコマンドをドラッグします。メニューが展開し、挿入ポイントが表示されます。
(5) メニューにサブメニューを追加する場合は、[新しいメニュー] カテゴリにリストされている [新しい
メニュー] コマンドを使用します。
(6) [ツール] タブでは、実行ファイルへの完全パス名、引数、初期ディレクトリと共に、有効な外部ツー
ルのリストを定義することができます。

(7) これらのツールへのショートカットが、[ツール] メニューに追加されます (詳細は、「[ツール] メニ


ュー」を参照)。

メニュー コマンドのカスタマイズ
[ユーザー設定] ダイアログ ボックスが開いている状態で、ツールバー上の既存メニューを右クリック
し、プロパティを表示します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 30 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

リセット コマンド名とボタン イメージを、デフォルト値にリセットする。

削除 メニューからコマンドを削除する。

プロパティ名 コマンド名を編集する。

ボタン イメージを元に戻す ボタン イメージを、デフォルトにリセットする。

ボタン イメージの編集 ボタンの画像を編集する (「ボタン エディタ」を参照)。

既定のスタイル コマンドをデフォルト形式で表示する。

テキストのみ コマンドのテキストのみを表示する。

イメージとテキストを表示 コマンドのアイコンとテキストを表示する。

グループの始まり 選択したコマンドの上に線を追加する。

ボタン エディタ

図 アイコンのビットマップ。

色の設定 16 色の基本パレット。クリックしてカーソルの色を決定する。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 31 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

消去 消しゴム ツール。

移動 アイコン全体を上下左右に移動する。

カラー ピッカー 48 色の拡張パレット。[作成した色の定義] オプションを使用し、カラー パレッ


トをユーザー定義することも可能。

プレビュー アイコンのプレビュー。

ツール ペン、塗りつぶし、色の選択、線、四角形、楕円、すべてクリア、およびアイコ
ンをディスクからインポートするための参照オプションが用意されているツール
ボックス。

環境設定

キーボードの設定
デバッガでは、キーボード設定を再利用可能な「キーボード マップ」として保存できます。たとえば、
デバッガのデフォルト キーボード設定の代わりに Microsoft の Visual Studio のキーボード マッピングを
使用したいような場合があります。このような場合には、システムのデフォルト マッピング (ProDG デ
バッガ) の代わりに任意のマッピングにショートカット コマンドを再定義できます。その後、オプション
ダイアログのドロップダウン リストボックスから [キーボード マッピング スキーム] を選択することで代
わりのキーボードと切り替えができます。このセクションでは、デバッガのキーボード設定のカスタマイ
ズおよびそれをキーボード マップとして保存する方法を説明します。
デバッガのキーボード設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで [オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側にあるメニューから、[キーボード] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 32 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

キーボード マッピ 現在のキーボード マップの名前を表示します。システムのデフォルト キーボ


ング スキーム ード マッピングは「ProDG デバッガ」です。

別名で保存 現在のキーボード設定を他の名前で保存します。新スキーム名入力ダイアログ
に適応するキーボード マップ (Visual Studio など) が表示されます。

削除 選択したキーボード マップを削除します (システムのデフォルト マップ


「ProDG デバッガ」は削除できません)。

ビュー タイプ 利用可能なすべてのビュー タイプおよびデバッガ アプリケーションでショー


トカット コマンドを定義できるアプリケーションのリストを表示します。

ショートカット 選択したビュー タイプで利用可能なショートカット コマンドを表示します。


コマンド

説明 選択したショートカット コマンドについての簡単な説明を表示します。

ショートカット 新しいショートカット コマンドを定義するとき、キーストロークを入力する


キーを押す 前にこのボックスをクリックします。

割り当て ここをクリックして選択したショートカット コマンドに対して直前に入力さ


れたキーストロークを割り当てます。そのコマンドのショートカットは即座に
[ショートカット コマンド] リストに更新されます。

クリア ここをクリックして選択したショートカット コマンドに対して直前に入力さ


れたキーストロークを削除します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 33 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

表示の設定
デバッガの表示設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[表示] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

浮動小数点設定

精度 (幅) この設定を調節して、ウォッチ/ローカル ビュー、メモリ ビュー、レジスタ ビュー


に表示される浮動小数点値の精度を高くまたは低くします。有効な値は 8 ~ 15 で
す。

有効な桁 表示する有効な桁数を設定します。32 ビットの浮動小数点では、6 に設定すると、ほ


ぼすべての精度が表示されます。

表示形式 SMART、ENG (エンジニアリング フォーマット)、SCI (科学フォーマット)、


NO_EXP (指数なし) のいずれかを選択。

SMART = フィールドの長さから、浮動小数点の数値の表示方法を推測。
ENG = 10^3 の倍数に最も近い値で表現 (例:0.1 は「100e-03」と表現) する以外は
SCI と同じ。
SCI = 科学的表記 (例:「<S1>#.######e<S2>##」の場合、<S1> は仮数、<S2> は指
数)。
NO_EXP = 浮動小数点を完全に表示 (フィールドの長さが十分な場合)。

デフォルトの基数表示

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 34 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

16進数/10進数 与えられた値が 16 進法と 10 進法のどちらを想定すべきか指定します。

自動保存設定

ロード時に保存/ 実行ファイルがターゲットにロードされるたびに設定を保存します。
リセットとリロード

保存間隔 n 分毎に設定を保存します。

autoexp.dat の 追加「autoexp.dat」ファイルの指定を可能にします (「変数の自動展開」


カスタム化 を参照)。このファイルはデバッガが起動されるたびにロードされます。
このオプションは、コマンドライン スイッチからも指定可能です (「デバ
ッガのコマンドライン構文」を参照) 。

オートコンプリート設定
このセクションでは、デバッガでの自動入力を制御するための各種設定について説明します。
デバッガのオートコンプリート設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[オートコンプリート] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

最も近い推測を選択 デバッガに式を入力 ([アドレスに移動]、[ウォッチに追加] など) する際、オ


肢として加える ートコンプリート機能により、ユーザーが入力中のデータに一致するシンボ
ルのリストが表示されます。この「ベストな推測」機能では、入力している
文字が、最初の一致項目と結合されます。
例:「ma」と入力すると、最初に一致項目として検出されたシンボルが
「main」の場合、選択項目として「in」が追加されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 35 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

このオプションを選択解除すると、この「ベストな推測」機能がオフになり
ます。一致するシンボルのリストは表示されますが、入力中のデータには何
も追加されません。

選択がプリセットさ このオプションを選択すると、オートコンプリート機能では、履歴キャッシ
れていない場合のみ ュ内の以前入力されたアイテムに対するマッチングを行わず、またドロップ
履歴を表示する ダウン リストにもこれらを含みません。

履歴のみを対象とし このオプションを選択すると、シンボル検索が実行されないため、get 式ダ
比較する イアログに入力されたテキスト ([アドレスに移動] など) に対しては、以前に
入力されたテキストのみが適用されます。

カーソル位置のテキ このラジオボタンを選択すると、テキスト入力が必要なダイアログ ([アドレ


ストをデフォルトと スに移動] やテキスト検索など) は、デフォルトでソース ビューのキャレッ
する ト記号 (^) の位置にあるテキストとなります。選択解除すると、その前のエ
ントリが表示されます。

クリップボード設定
切り取り&貼り付け操作で使用されるクリップボードの形式をカスタマイズするには、次の手順に従いま
す。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[クリップボード] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

テキストと画像 テキストおよび画像 (ビットマップ) の両情報をクリップボードに追


加します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 36 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

テキストのみ テキスト情報のみをクリップボードに追加します。

画像のみ 画像情報のみをクリップボードに追加します。

ワークスペース設定
ワークスペース ビューの設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[ワークスペース] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

存在する チェックマークをオンにした場合、ファイル ビューを初めて展開したときにフ


ファイルの ァイルが存在するかどうかチェックします。デフォルトではチェックしません。
チェック

存在しない チェックマークをオンにした場合、見つからないファイルは薄い色で表示されま
ファイルを表示 す。チェックマークをオフにした場合、見つからないファイルはツリーに追加さ
れません。

ファイル内の チェックマークをオンにした場合、ファイル ビューに関数がサブアイテムとし


関数を表示 て 追加されます。

ファイル名の このオプションを選択した場合、ワークスペース ビューでは、SELF ファイルに


大文字小文字を 保存されているファイル名の大文字と小文字が区別して表示されます。これによ
維持 り、Linux で作成された、大文字と小文字を区別したファイル名に対応すること
(すぐに有効) ができます。選択しない場合 (デフォルト)、ファイル名はすべて小文字で表示さ
れます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 37 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

ファイル タブに [ファイル ビュー] タブに関数の完全修飾名を表示します。


関数の完全修飾
名を表示

履歴設定
ダイアログ履歴設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[履歴] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

履歴の最大エントリ数 各履歴リストに可能なエントリの数を指定します。最大値は50です。

最も最近使用した 最近使った (ソースまたは実行ファイル) ファイルのリストに表示される


ファイルの最大 ファイルの数を指定します。
エントリ数

メモ:履歴の設定変更はデバッガが再度ロードされるまで有効になりません。

ソース設定
このセクションでは、ソースおよび逆アセンブリ ビューにそれぞれ特有の設定をカスタマイズする方法
を説明します。新しいソースおよび逆アセンブリ ビューの設定変更はビューごとにその設定が変更され
るまで有効です。
ソース ビューと逆アセンブリ ビューの設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[ソース] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 38 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

ソース ビューのデフォルト

ファイルのタブを チェックマークをオンにした場合、デフォルトとして新規ソース ビューにフ


常に表示 ァイル タブが表示されます。既存のビューには影響は及びません。

EUC-JP モード このチェックボックスをオンにすると、現在のエンコーディング メソッド検


出 (ShiftJIS または デフォルトの UTF8) が無効にされ、EUC (Extended Unix
Code) エンコーディングが有効になります。

ShiftJISモード このチェックボックスをオンにすると、現在のエンコーディング メソッド検


出 (EUC-JP またはデフォルトの UTF8) が無効にされ、ShiftJIS エンコーディン
グが有効になります。

行番号を表示 このチェックボックスをオンにすると、ソース ファイルの各行に対して行番


号が表示されます。

PCをトラック このチェックボックスをオンにすると、逆アセンブリ ビューのプログラム カ


する ウンタの場所が自動的に追跡されます。

インジケータの マージン インジケータを表示します。


マージンを表示

開くソース ソース ビューで開くことができるソース ファイルの最大数を指定します。こ


ファイルの最大数 の最大数に達した場合は、最も以前に使用したファイルが破棄され、新しいフ
ァイル用のスペースが確保されます。

外部エディタ

SN Integration 選択された場合は、SN 統合環境エディタを使用します。SN 統合環境では、

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 39 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

(VSIなど) 適切なバージョンのエディタを呼び出すためにカスタム プロトコルを使用す


るため、このオプションを使用するには必ず SN 統合環境 (Visual Studio 統合
環境など) がインストールされていなければなりません。

Microsoft Visual 選択した場合、Microsoft Visual Studio 7.1 エディタを使用します。このオプ


Studio ションは、SN Visual Studio 統合環境 をインストールせずに Visual Studio エ
ディタを使用している場合に使用されます。

カスタム このラジオ ボタンを選択しておくと、外部エディタ プログラム名およびコマ


ンドライン引数を入力できます。ソース ファイル名引数には %f を使用しま
す。行数引数には %l、列数引数には %c を使用します。エディタでサポート
されている場合、デバッガ ソース ビューの位置と同じ設定のカーソルでファ
イルを開くことができます。以下の「DDEを使用」も参照してください。

DDEを使用 チェックされている場合、DDEをサポートしているカスタム エディタ アプリ


ケーションでDDE サーバーを使用できます。DDE サーバー名はエディット ボ
ックス (デフォルトは「Visual Studio.7.1」) で指定されます。

列のオフセット カスタム外部エディタの列位置にオフセットを追加します。

行のオフセット カスタム外部エディタの行位置にオフセットを追加します。

列の値でタブを チェックされている場合、タブには カスタム 外部エディタのタブ サイズ (上


展開 部参照) で指定した文字数が含まれます。デフォルト値は 1 文字です。

タブ サイズ

タブ サイズ ソース ファイルがタブ文字を持つ場合にソース ビューで表示されるスペース


数を指定します。

逆アセンブリのデフォルト

ソース コードを 逆アセンブリ (ミックス モード) に加え、逆アセンブリのブロックに対応する


表示 ソース コード ラインを表示します。

コードのバイト数 チェックされている場合、表示されているリストの 2 行目にある 16 進数のオ


を表示 ペコードを表示します。

レジスタを色分け 異なるカラーのレジスタを表示します。
する

ソースの ステップ シングル ステップ操作を可能にします。


を強制

命令のヘルプ 選択されていると、チップ ビューに、カーソルの下にある命令の説明が表示


されます (「命令のヘルプ」および「逆アセンブリ サブメニュー」を参照)。

ステップ

ソース ファイルが これが選択されていると、ソース ファイルが利用できないとき、逆アセンブ


ない場合は逆アセ リに対してステッピングが実施されます。
ンブリにステップ

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 40 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

VSI 設定
このダイアログでは、SELF ファイルのロード時に Visual Studio からソース ファイルをインポートする
かどうかを指定できます。
VSI 設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで [オプション] をクリックして[オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[VSI] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

読み込み中アドレス これを選択しておくと、ELF を VSI からロードするとき、アドレス ブレ


ブレークポイントを ークポイントは削除されないため、ロード間でアドレス ブレークポイン
削除しない トが維持されます。
注意:挿入によりコードが大幅に変更される場合、元のブレークポ
イント アドレスには異なるコードが含まれるようになります。

ロード時に Visual これが選択されていると、最近使用された PPU ソース ビューで現在開い


Studio からソース ているファイルが VSI からの SELF ロード時にクリアされ、Visual Studio
ファイルをインポート ソース ファイルが ProDG で開かれます。
する

開くソース ファイルの [ロード時に Visual Studio からソース ファイルをインポートする] が選


最大数 択されている場合に、ProDG で開かれる Visual Studio ソース ファイル
の最大数を指定します。

フォントと色設定
このセクションでは、個別ビューおよびウィンドウ グループでフォントと色をカスタマイズする方法を
説明します。たとえば、ソース ビューの構文の配色を設定します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 41 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

フォントと色をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[フォントと色] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

設定の表示 設定するビューまたはウィンドウ グループを選択します。

ペインのリセット (現在このオプションは使用不可)

インポート Visual Studio の設定に一致する、各種のカラー設定をインポートします。


このボタンは、ProDG Visual Studio Integration (VSI) のインターフェイスか
らデバッガを起動した場合にのみ有効になります。

コンポーネントの [設定の表示] リストボックスで選択したビューまたはウィンドウ グループの


タイプ 種別に従って、このスクロール リストボックスの値がそのビューに適応する
設定に変更されます。

アイテムの背景 選択した項目の背景色を設定します。基本 16 色パレットから選択するか、


または横の [カスタム] ボタンをクリックしてカスタム カラーを設定しま
す。

アイテムの前景 選択した項目の前景色を設定します。基本 16 色パレットから選択するか、


または横の [カスタム] ボタンをクリックしてカスタム カラーを設定しま
す。

フォント 選択した項目の表示フォントを選びます。

太字 チェックされている場合、フォントは太字で表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 42 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

サイズ 選択したフォントのポイント サイズを選びます。

プロジェクト設定

プロジェクトのオプション
プロジェクトのオプションを設定するには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[プロジェクトのオプション] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

開始時に前の 起動時に最も最近使用したプロジェクトをリロードします。チェックされて
プロジェクトを いない場合は、プロジェクト ファイルはロードされません。
リロード

プロジェクト単位の ウィンドウ レイアウト情報はプロジェクト ファイルに保存されます。チェ


レイアウト ックされていない場合、単一ウィンドウ レイアウトがグローバル設定ファイ
ルに保存され、各プロジェクトは同じ情報を使用します。

ターゲットを チェックされている場合、プロジェクトの各モジュールに異なるターゲット
モジュールに の関連付けができます。チェックされていない場合、すべてのモジュールは
関連付ける 同じターゲットを使用します。

プロジェクトの それぞれのプロジェクトには、リセット & リロード が選択されているとき


ロード時にアクティ にロードされる「アクティブ モジュール」があります。
ブなモジュールを自 チェックされている場合、プロジェクトをロードする際に、このオプション
動的にロード で自動的にアクティブ モジュールをターゲットにロードします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 43 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

新しいモジュールの 選択した場合は、ターゲットの状態が変化 (停止やシングル ステップなど)


検索を有効化 するたびにモジュール スキャンが実行され、ターゲットのメモリ上の SELF
を検出します。検出された場合、デバッガはシンボルを自動的にロードしま
す (SPU 検索パスまたはプロジェクト リストを使ってシンボルが見つかる場
合)。
選択しない場合は、SELF がターゲットにロードされるとき、このモジュー
ル スキャンが実施されます。この機能を無効にすると、ステッピングの速度
が向上する場合があります。

プロジェクトの変更 有効な場合、以下のタイミングでモジュール スキャンが実行されます。


時に新しいモジュー - SELF モジュールのプロジェクトへの追加・削除
ルを検索 - アクティブなモジュールが変更された場合
この機能を有効にすることにより、複数のモジュール/ターゲットのデバッ
グが容易になります ([ターゲットをモジュールに関連付ける] オプションと
併用した場合)。
このオプションでは、上記の [新しいモジュールの検索を有効化] オプション
の設定が無視されます。

スイッチ時にプロジ 切り替え前にプロジェクトを保存するまたは破棄するかを決める、または実
ェクトを保存 行前にプロンプトを表示するかを決定します。

ターゲットのサイレ ターゲットを自動切り替えするかどうか、または実行前にプロンプトを表示
ントスイッチを許可 するかを決定します。

暗黙的な -m スイッ このスイッチが有効化されると、デフォルトではデバッガの新しいインスタ


チで複数のデバッガ ンスを起動するためのその後の読み込みを強制します。「デバッガのコマン
インスタンスを有効 ドライン構文」を参照してください。
にする

パスのマッピング
デバッガでファイルが見つからない場合は、ファイル パスの最初の部分がユーザー指定のパスに変更さ
れます。このセクションでは、このユーザー指定のパスを設定する方法を説明します。
別のファイル パスを設定するには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[パス マッピング] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 44 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

(4) 変更する検索パスの種類を [検索パス] ドロップダウン リストから選択します。


(5) [ディレクトリ] セクションと参照ボタンを使用し、適切な検索パスを指定します。
(6) ツール バーの [パスのチェック] を使用して [置換後のパス] フィールドが有効なパスになることを確
認します。
(7) 無効なパスが検出された場合、以下のようなエラー メッセージが表示されます。

ソース検索パスのリストから無効なパスを削除するには [はい] をクリック、該当パスおよび後続の


無効パスを削除するには [すべて削除 (Yes to All)] をクリック、リスト内に該当パスを残す場合は
[いいえ] または [キャンセル] をクリックします。
(8) ツール バーの [パスの追加] ボタンをクリックし、パス名を入力または参照ボタン […] でディレクト
リを指定して、マッピングを追加することもできます。
(9) パスのマッピング リストからディレクトリを削除する場合は、対象のディレクトリを選択し、ツー
ル バーの [パスの削除] ボタンをクリックします。
Ctrl キーや Shift キーを押しながらクリックすると、複数のディレクトリを選択することができま
す。
(10) パス マッピング リストをクリアするには、[すべてのパスを削除] (Shift+Delete) ツールバー ボタン
をクリックし、確認ダイアログで [はい] をクリックします。
(11) パス マッピング リストのディレクトリの順番は、ツール バーの上下矢印ボタンをクリックして変更
できます。選択したマッピングを上位に移動する場合は上矢印、下位に移動する場合は下矢印をク
リックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 45 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

検索ディレクトリ
検索パス ディレクトリを設定するには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[検索ディレクトリ] オプション グループを選択します。
[オプション] ダイアログが表示されます。

(3) [検索パス] ドロップダウン リストを使用し、設定する検索パスの種類を選択します。


(4) [ディレクトリ] セクションと参照ボタンを使用し、適切な検索パスを指定します。[サブディレクト
リの追加] ツールバー ボタンは、選択したディレクトリのサブディレクトリを一括ですべて追加しま
す。既に追加されているパス (反転表示されている) を選択し、[サブディレクトリの追加] アイコン
をクリックします。[サブディレクトリの追加] ダイアログが表示されます。

(5) [はい] をクリックして、ソース検索パス用に選択されたディレクトリのすべてのサブディレクトリを


追加します。または、[いいえ] をクリックしてキャンセルします。
(6) [ELF ファイルを含むサブディレクトリの追加] ツールバー ボタンは、[サブディレクトリの追加] ボ
タンと同様に機能しますが、ELF ファイルが含まれるサブディレクトリのみが追加されます。
(7) この 2 つの [サブディレクトリの追加] 制御は、[サブディレクトリの追加] 機能に関する利便性を上
げるために用意されています。[最大フォルダ階層] では、サブディレクトリの最大階層が制御さ
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 46 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

れ、[レベルごとの最大エントリ] では、任意のサブディレクトリ レベルに追加される、エントリの


最大数が制御されます。
(8) [パスのチェック] ツールバー ボタンは指定パスが有効かどうか確認します。無効なパスが検出され
た場合は次のようなエラー メッセージが表示されます。

(9) ソース検索パスのリストから無効なパスを削除するには [Yes] をクリック、該当パスおよび後続の無


効パスを削除するには [Yes to All] をクリック、リスト内に該当パスを残す場合は [No] または
[Cancel] をクリックします。
(10) [パスの追加(挿入)] ツールバー ボタンをクリックし、パス名を入力する、または隣接するブラウズボ
タンからディレクトリの位置を指定して検索パスに選択したディレクトリを追加できます。
パスの最後にアスタリスクを付けることは、そのパスが再帰的に検索されること、すなわちすべて
のサブフォルダも自動的に検索に含まれることを意味します。たとえば、'C:\game\*' は、 C:\game
およびそのすべてのサブフォルダを再帰的に検索します。
(11) ソース検索パス リストからディレクトリを削除するには、ディレクトリを選択し、[パスの削除(削
除)]ツールバー ボタンをクリックします。
(12) Ctrl キーや Shift キーを押しながらクリックすると、複数のディレクトリを選択することができま
す。
(13) パス マッピング リストをクリアするには、[すべてのパスを削除] (Shift+Delete) ツールバー ボタン
をクリックし、確認ダイアログで [はい] をクリックします。
(14) 検索パスのディレクトリ順序は、矢印ツールバー ボタンの上/下をクリックして変更できます。選択
したディレクトリを上位にするには、上矢印をクリック、下位にするには、下矢印をクリックしま
す。
[ツール] ダイアログや [オプション] ダイアログに加え、プロジェクト内の個別 ELF に対する検索パスを
設定することもできます。
プロジェクト内の個別 ELF に検索パスを設定するには、次の手順に従います。
(1) ワークスペース ビューのプロジェクト ページで ELF を右クリックし、[プロパティ] を選択します。
この操作により、選択した ELF に対する各種オプション (ロード オプション、ターゲット、リセッ
トパラメータ、検索ディレクトリ) を含む [プロパティ] ダイアログが表示されます。
(2) ダイアログの左側にあるリストから [検索ディレクトリ] を選択します。右側に [検索ディレクトリ]
ページが表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 47 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

(3) ここでは、SPU ELF ファイルなど、包括的な検索ディレクトリが設定できます。これは、異なる場


所からシンボルをロードしなければならないコードの複数ビルドがある場合 (デバッグ用ビルドやリ
リース用ビルドなど) に便利です。
これで、個別 SPU ELF に検索ディレクトリを設定できるようになります。ここでは曖昧性 (同じ名前の
ELF ファイルが異なるディレクトリにある場合など) を回避できます。ただし、設定にかかる時間はより
長くなります。
個別 SPU ELFに検索パスを設定するには、次の手順に従います。
(1) [ワークスペース] ビューの [プロジェクト] ページで ELF を右クリックし、[サブアイテムの追加] を
選択します。

(2) メインの PPU ELF でロードする SPU ELF を指定します。


© SCEI ProDG Debugger for PlayStation®3 v470.1
- 48 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

指定した SPU ELF が、PPU ELF の子としてグレーで表示されます。

(3) プロパティ ページでは、この ELF (およびそのデバッグに使用するモジュール) で使用するソースと


モジュールの検索パスを指定できます。

例:
メインの PPU ELF が「C:\Game」にあり、「C:\Game\Loader\Module1」および
「C:\Game\Loader\Module2」から SPU モジュールをロードする SPU ELF が「C:\Game\Loader」に
あるケースを想定します。
上記ケースでデバッグするには、次の手順に従います。
(1) プロジェクトにメインの PPU ELF を追加します。
(2) SPU ELF をサブアイテムとして追加します。
(3) このサブアイテムを右クリックし、ショートカット メニューから [プロパティ] を選択します。
(4) 上記の 2 つのモジュール フォルダを [Module Search Path] エントリに追加します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 49 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

以上で、デバッグ時にデバッガが SPU モジュールを検索し、検出されるとそれらのモジュールに対して


適切なシンボルがロードされます。
libsn.a とリンクする際、PPU PRX ファイルと SPU ELF の検索ディレクトリも実行時に追加できます。詳
細は、「付録 C: libsn.a」を参照してください。
検索パスのディレクトリを表示するには、次の手順に従います。
• [ウィンドウ コントロール] ツール バーの [検索パスと検索されたファイルを表示] ボタンをクリック
します。
以下のような [検索ディレクトリ] ダイアログが表示されます。

ステップ制御
デバッガの「制限ステップ」機能では、シングル ステップ実行中に関数コールを無視するための方法が 2
種類提供されます。
フォルダ レベルでの制御
フォルダのリストを指定することにより、該当フォルダ内に存在するソース ファイルのすべてが「制限
ステップイン」の処理中に無視され、代わりにステップ オーバー処理が実行されます。
制限ステップ コマンドで使用されるフォルダ リストを設定するには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから[ステップ制御] オプション グループを選択します。
[オプション] ダイアログが表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 50 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

[ディレクトリ] セクションの参照ボタンを使用し、目的の検索パスを指定します。
(3) [サブディレクトリの追加] ツールバー ボタンは、選択したディレクトリのサブディレクトリを一括
ですべて追加します。既に追加されているパス (反転表示されている) を選択し、[サブディレクトリ
の追加] アイコンをクリックします。[サブディレクトリの追加] ダイアログが表示されます。

(4) [はい] をクリックして、ソース検索パス用に選択されたディレクトリのすべてのサブディレクトリを


追加します。または、[いいえ] をクリックしてキャンセルします。
(5) [ELF ファイルを含むサブディレクトリの追加] ツールバー ボタンは、[サブディレクトリの追加] ボ
タンと同様に機能しますが、ELF ファイルが含まれるサブディレクトリのみが追加されます。
(6) この 2 つの [サブディレクトリの追加] 制御は、[サブディレクトリの追加] 機能に関する利便性を上
げるために用意されています。[最大フォルダ階層] では、サブディレクトリの最大階層が制御さ
れ、[レベルごとの最大エントリ] では、任意のサブディレクトリ レベルに追加される、エントリの
最大数が制御されます。
(7) [パスの追加 (挿入)] ツールバー ボタンをクリックし、パス名を入力する、または隣接するブラウズ
ボタンからディレクトリの位置を指定して検索パスに選択したディレクトリを追加できます。
パスの最後にアスタリスクを付けることは、そのパスが再帰的に検索されること、すなわちすべて
のサブフォルダも自動的に検索に含まれることを意味します。たとえば、'C:\game\*' は、 C:\game
およびそのすべてのサブフォルダを再帰的に検索します。
(8) ソース検索パス リストからディレクトリを削除するには、ディレクトリを選択し、[パスの削除] ツ
ールバー ボタンをクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 51 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

(9) 検索パスのディレクトリ順序は、矢印ツールバー ボタンの上/下をクリックして変更できます。選択


したディレクトリを上位にするには、上矢印をクリック、下位にするには、下矢印をクリックしま
す。
関数レベルでの制御
グループ関数や個別関数が、「制限ステップイン」の処理中に無視されます。無視される関数に関するル
ールは、正規表現を使用して定義できます。詳細は、「正規表現」を参照してください。
各ルールには、整数値プライオリティ (0-100) とステップ実行修飾子が付属します。

プライオリティ 正規表現 ステップ実行修飾子

10 psgl.* ステップ インなし

プライオリティ フィールドでは、ルールが評価される順番が示されるだけでなく、ルールに対する例外
も定義できます - プライオリティ値が大きいほど、優先度が高くなります。これらの値は任意的なもの
であり、ルール間の比較のみに使用されます。
ステップ実行修飾子では、正規表現に適合する関数にステップ インするか、しないかが指定されます。
リスト内の各ルールは、チェックボックスによって制御されます。無効に設定/無視するルールのチェッ
クボックスをオフにすると、ステップ実行処理の際にこれらが無効となります。

10 psgl.* ステップ インなし
「psgl」で始まるすべての関数にステップ インしないことが指定されます。
10 .*operator.* ステップ インなし
20 .*operator new.* ステップ インする
最初のルールでは、「operator」オーバーライドにはステップ インしないことが指定されます。
2 番目のルールでは、「operator new」にステップ インすることが指定されます。
2 番目のルールの方が最初のルールよりもプライオリティが高いことに注意してください。これはこうし
ない場合、最初のルールが初めに評価されて「operator new」が認識されることにより、ステップ イン
が実行されなくなるためです。
10 FW.* ステップ インなし
20 FWWindow\:\: ステップ インする
20 FWCellGLWindow\:\: ステップ インする
最初のルールは、「FW」で始まる関数にはステップ インしないことを表します。これにより、
「FWrite」と「FWApplication::Init()」などのクラス メソッドが対象となります。
他の 2 つの方が優先されるので、「FWWindow::」または「FWCellGLWindow::」で始まる関数は、最初
のルールに関わらず、ステップ インされることが指定されます。
正規表現ルールは、グローバルおよび/またはモジュール限定ベースで定義でき、それぞれ [オプション]
ダイアログまたは [モジュールのプロパティ] ダイアログで設定できます。
[オプション] ダイアログと [モジュールのプロパティ] ダイアログにある [式の追加] ツールバー ボタンで
は、「ステップ インしない」ルール リストに正規表現が追加できます。
[新しいステップ コントロール表現] ダイアログでは、[プライオリティ]、[正規表現]、[ステップ インす
る/ステップ インなし] ルールが設定できます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 52 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

[正規表現] フィールドのとなりにあるボタンをクリックすると、一般的な正規表現コマンドが表示されま
す。このリストからアイテムを選択すると、式制御内の現在のカーソル位置にコマンドが追加されます。
正規表現の構文を確認後 [OK] をクリックしてダイアログを閉じると、ステップ制御ルール リストに新し
い式が追加されます。
制限ステップ コマンドで無視される関数のリストを指定するには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[ステップ制御] オプション グループを選択します。
[オプション] ダイアログが表示されます。

(3) [式を追加] ツールバー ボタンをクリックし、[ステップ インしない] ルール リストに正規表現を追加


します。
(4) 必要に応じ、ステップ インする/ステップ インしない正規表現のチェックボックスをオンまたはオ
フにします。
(5) [OK] をクリックします。

メモ:[インポート] ボタンをクリックすると、テキスト ファイルから正規表現ルールをインポートす


ることができます。ファイルは以下のフォーマットに従う必要があり、ルールの各フィールドはスペ
ースで区切ります。

[実行制御]

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 53 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

10 FW.* No Step Into


20 FWWindow\:\: Step Into
20 FWCellGLWindow\:\: Step Into

「ステップ インしない」ルールはコマンドラインからもインポートできます - 詳細は「デバッガの


コマンドライン」を参照してください。

PS3 設定

PPU デバッギング設定
PPU デバッギング設定を行うには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[PPU デバッギング] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

PPU オプション

デフォルトの スレッドの優先度は、PPU スレッドのデフォルト優先順位を決定するもので


スレッド優先順位 す (詳細は『LV2 Users Manual』を参照)。使用できる値の範囲は 0-3071 です
(0 が最優先)。

64 ビットの 選択すると、64 ビットのポインタが使用されます。


ポインタを使用 メモ:このオプションは、SDK 060 およびそれ以前のバージョンのみで使
用します。

生成された PPU プロセスのオプション

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 54 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

実行 生成後直ちに、PPU プロセスの実行を開始します。この設定は、main() で停
止するデフォルト設定より優先されます。

main で停止 生成した PPU プロセスの実行を開始し、main() で停止します。

コールスタック

コールスタックの コールスタック ビューのビヘイビアが変更され、各レベルのスタックに対す


リンク レジスタを るリンク レジスタの値をポイントするのではなく、先行する命令をポイント
調整する するように調整することが可能となります。詳細は、「コールスタック ビュ
ー」を参照してください。

ファイバ

ファイバサポート ファイバ デバッギングを有効にします。詳細は、「ファイバのデバッグ」を


を有効にする 参照してください。

SPU デバッギング設定
SPU デバッギング設定を行うには、次の手順に従います。
(1) [ツール] メニューで [オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[SPU デバッギング] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

SPU オプション

実行 SPU にロードされた実行可能モジュールを、ファイルがロードされると
同時に実行開始します。この設定は、main() で停止するデフォルト設定

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 55 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

より優先されます。

mainで停止 SPU にロードされた実行可能モジュールを実行開始し、main() で停止し


ます。

ELF パスの再帰的 SPU デフォルトで、デバッガでは SPU モジュールを検出するため、ELF パス


検索を無効化 を再帰的に検索します。パス (およびサブフォルダ) に多くのファイルが
含まれると検索時間が膨大になるため、この機能を無効にしたい場合に
これを使用します。再帰的検索パスは、[検索ディレクトリ] オプション
ページでワイルドカード「*」を使用することにより、引き続き手動で入
力することが可能です。

SPURS デバッグ オプション

実行 以前に設定したソース ライン ブレークポイントに到達するまで、ジョ


ブは停止されません。

entry point で停止 _start ラベルで、ジョブの実行を停止します。

dispatch で停止 GDB_JOB_DISPATCH ラベルで、ジョブの実行を停止します。

main で停止 CellSpursJobMain or CellSpursJobMain2 ラベルで、ジョブの実行を停


止します。

埋め込まれたシンボルが デフォルトでは、埋め込まれた SPU ELF ファイルのデバッグ情報を読


読み込まれるのを待機 (無 み込むと、ProDG Debugger はデバッグ情報の読み込みが終わるまで
効化するとグローバル ブ 待機します。
レークポイントの実行が このため、SPU ELF ファイルがたくさんあると、これに時間がかかり
停止することがあります) ます。
このオプションの選択を解除すると、デバッガでの埋め込み SPU ELF
ファイルのデバッグ情報のバックグラウンド ロードが実行されます。
しかし、ソースレベルのグローバル ブレークポイントは、SPU デバッ
グ情報が利用できることに依存しているため、デバッグ情報が利用で
きる前に SELF がこのロケーションをヒットしてしまうと動作しないこ
とがありますので注意が必要です。

ブルートフォース検索パ SPU 検索パス フォルダは自動的に SPU ELF ファイルの変更内容 (また


スの更新 (v3.3 以前、 は新規ファイル) をモニターします。しかし、一部の SAMBA 共有 (お
Samba 経由でフォルダを よび外部 USB 格納デバイス) は、このファイル モニタリング機能をサ
共有している場合) ポートしていません。
SPU ELF ファイルが再ビルドされているとき SPU デバッグが動作を止
めてしまったことに気づいた場合には、このオプションを選択する
と、main の PPU SELF がロードされるたびにデバッガでの検索パス フ
ォルダの手動スキャンを強制します。

リセット オプション
リセット オプションを設定するには、次の手順に従います。
(1) [ツール] メニューで [オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[リセット パラメータ] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 56 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガのカスタマイズ

(4) ここでは、ラジオボタンを使用して [リセットの種類]、[ブート パラメータ]、[システム パラメータ]


を設定できます。パラメータ設定は、直ちに [ビットフィールド] 値に反映されます。チェックボッ
クスは、マスク値の設定に使用します。値の隣のチェックボックスをオフにすると、ターゲットの
現在の設定が保持されます。

メモ:[リセット] 型パラメータは、[ビットフィールド] 値または [マスク] のいずれのフィールドにも


反映されません。
(5) [デフォルトに戻す] ボタンでは、リセット パラメータがそれぞれのデフォルト値に設定されます。
[ターゲットから値を取得] ボタンでは、選択したターゲットからリセット パラメータがインポート
されます。

デバッガ構成の保存
ウィンドウの位置と設定はすべて、デバッガ構成ファイル (PS3DebuggerConfig.xml) に自動的に保存さ
れます。
デバッガの起動時、以下のディレクトリからデバッガ設定ファイルが検索され、設定が復元されます。
(1) 現在の実行ディレクトリ、または
(2) デバッガの実行ファイル (PS3Debugger.exe) があるディレクトリ
デバッガ構成ファイルが見つからなかった場合は、組み込みのデフォルト設定で開きます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 57 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

4: ゲームのビルドおよびロード
この章では、開発ハードウェア上でゲームを実行するステップについて説明します。
この章には、以下のセクションがあります。
• デバッグ用ビルド
• ターゲットへの接続
• 実行ファイルの読み込みと実行
• ゲームの実行
• オブジェクト モジュールのロード
• コア ダンプ ファイルのロード
• PRX のデバッグ
• MSELF サポート

デバッグ用ビルド
デバッガでプログラムを使用するには、以下を行います。
• コンパイラの最適化を解除
• デバッグ情報を生成
最適化の解除およびデバッグ情報の生成は、VSI プロジェクトのプロパティを設定することによって可能
です。Visual Studio Integration には、設定を適切に行うためのプロジェクト ウィザードが用意されてい
ます。Visual Studio を使用していない場合は、makefile 内で変数を設定することにより、プログラムを
デバッグ用に設定することができます。
VSI プロジェクトのプロパティをデバッグ用に設定するには、次の手順に従います。
(1) Visual Studio のソリューション エクスプローラで、プロジェクトをクリックして選択します。
(2) [ProDG VSI] ツールバーの [ProDG VSI プロジェクトのプロパティ] をクリックします。
(3) [ProDG VSI プロジェクトのプロパティ] ダイアログ ボックスで、以下の操作を実行します。
(4) [ C/C++] フォルダを展開して [全般] セクションをクリックし、[デバッグ情報を生成する] を[はい]
に設定します。
(5) [最適化] セクションをクリックし、[最適化レベル] を「最適化しない (-O0)」に設定します。
ProDG デバッガを使用する場合は、Target Manager でターゲット ハードウェアを設定し、適切なターゲ
ット タイプと SDK バージョンを選択します。

ソース コードのコンパイル (raw モード SPU サポート)


raw モード SPU デバッギングを有効にするには、libsn.a とリンクをとり、libsn.h を含め、初期段階ま
たは始めからなるべく早い時期に main() 内の snInit () をコールすることが必要です。リンカ VSI プロジ
ェクト プロパティを設定すれば、libsn.a とのリンクが行えます。詳細はUser Guide to ProDG for
PlayStation®3 Visual Studio Integration を参照してください。
また、ロード済みモジュールに対するソース コードの場所をデバッガで特定するには、SPU モジュール
検索パスも設定する必要があります。
デバッガは実際の SPU の変化を自動的に検出できないので、実際の SPU の状態が変化した場合にはいつ
でもヘルプ機能をコールしてください。これらの変更箇所は以下のように記録されます。
(1) raw SPU が作成された時:
sys_raw_spu_create (&id, NULL);
snRawSPUNotifyCreation (id);
(2) raw SPU 用のコードがロードされた後:

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 58 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

sys_raw_spu_load (id, "filename", &entry);


snRawSPUNotifyElfLoad (id, entry, "filename");

"filename" は「ファイルサービング」ルートに関連した、デバッグ情報を持つELF のロケーションで


す。
(3) raw SPU がこれから起動されようとしている時:
snRawSPUNotifySPUStarted (id);
mmio_write_prob_reg (id, SPU_NPC, entry);
mmio_write_prob_reg (id, SPU_RunCntl , 0x1);
(4) SPU が停止したときには何時でも、PU の割り込みハンドラ スレッドからデバッガに知らせる:
snRawSPULockHandler ();
sys_raw_spu_get_int_stat (id, 2, &stat);
if (stat & 6)
snRawSPUNotifySPUStopped (id);
sys_raw_spu_set_int_stat (id, 2, stat);
snRawSPUUnlockHandler ();

詳細は、「付録 C: libsn.a」を参照してください。

ターゲットへの接続
コマンドライン オプションを使用して、ELF を自動的にロードした状態でデバッガを起動できます (シン
ボルのみ、シンボル+実行可能ファイルおよびオプションでまずターゲットをリセットするなど)。
以下のいずれかの方法で Target Manager を使用すると、任意の数のターゲットと通信できます。
(1) デフォルトの方法でデバッガを開始すると、Target Manager は自動で起動され、設定したターゲッ
トをリスト表示する (デバッガのコマンドライン オプションによって異なる) ダイアログを表示しま
す。[デバッグ] メニューの [ターゲットの選択] オプションを使用して、デバッガ使用中に作業中の
ターゲットを変更できます。「ターゲットへの接続」参照。
ターゲットをTarget Managerで選択していない場合は別に起動し、ターゲットを設定する必要があ
ります。
(2) ターゲットを特定のモジュールに関連付けることもできます。デフォルトのモジュールをロードし
たとき、内部メモリに保存されたターゲットが接続されます。異なるターゲットに関連付けられた
モジュールをロードしたときは、ダイアログが表示され、ターゲット接続の変更を実行または無視
することができます。このダイアログには、ダイアログを再表示しないようにする [常に適用] チェ
ックボックスがあります。
変更を無視する場合、デバッガは既存の接続を使用しますが、その後もダイアログは表示されま
す。「ターゲットのモジュールへの関連付け」参照。

ターゲットへの接続
既存のデバッガ セッション中に、デバッガが接続されているターゲットを変更できます。
ターゲットに接続するには、次の手順に従います。
(1) [ツール] メニューで [ターゲットの選択] をクリックし、[ターゲットの選択] ダイアログを表示しま
す。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 59 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

これは最初にデバッガを起動したときに表示されるダイアログと同じです。Target Manager に設定


がある場合にはターゲット セッションのリストを表示します。
使用中のターゲットは赤の×印、使用可能なターゲットは黒で表示されます。
ネットワーク上のターゲットを検索するための [ターゲットを検索] オプションが用意されています
(詳細は『Target Manager ユーザーガイド』を参照)。
(2) 最新の接続、および接続解除状況を表示するには [更新] をクリックします。
(3) このリストから使用可能なターゲットを選択し、[OK] をクリックします。
デバッガがただちに新規ターゲットに接続 (可能であれば) します。
(4) 接続に失敗すると、接続の失敗およびまだ現在のターゲットに接続されていることを伝えるダイア
ログが表示されます。
(5) 接続が確立すると、ターゲットの状態が「接続中」に変更されます。
新しいターゲットに接続が確立した後は、新しい実行ファイルをロードする (「実行可能ファイルのロー
ド」) またはロード済み実行ファイルをリロードする (「実行可能ファイルのリロード」) のいずれかを実
施します。
一度ターゲットセッションを選択すれば、次回からデバッガが起動した際、デバッガ終了時に作業してい
たターゲットに自動的に接続します。

メモ: 接続中のターゲットを変更した際、以前のターゲットに接続されたままである可能性がありま
す。Target Managerでターゲットの接続ステータスを確認し、必要なくなったセッションは接続解除
してください。

複数ユーザーによる 1 台のターゲット上でのデバッグ
デバッグを行う場合は、1 台のターゲットに 1 人のユーザーのみが接続できます。デバッガが接続を試行
しているターゲットに既に他のユーザーが接続している場合は、ダイアログ ボックスにターゲット セッ
ションが表示され、このダイアログ ボックスで別のセッションを選択することになります。
Target Manager では、ターゲットに接続しているユーザーの ID を確認できます。『ProDG Target
Manager ユーザーガイド』』を参照してください。 別のユーザーが接続しているターゲットを使用する
場合は、そのユーザーに直接問い合わせてください。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 60 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

実行ファイルの読み込みと実行
ターゲット上の実行可能ファイルは、デバッガから直接ロード、実行することが可能です。コマンドライ
ン上で実行可能ファイルを指定していない場合、デバッガを起動して実行可能ファイルをロード、 実行
できます。あるいは新たにビルドされたアプリケーションをロードする場合は、ターゲットを交換した後
にロード、実行できます。

メモ:ファイルをロードするには、Target Manager またはコマンドライン実行ユーティリティを使用


します。

実行可能ファイルのロード
ターゲットに新しい実行可能ファイルをロードするには、次の手順に従います。
(1) [ファイル] メニューで [ロード] をポイントした後、[実行ファイル] をクリックして [実行ファイルの
ロード] ダイアログを表示します。

デバイスからロード ファイルの通常のダウンロード設定をオーバーライドし、ユーザ
ー定義のパスを適用します。このオプションを選択すると、ブラ
ウザ コントロールが選択できなくなります。「デバイスからのロ
ード」を参照。

ファイルサーバーの アプリケーションのファイル サーバー用ディレクトリを設定しま


ディレクトリをセット す。これを選択していると、ディレクトリが指定でき、また、
ELF/PRX ディレクトリをファイルサーバー ルートとして設定し
たり、ディレクトリを参照したりできます。

ホーム ディレクトリをセット アプリケーションのホーム ディレクトリを設定します。これを選


択していると、ディレクトリが指定でき、また、ELF/PRX ディ
レクトリをホームとして設定したり、ディレクトリを参照したり

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 61 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

できます。

相対ベース ディレクトリをセ アプリケーションの相対ベース ディレクトリをセットします


ット 「相対ベース ディレクトリの設定」を参照。

コマンドライン パラメータ ゲーム アプリケーション用に任意のコマンドラインパラメータを


指定します。

ターゲットをリセット ELF/PRX ファイルがロードされる前にターゲットをリセットし


ます。

実行ファイルをダウンロード 記号情報に加えてファイルの実行可能部分をダウンロードしま
す。

ダウンロード後に実行 ファイルがロードされ次第、実行ファイルを実行するよう設定し
ます。この設定は、main() で停止するデフォルト設定より、優先
されます。

PPU デバッギングを無効化 PPU デバッギングを無効にします。PPU のデバッギングが不要


な場合、これにより、デバッギング速度を上げることができま
す。PPU デバッギングの無効設定時に例外が PPU で発生した場
合は、該当ユニットがデバッグ モードに切り替わります。

main() で停止 実行可能プログラムの実行を開始してmain() で停止します。

デバッグ情報のみをロード デバッグ情報のみをロードします。

古いブレークポイントを破棄 ProDG デバッガでプログラムに設定されていたすべてのブレーク


ポイントを破棄するよう設定します。

TTYストリームをクリア 実行ファイルをロードする前にすべてのTTYストリームを空にし
ます。

SPU デバッギングを無効化 SPU デバッギングを無効にします。SPU のデバッギングに興味が


ない場合、これにより、デバッギング速度を上げることができま
す。SPU デバッギングの無効設定時に例外が SPU で発生した場
合は、該当ユニットがデバッグ モードに切り替わります (SPU ス
レッド グループの場合は、例外発生の原因となったスレッド グ
ループのみがデバッグ モードに切り替わります)。

ELF に設定されている優先度を 選択された場合、主要なスレッドの優先順位は ELF ファイルから


使用する 取得されます。

優先順位 PPU スレッドのデフォルト優先順位を設定するものです (詳細は


『LV2 Users Manual』を参照)。使用できる値の範囲は、0~3071
(0 が最優先) です。

強制的にコア ダンプを有効に デバッガ プロセス ビューからのコア ダンプを有効にします。


する 「プロセス ビュー」を参照。

GCM デバッグの無効化を強制 Target Manager の [GCM デバッグを有効にする] 設定をオーバー


ライドします。このチェックボックスにより、このロードの
GCM デバッグ機能が無効化されるため (たとえば、自動イメージ

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 62 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

キャプチャ、RSX プロファイリングおよび HUD)、空きディスク


領域が増加されます。

ELF に設定されているスタック スタック サイズが指定できます。ELF ファイルからのデフォルト


サイズを使用する スタック サイズを使用する場合は、チェックボックスをオンにし
ます。また、ドロップダウン リストから必要なスタック サイズ
を選択することも可能です。

(2) [実行ファイルのロード] のメイン ダイアログで、[開く] をクリックしてロードを起動します。


ファイルがロードされ、選択したオプションに応じて「mainまで実行」されるか、ターゲット上で
実行されます。その後、新たにロードしたアプリケーションファイルのデバッグが可能になりま
す。
(3) デバッガがメモリを自動的にスキャンし、ロードされている PRX を検索します。またモジュールの
シンボルも、PRX 検索パスを使用してローカル ハードディスク上で検出された、対応する PRX から
ロードされます。「検索ディレクトリ」を参照してください。
(4) ターゲットがシステム ソフトウェア モードの場合、初期リセットと共に実行ファイルをロードする
と、ターゲットは強制的にデバッガ モードに戻ります。

デバイスからのロード
[実行ファイルのロード] ダイアログで [デバイスからロード] チェックボックスが選択されている場合、
ロードを行う実行可能ファイルがハード ドライブ、ブルーレイ エミュレータ、USB デバイスまたはメモ
リ スティックのいずれかのターゲット上に存在していることを意味します。

たとえば、Blu-ray や DVD から通常にブートする場合は、EBOOT.BIN ファイルへのパスを入力します。


この情報は、以下の文字列としてターゲットに送信されます。
"/dev_bdvd/PS3_GAME/USRDIR/EBOOT.BIN"

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 63 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

ここでは、以下のようにファイル パスの先頭に文字列を追加することにより、別のデバイスを選択する
こともできます。

デバイスからのロード時にシンボルを読み込む
アプリケーションのデバッグを行うためにシンボルをロードする方法は、以下のように 2 通りあります。
• デバイス上の実行可能ファイルにデバッグ情報が含まれていない場合、ファイル ブラウザ コントロ
ールを使いシンボルを含むファイルを選択してください。実行可能ファイルがターゲット上にロー
ドされる間に、デバッグ情報がこのファイルから読み取られます。
• デバイス上の実行可能ファイルにデバッグ情報が含まれている場合には、[実行ファイルのロード] ダ
イアログで [デバイス ファイルからシンボルをロードする] を選択します。

メモ:[デバイス ファイルからシンボルをロードする] が選択されていると、ファイル ブラウザ コン


トロールは利用できなくなります。

デバッガは実行可能ファイルをローカル マシン上の一時フォルダにコピーし、シンボルをロードし
ます。

注意:デバイスからシンボルを転送するには数分かかることがありますが、転送は、ローカル ファイ
ルとターゲット ファイルが異なる場合にだけ、実行されます。

実行可能ファイルのリロード
既にターゲットにロードされている実行可能ファイルをリロードするには、[デバッグ] メニューで [リセ
ット&リロード] を選択します。「[デバッグ] メニュー」を参照してください。

相対ベース ディレクトリの設定
この機能では、相対パスを含む実行ファイルに対して、パス情報 (通常はプロジェクト ファイルや make
ファイルの場所に対する相対パス) の開始点として使用するディレクトリを指定できるため、デバッガが
正しいソース ファイルを特定できるようになります。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 64 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

相対ベース ディレクトリがない場合、デバッガはファイル検索を始める場所がわからないため、デバッ
ガ自体の場所が開始点として使用されますが、たとえば、相対ベース ディレクトリが
「C:\code\mygame\build\ps3」にセットされている場合、ファイル名参照が
「..\..\source\gameengine\ai.cpp」になっていると、実際には
「C:\code\mygame\source\gameengine\ai.cpp」が参照されます。

ゲームの実行
デバッガを起動して実行ファイルをダウンロードした後は、それをターゲット上で実行することができま
す。提供されているコマンドを使い、アプリケーションの実行を任意の時点で開始または停止できます。
ソースまたは逆アセンブリにブレークポイントを設定することや、アプリケーションの中をシングルステ
ップして移動することもできます。 以下のセクションで、[デバッグ] メニューのターゲット制御コマン
ドを使用して、アプリケーションの実行を開始または中止する方法を解説します。ブレークポイントやア
プリケーションのステッピングを設定する方法については、「プログラム実行の中止」をご覧ください。

アプリケーションの再起動
アプリケーションはいつでも再起動できます。現在アクティブなモジュールのプロパティで「ターゲット
のリセット」が設定されている場合、ターゲットはリセットされ実行ファイルが再びロードされます。
• [デバッグ] メニュー、またはツールバーの [リセット&リロード] をクリックします。

アプリケーションの起動
ターゲット上でアプリケーションが実行中止した場合 (ブレークポイントに到達したため、メイン サブ
ルーチンでストップしたため、など)、デバッガから再実行可能です。
プログラム カウンタからアプリケーションを再起動するには、次の手順に従います。
• [デバッグ] メニューの [実行] をクリックするか、ツールバーの [ターゲットを開始] をクリックしま
す。
アプリケーションの実行が開始され、レジスタ ビューに「Running (実行中)」と表示されます。

アプリケーションの中止
ブレークポイントや例外でアプリケーションが実行中止していない場合は、以下の手順に従っていつでも
手動で中止できます。
• [デバッグ] メニューの [停止]、またはツールバーの [ターゲットを中止] をクリックします。
ターゲット上でアプリケーションの実行を中止すると、その他の開いているビューが更新され、新
プログラム カウンタ位置に現在の情報が表示されます。
ソースビューや逆アセンブリ ビューで [PC に移動] コマンドを使用すると、プログラム カウンタの現在
位置が閲覧できます。また、ソースビューか逆アセンブリ ビューのどちらかをアクティブにしておく
と、ターゲットが実行中止した時に自動的に内容が更新され、現在のプログラム カウンタの位置を表示
できます。

メモ:ソース ビューには、オリジナルのソース コードに正しくマップされない限りプログラム カウ


ンタは表示されません。

オブジェクト モジュールのロード
Object Module Loading (OML) を使うと、ビルド ― デバッグのサイクルにかかる時間が短縮されます。
この機能により、実行中のデバッグ セッションを中断したり、リセット ― リロード サイクルを行うこと
なく、実行時に個別モジュールの置換が行えるようになります。また、「自動」オブジェクト読み込み機
能を使えば、プログラムがビルドされてから変更が加えられたすべてのオブジェクト ファイルが置換で
きます。「オブジェクト モジュールの自動ロード」を参照してください。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 65 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

OML は、コードが中小規模のモジュールに分割できるように、プロジェクトが構造化されている場合に
その効力を最大に発揮します。複数の .c/.cpp ファイルを「#include」を使って 1 つの大きなモジュール
に含めるような場合、ビルド時間とターゲット メモリの必要量が膨大になるため、OML の使用は実用的
とはいえません。
OML 機能の使用方法:
• VSI (Visual Studio Integration) で、次の手順に従います。
(a) [プロジェクト] メニューから、[プロパティ] (または VSI2008 を使用している場合には [ProDG
プロジェクト プロパティ]) を選択します。
(b) 左ペインで、[リンカ] セクションを展開します。
(c) [全般] オプションを選択し、右ペインで [OML データの生成] を [はい] に設定します。
あるいは
• ビルド環境として VSI を使っていない場合には、SN Linker の「--oml」スイッチを使用してくださ
い。「OML (オブジェクト モジュール ローディング) 用にマップ ファイルを使用する」 を参照して
ください。

必須条件
• --oml オプションは SN Linker に特化されたスイッチで、他のリンカでは利用できません。その場
合には、別個のマップ ファイルを生成することにより、OML を使用してください。
• ELF ファイルは、VSI の [OML データの生成] オプションを使用して OML データとビルドするか、
「--oml」コマンドライン スイッチを SN Linker に渡すことによりビルドしてください。
• デバッグされるプロセスに、十分なメモリ容量があることを確認してください。メモリは、コード
用とデータ用それぞれ別個に 1MB 単位で割り当てられます。したがって、最低必要な容量は 2MB
となります。

OML (オブジェクト モジュール ローディング) 用にマップ ファイルを使用する


オブジェクト モジュール ローディングでは、生成されたマップ ファイルを使用することができますが、
大きな ELF ファイルを使用するときなどは特に、マップ ファイルを使用するより速いため、--OML スイ
ッチを利用するほうが好ましいメソッドといえます。
Visual Studio Integration を使用している場合、プロジェクト プロパティの [マップ ファイルの作成] オ
プションを有効にすることにより、マップ ファイルを追加することができます。生成されるマップ ファ
イルのパスが、.self ファイルの出力ディレクトリと適合するようにしてください。
VSI を使用していない場合は、以下に例を示すように、リンカに対して「-Map」オプションを指定するこ
とにより、マップ ファイルを作成できます。
ps3ppusnc game.o module1.o -o Game.elf -Wl,-Map=Game.map

マップ ファイルが生成された場合、これには、ELF ファイルと同じディレクトリに存在すること、およ


び拡張子を除いた部分が同じ名前であることが求められ、拡張子は .elf/.self などではなく、.map になり
ます。

メモ:マップ ファイルと OML データがどちらも生成されている場合、マップ ファイルは使用されま


せん。

デバッガで ELF ファイルをロード


OML データが ELF ファイル内に埋め込まれていない場合、デバッガは ELF ファイルの読み込み中に、
自動的に関連するマップ ファイルを読み込んで処理します。OML データが埋め込まれて「いる」場合に
は、存在するマップ ファイルは無視されます。OML データも、マップ ファイルも利用できない場合に
は、OML システムは無効化されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 66 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

オブジェクト モジュールの置換 (デバッガから)


オブジェクト モジュールを (デバッガから) 置換するには、次の手順に従います。
(1) 置換するモジュールをコンパイルします。

メモ: 完全リンクを実行する必要はありません。
(2) [ファイル] メニューから [ロード] > [オブジェクト ファイル] の順に選択、または [デバッグコントロ
ール] ツールバーから [コード置換] ボタンをクリックします。

(3) [ファイルを開く] ダイアログからオブジェクト モジュールを選択します (拡張子は .o または .obj)。


(4) デバッガでは、オブジェクト モジュールが読み込まれ、コードにパッチを適用します。
デバッガのステータス バーにある [オブジェクト モジュール] アイコンには、OML 経由で読み込まれ、
置換されたオブジェクトの数が表示されます。

• 灰色 - 読み込まれたモジュールはありません
• 黒 - 1 つまたは複数のモジュールが読み込まれています
• クロックの表示 - 1 つまたは複数のモジュールがキューにあり、読み込まれるのを待機しています
アイコンのツールチップには現在読み込まれ、キューに入れられているモジュールの数が表示され
ます。
(5) [オブジェクト モジュール] アイコンをダブルクリックすると、[オブジェクト モジュール ローダー]
ダイアログ ボックスが呼び出されます。

(6) このダイアログ ボックスには、読み込まれ、キューに入れられたモジュールの一覧と、モジュール


が読み込まれ、キューに入れられた時間が表示されます。このダイアログ ボックスは新しいモジュ
ールが読み込まれると自動的に更新されます。
Visual Studio .NET Integration を使用してオブジェクト ファイルをロードすることもできます。詳細
は、『ProDG for PlayStation®3 Visual Studio .NET Integrationユーザー ガイド』を参照してください。

オブジェクト モジュールの置換 (外部アプリケーションから)


外部アプリケーションからのオブジェクト モジュール置換は、以下のコードを使用して行うことができ
ます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 67 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

#include <windows.h>
#include <stdio.h>
#define APP_LOAD_OBJFILE 0

BOOL LoadObjectModule (const char *pszObjectModuleName) {


if (pszObjectModuleName == NULL)
return FALSE;

HWND hWnd = ::FindWindow("SNPS3DebuggerWindowClass", NULL);


if (hWnd == NULL)
return FALSE;

COPYDATASTRUCT CopyData;
CopyData.dwData = APP_LOAD_OBJFILE;
CopyData.cbData = strlen(pszObjectModuleName) + 1;
CopyData.lpData = (PVOID) pszObjectModuleName;
::SendMessage(hWnd, WM_COPYDATA, (WPARAM) NULL, (LPARAM) &CopyData);

return TRUE;
}

安全なロード ポイントの選択
オブジェクト置換が正しく完了したことを確認するため、コールスタックに競合するコードがないときの
み (つまり、ロードしているモジュールからの関数がまったく実行されていないとき、または関数が任意
のスレッドのコールスタック上に表示されないとき)、デバッガは新しいオブジェクトをロードします。
これは、置換されるモジュールの外に PC がでるまでステッピングするなど、デバッギング セッション
において手動で実行することも可能ですが、オブジェクトを安全にロードできるメイン ループ内の特定
ポイントに、snSafeLoadPoint() へのコールを挿入することにより、この処理を自動化し、モジュールを
厳密にどこにロードするかを制御することができます。
以下は一例です。
#include "libsn.h"
#include "restofgame.h"

int main(int argc, char * argv[])


{
...
while (1)
{
game.tick();
snSafeLoadPoint();
}
...
}

デバッガで「snSafeLoadPoint」シンボルが検出された場合、snSafeLoadPoint() がコールされるまで、後
続のすべてのオブジェクト ロードが待機状態になります。
マルチスレッド型アプリケーションの場合、すべてのスレッドが安全な状態にあることを確認するため、
安全なロード ポイントの選択に時間のかかる同期が必要となることがあります。すべてのフレームに対
するこの同期オーバーヘッドを避けるため、 snGetLoadRequest() を使用して保留中の OML ロードをチ
ェックすることができます。
snSafeLoadPoint がコールされると、デバッガでは保留中のオブジェクト モジュールをターゲットにロー
ドし、処理を再開します。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 68 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

さらに、安全なロード ポイントに達すると、全スレッドのコールスタックに影響を受けた関数がないか
どうかが確認されます。デバッガはこれを修正することはできませんが、ダイアログ ボックスが表示さ
れ、モジュールがロードされた後、ターゲットが不安定になる可能性があることが警告されます。
snSafeLoadPoint がコールされない場合、デバッガは安全が確認されるなり、モジュールをロードしま
す。これは直ちに行われることもあります。
これらの関数を使用するには、プロジェクトにおいて libsn.a のリンクと、libsn.h のインクルードを行う
必要があります。

制限
• パッチされたモジュールを削除し、オリジナル コードに戻すことはできません。
• デバッガは、モジュールからの関数のうち変更が加えられたものを判断し、変更された関数だけを
パッチします。しかし、関数の一部には、デバッガが変更の有無を判断できないものもあります。
こういった場合、関数は常にパッチされます。これにより、一部の関数は不必要に置換されること
になりますが、変更された関数はすべてパッチされることが保証されます。
• オブジェクト モジュールには固有の名前が必要となります。たとえば、「maths.o」というファイル
をリロードしたい場合、これを異なるディレクトリに 2 つ存在させることはできません。
• 変更可能なのは、関数コードのみで、変数やタイプは変更できません (文字列定数の変更は、それら
が読み込み専用データ セクションに配置されている場合には可能です)。
• 読み込み/書き込み データ セクションのサイズが変わると、デバッガではモジュールのロードに失
敗し、エラー メッセージを表示します。
• デバッガでは、データ セクションのサイズに変化がない箇所では、変数への変更を検出できませ
ん。これは、結果としてコードのクラッシュに通じる可能性があります。
• 新しい関数を追加することはできますが、それらには、ロードするモジュールの内部からのみアク
セス可能となります。たとえば、モジュール A に関数 F() を追加してロードした場合、モジュール B
から F() をコールしてロードすることはできません。
• 読み込まれたモジュール内の C++ 例外処理の使用はサポートされているものの、例外データのパッ
チは複雑であることから、常に成功するとは限りません。例外処理に失敗した場合であっても、関
数それ自体はパッチされ、正しく働きますが、パッチされた関数内にスローされた例外、またはパ
ッチされた関数のアンワインドは、正しく機能しない場合があります。このような場合には、例外
がキャッチされずにターゲットが停止することが予想されます。
• OML は、関数やデータが出力からストリップされていても操作できるようになりました。しかし、
実行可能ファイルからストリップされた関数を置換モジュールが呼び出すと、デバッガは操作を進
めるとデバッガが停止してしまうと警告を発します。しかし、実行可能ファイルからストリップさ
れた関数を置換モジュールが呼び出すと、デバッガは操作を進めるとデバッガが停止してしまうと
警告を発します。
• SNC コンパイラで -Xnotocrestore 最適化を行う場合、OML は動作しません。VisualStudio
Integration を使用の場合は、全関数コールの TOC を保存するため、TOC Pointer Preservation プロ
パティ (C/C++ プロパティページ、Code Generation ページ) をゼロに設定します。

よく発生する問題
• OML データまたはマップ ファイルがない - デバッガが OML データまたはマップ ファイルの検出と
ロードを行えない場合、OML は無効化され、ツールバー ボタン/メニュー アイテムが灰色になって
選択できなくなります。別個のマップ ファイルを使用するよりは、OML 機能をもつ OML データの
使用が好ましいものの、両者のやり方の間には機能面での差異はありません。
• 処理メモリ不足 - デバッガでは、処理においてスペースが直接割り当てられるため、十分な空きメモ
リがあることを確認してください。
• グローバル データの追加。
例:
- モジュール範囲で宣言されたグローバル変数
- モジュール スタティック
- 関数/クラス スタティック
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 69 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

• クラス/構造体/タイプ定義の変更
例:
- クラス/構造体への変数追加
- バーチャル関数の追加/変更
• オブジェクト ファイルの名前が固有でない (「制限」参照)。

オブジェクト モジュールの自動ロード
オブジェクト モジュールの自動ロード機能は、最後にビルドされてから、どのファイルが変更されたか
を判断するために、オブジェクト ファイルが何回修正されたかを確認するものです。修正が加えられた
オブジェクト ファイルは自動的に読み込まれます。

注意: ファイルのコピーを行ったり、ファイル移動を行ったりすると、修正回数が変更されます。この
ため、ファイルのコピー後や移動後に自動オブジェクト モジュールの読み込み機能を使用すると、不
必要に余分なファイルが読み込まれたり、更新されたモジュールが欠落することがあります。このた
め、自動メソッドを使用するときは、ファイルのビルド後にファイルを移動したりコピーしないよう
にしてください。

オブジェクト モジュールを自動的にロードするには、次の手順に従います。
(1) 置換するモジュールをコンパイルします。

メモ: 完全リンクを実行する必要はありません。

(2) [ファイル] メニューから [ロード] > [オブジェクト ファイル: オート] の順に選択、または [デバッグ
コントロール] ツールバーから [自動コード置換] ボタンをクリックします。

(3) 変更されたオブジェクト モジュールがご利用のコードにパッチされます。


デバッガのステータス バーにある [オブジェクト モジュール] アイコンには、OML 経由で読み込ま
れ、置換されたオブジェクトが表示されます。アイコンのツールチップには現在読み込まれ、キュ
ーに入れられているモジュールの数が表示されます。
(4) [オブジェクト モジュール] アイコンをダブルクリックすると、[オブジェクト モジュール ローダー]
ダイアログ ボックスが呼び出されます。
このダイアログ ボックスには、読み込まれ、キューに入れられたモジュールの一覧と、モジュール
が読み込まれ、キューに入れられた時間が表示されます。このダイアログ ボックスは新しいモジュ
ールが読み込まれると自動的に更新されます。

オブジェクト モジュール ローディングのチュートリアル


この章のチュートリアルでは、Visual Studio を使った OML (Object Module Loading) の使用方法を説明
します。チュートリアルでは、VS2008 と VS2010 のソリューションが利用できます。
2 つのチュートリアルのファイルは、「%SN_PS3_PATH%\examples\Tutorial\OML\」フォルダにあり
ます。

SimpleExample1
このチュートリアルでは、VS2008 のソリューションを使い、コンソール モジュールからあるテキストを
一度出力してから、プログラムをリロードすることなしに出力を編集します。
(1) Visual Studio で OML Tutorial_vs2008.sln を開き、SimpleExample1 を [スタートアップ プロジェク
ト] として設定します。
(2) [デバッグ] メニューで [デバッグ開始] をクリックします。
ProDG Debugger が起動され、アプリケーションが読み込まれます。
プロジェクトのビルドを行うかどうか聞かれます。[はい] をクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 70 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

(3) [デバッグ] メニューで [実行] をクリックします。


次のような出力が TTY ビューに連続的に表示されます。このテキストを、これから置換します。

(4) Visual Studio で、SimpleExample1 ソリューションを展開し、module1.c を開いてテキストを編集しま


す。
"Text from the old module" というテキストを、"Text from the new module" と変更します。
(5) ソリューション エクスプローラでモジュールを右クリックし、[ProDG Debugger でコンパイルおよ
びロード] をクリックし、module1.c を再コンパイルします。
モジュールが ProDG Debugger に読み込まれ、修正されたテキストがループのテキスト イテレーシ
ョンから出力されます。
デバッガの TTY ビューで、編集を加えたテキストが表示されるのが確認できるようになっているは
ずです。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 71 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

ヒント: [デバッグコントロール] ツールバーから [コード置換] ボタンをクリックしても、変更を加え


た、コンパイル済みのコードが読み込めます。

SNCube
SNCube プロジェクトは C++ プログラムで、3D グラフィックス ライブラリ PSGL (OpenGL の実装版) を
使用してテクスチャード加工の立方体を表示するものです。
このチュートリアルでは、サンプルにいくつかのデバッグ コードを追加した後、変更内容を適用してバ
グを修正することにより、一回のデバッグ セッションで複数オブジェクトの置換を行います。

ヒント:このチュートリアルを開始する前に、Target Manager の「スマート キャプチャ」機能を有効


化しておくことをお勧めします。Target Manager ユーザー ガイドの「イメージ キャプチャの表示」
を参照してください。

(1) Visual Studio で SNCube.sln を開き、SNCube を [スタートアップ プロジェクト] として設定しま


す。プロジェクト ファイルは %SN_PS3_PATH%\examples\Tutorial\OML\SNCube にあります。
(2) 実行時には、ファイル サーバー用ディレクトリを実行ファイル ディレクトリに設定する必要があり
ます。
• ソリューション エクスプローラで SNCube ソリューションを右クリックし、[ProDG VSI プロジェ
クトのプロパティ] を選択します。SNCube の [ProDG プロジェクトのプロパティ] ダイアログ ボッ
クスの左ペインで [デバッグ/Tuner] ノードを選択し、[ファイル サーバー用ディレクトリ] アイテム
を「$(TargetDir)」に設定します。
• または、ProDG Debugger の [実行ファイルのロード] ダイアログ ボックスの [ファイル サーバー デ
ィレクトリを設定 (app_home/)] と [実行ファイル ディレクトリを使用] オプションの両方を選択す
ることも可能です。
(3) Visual Studio の [デバッグ] メニューで [デバッグ開始] をクリックします。
ProDG Debugger が起動され、アプリケーションが読み込まれます。
プロジェクトのビルドを行うかどうか聞かれます。[はい] をクリックします。
(4) [デバッグ] メニューで [実行] をクリックします。
(5) Target Manager の左ペインで、[イメージ キャプチャ] ノードを選択し、[スマート キャプチャ] ボタ
ンをクリックします。これにより立方体が表示されるのではないかと思われるかもしれませんが、
立方体の代わりにスカイブルーの画面が持続的に表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 72 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

(6) 描画されているオブジェクトがないか、コンソール (TTY) 出力を追加することにより確認してみま


す。「Client」クラス (Client.cpp) の描画メソッドには、描画される各オブジェクトに対するループ
が存在します。Client.cpp で、次の手順を行います。
(a) 84 行目の printf メッセージのコメントを解除します。
(b) 左ペインで Client.cpp を右クリックし、次に [ProDG Debugger でコンパイルおよびロード] を
クリックします。
デバッガの TTY ビューでは、1 つのオブジェクトが描画されていることが確認できます。
(7) オブジェクトの描画が確証できたため、次はループ内のコードを見ていきます。オブジェクトが描
画されていない状態で、シェーダに渡される行列 (マトリクス) を確認します。これを行うには、
Visual Studio で追加関数を「Client」クラスに追加します。
(a) Client.h の 38 行目にあるコードのコメントを解除します。
(b) Client.cpp の 12~18 行目にあるコードのコメントを解除し、PrintMatrix 関数を [Client] クラ
スに追加して TTY によって 84 行目にコメント行が再度挿入されないようにしてから、94~96
行目のコメントを解除します。
これらの変更を加えることにより、モデル ビューの行列がスタックから取得され、コンソール出力
に表示されます。
(8) ソリューション エクスプローラの左ペインで、Client.cpp を右クリックし、[ProDG Debugger でコ
ンパイルおよびロード] をクリックして Client モジュールをリロードします。
デバッガの TTY ビューで、行列が出力されるのが確認できます。

ヒント: 実行は、読み取りが難しければ区切ることができます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 73 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

(9) この時点でも、まだ立方体を確認することはできません。なぜなら識別行列がオブジェクトの変換
に使用されており、そこでは「目」(画像が眺められる角度) が起点にあるためです。しかし、
Mesh::GetWorldTransform メソッドは、変換に必要とされる変換行列を返します。
(a) Visual Studio で Mesh.cpp を開き、74 行目に移動します。
現時点では、Mesh::GetWorldTransform が正しくない識別行列を返しているのが確認できま
す。
(b) 74 行目を「return m_lwMtx;」と変更します。
この変更により、このインスタンスに対して正しい変換が返されるようになります。
(10) Mesh.cpp を右クリックし、次に [ProDG Debugger でコンパイルおよびロード] をクリッ クして
Mesh モジュールをリロードします。この時点で、立方体は正しく表示されるようになります。立方
体が正しく表示されるかどうかを確認するには、Target Manager で次のことを行います。
(a) 左ペインで、イメージ キャプチャ ノードを選択します。
(b) [スマート キャプチャ] ボタンをクリックし、立方体を [イメージ キャプチャ] ビューに表示しま
す。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 74 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

コア ダンプ ファイルのロード
デバッガでは、クラッシュ発生時に開発ハードウェア によって生成されるコア ダンプ ファイルのロード
がサポートされています。これは、ターゲット メモリやレジスタなどを分析し、問題の原因を特定する
ためです。コア ダンプ ファイル (ps3core-*-EBOOT.BIN.elf) とシンボル ファイル (.elf) を指定することに
より、デバッガでは、コア ダンプ情報をシンボルとソース コードにリンクできるようになります。
コアダンプ ファイルをロードするには、次の手順に従います。
(1) コア ダンプ ファイルをホスト PC に転送します。ゲームの実行中に Target Manager を接続させる場
合、このオプションを使用して app_home に (ユーザー PC のハードドライブに直接) コア ダンプを
書き込みます。これを行わない場合は、メモリ スティックを使用して dev_ms にコア ダンプを書き
込みます。
(2) [ファイル] メニューで [ロード] をポイントし、続いて [コア ダンプ] をクリックすると、コア ダンプ
ファイル名とシンボル情報のロード元である ELF ファイル名の入力を行う、ダイアログが表示され
ます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 75 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

(3) 既にデバッガがコア ダンプ ターゲットに接続されている場合は、これを使用します。接続されてい


ない場合は、コア ダンプに利用可能なターゲットをデバッガが検索します。ターゲットが検出され
た場合はそれが使用され、検出されない場合は、新規のコア ダンプ ターゲット (選択したファイル
名と同じ名前) が自動的に作成されて使用されます。

メモ:Shift キーを押しながらこのオプションを選択すると、新規コア ダンプ ターゲットが強制的に


作成されます。

(4) コア ダンプ ファイルがターゲットにロードされ、シンボルがデバッガにロードされます (ELF ファ


イルを通常のターゲットにロードするのと同様)。
ロードが完了すると、レジスタ、メモリ、ソース ビューなどが更新され、クラッシュの場所と原因が示
されます。
プログラムのステッピングを例外として、すべてのビューが通常のデバッギング セッションと同様に動
作します。

PRX のデバッグ
PRX をデバッグする場合、必須モジュールのシンボルを含む「.prx」ファイルのパスを、PRX ファイル
検索パスに追加します。「検索ディレクトリ」を参照してください。
ここでは、エクスポートした PRX 関数へのステップ実行に関する制限があります。エクスポートされた
PRX 関数に対するコールへのステップ実行後、デバッガには、一部の PRX バインディング コードの逆ア
センブリが表示されます。ここから、後続する bctr 命令にステップ実行すると、PRX コードが表示され
ます。

インライン関数
デフォルトでは、SNC ツールチェーンはインライン関数に対してデバッグ情報を出力しません。しか
し、-Xinlinedebug コンパイラ スイッチを使うと、コンパイラによるデバッグ情報出力のレベルを次の
ように指定することができます。

-Xinlinedebug=0 インライン関数に関するデバッグ情報はありません。
デバッガで混合されたソースや逆アセンブリを閲覧すると、ソース コードの

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 76 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

関数呼び出しに続き、そのインライン化された関数の生の逆アセンブリが確
認できます。これがデフォルト設定となります。

-Xinlinedebug=1 インライン化された関数のために、一般的なデバッグ情報 (スコープなし) が


出力されます。
デバッガで混合されたソースや逆アセンブリを閲覧すると、ソース コードの
関数呼び出しに続き、そのインライン化された関数のソース行と逆アセンブ
リが確認できます。
ソースのみのモードに切り替えたとき、カーソルがインライン化されたコー
ドの内側にある場合には、デバッガはインライン化関数のコードにジャンプ
します。

-Xinlinedebug=2 インライン化された関数のために、完全なデバッグ情報 (スコープを含む) が


出力されます。
デバッガで混合されたソースや逆アセンブリを閲覧すると、ソース コードの
関数呼び出しに続き、そのインライン化された関数のソース行と逆アセンブ
リが確認できます。
ソースのみのモードに切り替えたとき、カーソルがインライン化されたコー
ドの内側にある場合には、デバッガはインライン化関数を認識するため、そ
のインライン化された関数または呼び出している関数のコードにジャンプで
きます。

SELF サポート
ProDG では、複数の SELF ファイル形式 (MSELF) に対応しており、複数のファイル (SELF、SPRX、およ
び各種データ ファイル) を 1 つのファイルにアーカイブできます。追加の検索ディレクトリが正しく設定
されており、MSELF ファイルへ含める前のオリジナル ファイルへのポイントが正しく行われている限
り、MSELF ファイルからロードされた SPU イメージや PRX モジュールのデバッギングをサポートする
ための、追加ステップは必要ありません。このファイルには、デバッグ情報が含まれている必要がありま
す。
SPU イメージの場合、デバッガではGUIDS を検索するためにメモリのスキャンが行われ、SPU 検索パス
を使用してローカル コンピュータ上に存在するイメージとのマッチングが行われます。詳細は、「検索
ディレクトリ」を参照してください。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 77 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ゲームのビルドおよびロード

PRX モジュールの場合、デバッガでは PRX が MSELF ファイルからロードされたことが認識され、PRX


検索パスを使用して同じファイル名の対応 PRX のマッチングが行われます。詳細は、「検索ディレクト
リ」を参照してください。

メモ:同じファイル名ではあるものの、パスは異なる PRX が MSELF に複数存在する場合、デバッガ


では、ローカル ハードディスク ドライブ上のどのPRX をデバッグ情報に使用すべきかが識別されま
せん。これについては、今後のリリースで対処される予定です。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 78 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

5: プログラムのブラウズ
この章では、プロジェクトの利点について、およびワークスペース ビューに含まれる 3 つのタブの使用
方法について説明します。
この章には、以下のセクションがあります。
• プロジェクトの使用
• プロジェクト ビュー
• ファイル ビュー
• ブラウズ ビュー

プロジェクトの使用
デバッガはプロジェクトのコンセプトに連結しています。それらは 1 つ以上のモジュール (実行ファイ
ル、ELF ファイルなど) のコンテナとして作動します。ウィンドウ レイアウトおよびターゲット接続情報
も保存できます。これにより、見ているプログラムの領域によって異なるウィンドウ レイアウトを持つ
ことができます。
プロジェクトは.snproj ファイル形式で保存されます。
プロジェクト内のそれぞれのモジュールは、ロード フラグ情報 (リセット ターゲット、メイン実行な
ど)、ファイルサーバー ディレクトリ、ターゲット情報を保存します。このため、毎回この情報を指定し
ないでモジュールをロードすることができます。
プロジェクト ファイルの利用方法はさまざまです。
例:
• 1つのプロジェクトにモジュールを1つにして、個別ウィンドウを維持します。
• プロジェクトに複数モジュールがある場合 1 つがメインモジュールになり、その他はメインをロー
ドする前にロードされるヘルプ モジュールになります。
• 単一プロジェクトにある 2 つのモジュールは、異なるターゲットで実行されます。アクティブ ター
ゲットはそれぞれのモジュールをロードするたびに自動切り替えされます。
詳しくは、「プロジェクトのオプション」を参照してください。

ワークスペース ビューの使用
ワークスペース ビューによって、プロジェクトのファイル、機能、グローバル変数およびクラス定義を
ツリー状ビューに表示できます。それには、実行ファイル内のシンボル データを使って行います。
ワークスペース ビューは、プロジェクト ビュー、 ファイル ビュー、ブラウズ ビューの 3 種類です。こ
れらは、ビュー上部のタブで選択できます。

プロジェクト ビュー コンポーネント モジュールのリストと共にプロジェクトが表示されます。

ファイル ビュー ルート レベルに 1 つ以上の項目を持つ、ツリー ビューを表示します。 それ


ぞれの項目には、現在ロードされているモジュールのプロジェクト名が含ま
れます。プロジェクトのディレクトリ レイアウトは、これらプロジェクト
項目内で複製されます。しかし、単一のサブフォルダだけを含む複数のフォ
ルダは、散乱を緩和するために連結されています。ツリーの各ノードは個々
のプロジェクト ソース ファイルを検出するため展開/折りたたみができま
す。プロジェクト項目はモジュールとしてツリーに追加され、ロード/アン
ロードされます。

ブラウズ ビュー プロジェクト内のすべてのクラス タイプ、グローバル関数およびグローバ

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 79 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

ル変数をブラウズする際に使用します。各クラスには方法および静的メンバ
に関するサブアイテムが含まれます。[ブラウズ ビュー]はクラス、関数、お
よび変数という名称の 3 つのフォルダを含み、すべてのクラス タイプ、グ
ローバル関数およびグローバル変数が各々のフォルダに含まれます。

フォルダの内容を見る場合、たとえばファイル内の全関数のリストを表示させる場合、[+] 記号をクリッ
クしてフォルダを展開できます。クラス フォルダを展開すると、プロジェクト内のすべてのクラス定義
が表示されます。 各クラス定義は順に展開され、すべての方法および静的メンバ変数のリストが表示さ
れます。
[-] 記号をクリックすると、フォルダを折りたたむことができます。
ワークプレース ビューのブラウズ項目の上にマウスをしばらく置くとその項目の評価をします。このよ
うにしてアドレス、現在の値などを表示します。

ワークスペースビューのオプション
ワークスペース ビューには、ビューの機能性を高めるため有効/無効に設定できるいくつかのオプション
があります。これらのオプションは、[オプション] ダイアログの [ワークスペース] セクションで設定で
きます (「ワークスペース設定」参照)。
「存在するファイルのチェック」オプション
これを有効にすると、ファイル ビュー中のプロジェクト項目が初めて展開された際、ファイルがあるか
どうか判断するため、ビューは各ファイルを開こうとします。これを無効 (デフォルト) にすると、その
ような確認は行われず、ファイルはすべて存在するものとビューは見なします。

メモ:これを使用すると、プロジェクト項目の最初の展開速度が低下します (特にファイルがネットワ
ーク ドライブ上にある場合)。

「存在しないファイルを表示」オプション
この機能が無効の場合には、検索できなかったファイルはファイル ビューに追加されません。この機能
は、インストールされていない、すべての第三者のライブラリ ソース ファイルを廃棄します。有効の場
合には、すべてのソース ファイルがファイル表示に追加されます。しかし、これらファイルを見分ける
ため、ファイルの名前は他のファイル名より明るい色で表示されます。さらに、実在しないファイルだけ
が入ったフォルダも他のフォルダより明るい色で表示されます。
「ファイル内の関数を表示」オプション
これが有効にされている場合、ファイル ビュー内に表れたソース ファイル項目は、その内部で宣言され
た関数であれば、どれでも展開して表示することができます。ファイル内で関数が宣言されていなけれ
ば、展開/折りたたみ制御は消滅します。

プロジェクト ビュー

このビューでは、プロジェクトのすべてのモジュールをリスト表示します。太文字で表示されているモジ
ュールがデフォルト モジュールです。デフォルト モジュールは、メイン メニューまたはツールバーから
[リセット & リロード] を選択するたびにロードされます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 80 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

ショートカット メニューまたはキーボード ショートカットのいずれかでデフォルトとなるモジュールを


設定できます。
[プロジェクト ビュー] フォルダを右クリックして、[追加] オプションを持つショートカット メニューを
表示します (これは標準ビュー管理オプションの追加機能です)。
プロジェクト内の任意のモジュールを選択した場合、ショートカット メニューは以下のような詳細を表
示します。

サブアイテムの追加 プロジェクトに追加するためにモジュール ファイル (実行ファイル) の閲覧


ができます。

削除 プロジェクト モジュールを削除します。

アクティブにセット 選択したモジュールをアクティブ モジュールとして設定します。

ロード モジュール ファイルをロードします。

複製 プロジェクト ビューで選択されたモジュールをコピーします。これによ
り、プロジェクト ビューに同じモジュールが何度も表示されますが、これ
らはそれぞれ異なるロード フラグ/オプションで設定されます。

シンボルのロード シンボルをロードします。

シンボルのアンロード シンボルをアンロードします。

名前の変更 モジュールの名前を変更できます。

モジュールのファイル モジュールを別のELF/PRX ファイルにポイントさせることができる [モジ


名を変更する ュールのファイル名を変更する] ダイアログを表示します。

モジュールの並べ替え プロジェクト ビューに一覧されているモジュールをアルファベット順に並


べ替えます。並べ替えを行わない場合、追加された順序で表示されます。

プロパティ モジュールのロード設定を含むモジュールのプロパティ シートを表示しま


す。「モジュール」参照。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 81 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

含まれるフォルダを このメニュー項目は、[ワークスペース] ビューでファイルを右クリックす


開く ると表示されます。選択した場合は、指定したファイルを含むフォルダ
が、エクスプローラ ウィンドウが表示されます。

モジュールの追加
以下の方法でプロジェクトにモジュールを追加できます。
• ワークスペース ショートカット メニューで、プロジェクト ビューをポイントし、[サブアイテムの
追加] を選択します。表示されている [ファイルを開く] ダイアログでモジュールが追加できます。
• [ファイル] メニューで、[実行ファイルのロード] をクリックするか、[実行ファイルのロード] ツー
ルバー ボタンを使って、モジュールを追加します。ロードされた実行ファイルは自動的にプロジェ
クトに追加されます。詳しくは、「実行可能ファイルのロード」を参照してください。
• PRX ファイルは Windows エクスプローラからドラッグし、ワークスペース ビューにドロップでき
ます。

モジュールのプロパティ
[モジュールのプロパティ] ダイアログには、選択したモジュールのオプション シートが表示されます。
モジュールを選択して、ダイアログ左側の[モジュールのプロパティ] を選択すると、現在のオプション設
定がダイアログ右側に表示されます。

デバイスからロード ファイルの通常のダウンロード設定をオーバーライドし、ユーザー定
義のパスを適用します。このオプションを選択すると、ブラウザ コン
トロールが選択できなくなります。「デバイスからのロード」を参照
してください。

ファイル サーバーのディ アプリケーションのファイル サーバー用ディレクトリを設定します。


レクトリをセット チェックしている場合、ディレクトリの指定、実行ファイルのディレ
クトリをファイルサーバー ルートに設定、ディレクトリの閲覧ができ
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 82 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

ます。

ホーム ディレクトリをセ アプリケーションのホーム ディレクトリを設定します。チェックして


ット いる場合、ディレクトリの指定、実行ファイルのディレクトリをホー
ム ディレクトリに設定、ディレクトリの閲覧ができます。

相対ベース ディレクトリ アプリケーションの相対ベース ディレクトリを設定します。選択した


をセット 場合は、ディレクトリを指定、または実行ファイルのディレクトリを
相対ベースとしてセットできます。また、ディレクトリを参照して指
定することもできます。

コマンドライン ゲーム アプリケーション用に任意のコマンドライン パラメータを指定


パラメータ します。

ターゲットをリセット 実行可能ファイルがロードされる前にターゲットをリセットします。

実行ファイルを 記号情報に加えてファイルの実行可能部分をダウンロードします。
ダウンロード

ダウンロード後に実行 ファイルのロード直後に実行ファイルの実施を開始します。この設定
は、main() で停止するデフォルト設定より優先されます。

PPU デバッギングを無効 PPU デバッギングを無効にします。PPU のデバッギングが不要な場


化 合、これにより、デバッギング速度を上げることができます。PPU デ
バッギングの無効設定時に例外が PPU で発生した場合は、該当ユニッ
トがデバッグ モードに切り替わります。

main() で停止 実行可能プログラムの実行を開始してmain() で停止します。

デバッグ情報のみをロード デバッグ情報のみをロードします。

強制的にコア ダンプを有 デバッガ プロセス ビューからのコア ダンプを有効にします。「プロ


効にする セス ビュー」を参照してください。

GCM デバッグの無効化を Target Manager の [GCM デバッグを有効にする] 設定をオーバーライ


強制 ドします。このチェックボックスにより、このロードの GCM デバッ
グ機能が無効化されるため (たとえば、自動イメージ キャプチャ、
RSX プロファイリングおよび HUD)、空きディスク領域が増加されま
す。

古いブレークポイントを ProDGデバッガでプログラムに設定されていたすべてのブレークポイ
破棄 ントを破棄するよう設定します。

TTY ストリームをクリア 実行ファイルをロードする前にすべての TTY ストリームを空にしま


す。

SPU デバッギングを SPU デバッギングを無効にします。SPU のデバッギングに興味がない


無効化 場合、これにより、デバッギング速度を上げることができます。SPU
デバッギングの無効設定時に例外が SPU で発生した場合は、該当ユニ
ットがデバッグ モードに切り替わります (SPU スレッド グループの場
合は、例外発生の原因となったスレッド グループのみがデバッグ モー
ドに切り替わります)。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 83 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

優先順位 PPU スレッドのデフォルト優先順位を設定するものです (詳細は


『LV2 Users Manual』を参照)。使用できる値の範囲は、0-3071 (0 が
最優先) です。

ELF に設定されているス スタック サイズが指定できます。ELF ファイルからのデフォルト スタ


タック サイズを使用する ック サイズを使用する場合は、チェックボックスをオンにします。ま
た、ドロップダウン リストから必要なスタック サイズを選択すること
も可能です。

ターゲットのモジュールへの関連付け
プロジェクトに複数のモジュールがある場合、それぞれのモジュールを特定のターゲットに関連付けるこ
とができます。その後、同等のモジュールがロードされたときに、そのターゲットを変更することもでき
ます。「ターゲットへの接続」を参照してください。
ターゲットとモジュールを関連付けるには、次の手順に従います。
(1) [プロジェクトのオプション] ダイアログ ボックスの [ターゲットをモジュールに関連付ける] チェッ
ク ボックスを選択します (「プロジェクトのオプション」 を参照)。
(2) [ワークスペース] ビューで、[プロジェクト] ビューを選択します。利用可能なモジュールのリストか
ら、関連付けしたいモジュールを右クリックして、[プロパティ] を選択します。
(3) [ターゲット] をクリックします。

(4) 右側のペインで、ターゲットを関連付け用に選択したモジュールに指定します。
(5) このモジュールに該当するボックスにチェックをします。
(a) 常に:終了するときは常に接続を切る。
(b) 状態を維持:現在の接続状態を保持する。
(c) しない:終了時に接続を切らない。
(6) [OK] をクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 84 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

モジュールのリセット パラメータの設定
特定のモジュールにリセット パラメータを設定するには、次の手順に従います。
(1) [ワークスペース] ビューで、[プロジェクト] ビューを選択します。使用可能なモジュールのリスト
で、リセット パラメータを設定するモジュールを右クリックし、[プロパティ] を選択します。
(2) [リセット パラメータ] をクリックします。

(3) 右側のペインで リセット タイプ、ブート パラメータ、システム パラメータ、または [デフォルトを


使用] チェックボックスを選択します。[デフォルトに戻す] ボタンでは、リセット パラメータがそれ
ぞれのデフォルト値に戻されます。
(4) [デフォルトを使用] を選択した場合は、[リセット オプション] 設定ダイアログで設定 (「リセット
オプション」を参照) したリセット パラメータが、このモジュールに対して使用されます。
(5) [OK] をクリックします。

モジュールに対して検索パスを設定
特定のモジュールに対して検索パスを設定することができます。これらはグローバル検索パスに加えて機
能するため、プロジェクト内の全モジュールにわたる包括的な検索パスを設定することができ、さらに特
定のモジュールにのみ関連する付加的な検索パスを追加することができます。
モジュールに検索パスを設定するには、次の手順に従います。
(1) [ワークスペース] ビューで、[プロジェクト] ビューを選択します。利用可能なモジュールのリストか
ら、検索パスを設定したいモジュールを右クリックし、[プロパティ] を選択します。
(2) [検索ディレクトリ] をクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 85 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

(3) 右側のペインで、利用可能なカテゴリに対して検索パスを追加します。検索パスの設定に関する詳
細は、「検索ディレクトリ」を参照してください。
(4) [OK] をクリックします。

モジュールへのパス マッピングの設定
特定のモジュールにパス マッピングを設定するには、次の手順に従います。
(1) [ワークスペース] ビューで、[プロジェクト] ビューを選択します。選択可能なモジュールのリストか
ら、パス マッピングを設定したいモジュールを右クリックし、[プロパティ] を選択します。
(2) [パス マッピング] をクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 86 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

(3) [検索パス] ドロップダウン リストから、変更する検索パスの種類を選択します。


(4) [ディレクトリ] セクションと参照ボタンを使用し、適切な検索パスを指定します。
(5) ツール バーの [パスのチェック] を使用して [置換後のパス] フィールドが有効なパスになることを確
認します。
(6) ツール バーの [パス追加 (挿入)] ボタンをクリックし、パス名を入力または参照ボタン […] でディレ
クトリを指定して、マッピングを追加することもできます。
(7) パスのマッピング リストからディレクトリを削除する場合は、対象のディレクトリを選択し、ツー
ル バーの [パスの削除 (削除)] ボタンをクリックします。
(8) パス マッピング リストのディレクトリの順番は、ツール バーの上下矢印ボタンをクリックして変更
できます。選択したマッピングを上位に移動する場合は上矢印、下位に移動する場合は下矢印をク
リックします。

ステップ制御フォルダの設定
特定モジュールに対するステップ制御フォルダを設定するには、次の手順に従います。
特定のモジュールに対し、ステップ制御フォルダを設定することが可能です。これらはグローバル ステ
ップ制御フォルダに加えて動作するため、プロジェクト内の全モジュールにわたって一般的なフォルダ
(STL など) を使用することができる一方、特定モジュールに関連する付加的フォルダを追加できます
(例:コードの該当領域で作業していない場合、レンダリングや物理に関するファイルのステップを停止
する)。
(1) [ワークスペース] ビューで、[プロジェクト] ビューを選択します。利用可能なモジュールのリストか
ら、検索パスを設定したいモジュールを右クリックし、[プロパティ] を選択します。
(2) [ステップ制御] をクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 87 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

(3) 右側のペインに、ステップインしたくないフォルダの検索パスを追加します。検索パスの設定に関
する詳細は、「検索ディレクトリ」を参照してください。
(4) [OK] をクリックします。

ステップ制御で無視する関数を指定
特定モジュールに対し、制限ステップ コマンドで無視する関数を指定するには、次の手順に従います。
特定モジュールに対し、「制限ステップイン」処理中に無視するグループ関数や個別関数を指定すること
ができます。これらは、関数におけるグローバル ステップ制御制限と共に動作します。詳細は、「ステ
ップ制御」を参照してください。
無視する関数に関するルールは、正規表現を使用して定義できます。詳細は、「正規表現」を参照してく
ださい。
(1) [ワークスペース] ビューから [プロジェクト] ビューを選択します。利用可能なモジュールのリスト
から、検索パスを設定したいモジュールを右クリックし、[プロパティ] を選択します。
(2) [ステップ制御] をクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 88 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

(3) [式を追加] ツールバー ボタンをクリックし、「ステップ インしない」ルール リストに正規表現を追


加します。
(4) 必要に応じ、ステップ インする/ステップ インしない正規表現のチェックボックスをオンまたはオ
フにします。
(5) [OK] をクリックします。

メモ:[インポート] ボタンをクリックすると、テキスト ファイルから正規表現ルールをインポートす


ることができます。ファイルは以下のフォーマットに従う必要があり、ルールの各フィールドはスペ
ースで区切ります。

[実行制御]
10 FW.* No Step Into
20 FWWindow\:\: Step Into
20 FWCellGLWindow\:\: Step Into

「ステップインしない」ルールはコマンドラインからもインポートできます - 詳細は、「デバッガの
コマンドライン」を参照。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 89 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

ファイル ビュー

ワークスペース フォルダの [ファイル ビュー] を右クリックすると、オプション (標準表示管理オプショ


ンへの追加機能) のあるショートカット メニューを表示します。

アイテムの検索 表示中のリストから項目を検索できます。

次を検索 最後に実施したアイテムの検索操作を繰り返します。

ワークスペースの 選択されたワークスペースのプロパティ ダイアログ ボックスを表示しま


プロパティ す。

含まれるフォルダを開 Windows エクスプローラを開き、該当ファイルを含むフォルダを表示し


く ます。

サブディレクトリ フォルダ内のファイルを選択すると、そのファイルの詳細を ワークスペース プロパテ


ィ の代わりにショートカット メニューに保存します。

<ファイル> を開く 最後に選択したソースビューで選択したファイルを開きます。ソースビュ


ーが使用できない場合は、他のビューを変更してソースを表示させること
が可能です。

ファイル のプロパティ 選択したファイルのプロパティ情報を含むメッセージ ウィンドウを表示


します。

ファイル内の関数を選択すると、そのファイルの詳細を ワークスペース プロパティ の代わりにショート


カット メニューに保存します。

定義に移動 ソース ビューのこの関数の先頭にカーソルを置きます。

実行 選択された関数を開始するまでプログラムを実行します。ソース ビュー
はこれを反映するために更新します。

ブレークポイントの 選択した関数の開始点にブレークポイントを追加します (または、すでに


追加 ブレークポイントが設定されていれば、ブレークポイントを削除しま
す)。

参照のプロパティ 選択した関数のプロパティ情報を含むメッセージ ウィンドウを表示しま

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 90 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

す。

参照ビュー

ワークスペース フォルダの [参照ビュー] を右クリックすると、オプション (標準表示管理オプションへの


追加機能) のあるショートカット メニューを表示します。

アイテムの検索 表示中のリストから項目を検索できます。

次を検索 最後に実施したアイテムの検索 操作を繰り返します。

ワークスペースの 選択されたワークスペースのプロパティ シートを表示します。


プロパティ

関数 フォルダ内で関数を 1つ選択すると、そのファイルの詳細をワークスペース プロパティ の代わりに


ショートカット メニューに保存します。

定義に移動 ソース ビューのこの関数の先頭にカーソルを置きます。

実行 選択された関数を開始するまでプログラムを実行します。ソース ビュー
はこれを反映するために更新します。

ブレークポイントの追加 選択した関数の開始点にブレークポイントを追加します (または、すで


にブレークポイントが設定されていれば、ブレークポイントを削除しま
す)。

参照のプロパティ 選択した関数のプロパティ情報を含むメッセージ ウィンドウを表示しま


す。

[変数] フォルダ内で変数を選択すると、その詳細を [ワークスペース プロパティ] の代わりにショートカ


ット メニューに保存します。

ウォッチへの追加 選択した変数を監視ビューに追加します。

参照のプロパティ 選択した変数のプロパティ情報を含むメッセージウィンドウを表示します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 91 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プログラムのブラウズ

関数の参照
ソース ビュー、逆アセンブリ ビュー、ブレークポイント ビューの関数ブラウザを使用すると、含まれる
関数に応じて、アプリケーション ソースや逆アセンブリ内を移動することができます。さらに、ブレー
クポイントをグローバルに特定の関数に設定したり、解除できます。
関数ブラウザを開くには、ソース ビューまたは逆アセンブリ ビューのショートカット メニューにある
[関数の参照] コマンドを使用します。

名称のデマングル
関数名のデマングルはps3demangle.dll により行われます。「デマングルされた」C++ 関数名は、「マン
グルされた」関数名の代わりにデバッガ内各種ビュー (たとえばブレークポイント ビューやコールスタッ
ク ビュー)に表示されます。
マングルされた関数名を確認したい場合には、ps3demangle.dll を ProDG プログラム ディレクトリから
移動するか、ファイル名を変更してください。デバッガがこの DLL を検出できないときは、「マングル
された」関数名をそのままにして、自動的に「デマングルされた」関数名には変換しません。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 92 -
ProDG Debugger for PlayStation®3 ユーザー ガイド

6: 式
この章では、式の使用方法、および情報の表示をカスタマイズする方法について説明します。
この章には、以下のセクションがあります。
• 式の使用
• 式のビルド
• 式の評価
• 変数の自動展開

式の使用
デバッガ使用中は、式入力が必要に感じたり、またはそうした方が便利なときがあります。式には、16
進法の定数や C 変数などの単純なものから、配列からポインタを脱参照して得られる構造タイプキャス
トメンバなど、複雑なものまであります。
ProDG デバッガでは、プログラムにあることがわかっている変数と、広範な選択肢から選べる C および
C++ スタイルの演算子を使用して、こうしたすべての式をビルドできます。
また、式をその場で評価して、正しく定義したかどうかを確認することもできます。
• 式とアドレスの評価機能は、すべてのアクティブなシンボル テーブルを使用して式を評価します。
式は、デバッガのダイアログからアドレスや式、値を尋ねられた場所なら、どこでも使用できます。ウォ
ッチ ビューやローカル ビューは、絶えずこの式を参照するため、式のすべての機能を活用するには、そ
の働きを理解することが重要です。

数式の入力
[数式の入力] ダイアログは、ウォッチ ビューにウォッチを追加するときに、数式を入力するために使用
します。

[詳細] ボタンをクリックすると、以下のようなオプションが表示されます。

式を入力し始めると、マッチするストリングを含むドロップダウン リスト ボックスが表示されます。こ


れらには以下が含まれます。
変数
asm ラベル
関数

以前に入力された式 (履歴エントリ)

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 93 -
ProDG Debugger for PlayStation®3 ユーザー ガイド

チェックボックスでドロップダウン リスト ボックスに表示するかどうかを決定します。たとえば、[関


数] のみチェックした場合には、関数のみがリスト表示されます。

自動入力ボタン を使用すると、部分的に補完した名称を使い、その部分的文字列で始まるすべての変
数のリストを表示することで、変数名の入力を高速化できます。
• 名称の補完機能は、すべてのアクティブなシンボル テーブルで名称を検索します。
検索文字列と一致する名称が複数検出された場合は、[名前の自動完了機能] ウィンドウが表示されます。
たとえば、「d」と入力して自動入力ボタンをクリックすると、下図のように「d」という文字で始まる
名称のリストが表示されます。必要なものをダブルクリックで選択できます。

各シンボルは、そのタイプを反映するアイコンと共に表示されることに注意してください。水色のダイヤ
モンドは変数、ピンクのダイヤモンドは関数、ツリーはクラスまたは構造体です。

アドレスの入力
[ソース] ビューの [アドレスに移動] 機能では、[数式の入力] ダイアログが表示されます。

[数式の入力] ダイアログには、以下の機能が用意されています。
• 名称の補完
• クリップボードから、またはクリップボードへ、式/アドレスのコピー&貼り付け
• ドロップダウン メニューからアクセスできる最近使用した式またはアドレスの履歴

メモ:[アドレスに移動] 機能は、現在の範囲内にある関数に対してのみ場所を特定できます。たとえ
ば、プロジェクトに 2 つ以上の名前領域が存在する場合、この機能では現在の名前領域内にある関数
に対してのみ、場所が特定されます。プロジェクト内の関数を参照するには、常に [関数ブラウザ]
(Alt+B) の使用をお勧めします (「関数の参照」を参照)。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 94 -
ProDG Debugger for PlayStation®3 ユーザー ガイド

式のビルド
式の主な要素は、数値と変数名です。
• 数値は、10 進法、16 進法のいずれかの形式で入力できます。
• 16 進数には接頭辞として「0x」を付ける必要があります。
• 変数名を打ち込めば、変数を入力できます。また、自動入力ボタンを使用すれば、入力を簡略化し
たり、正しい名称を参照しているかどうかを確認できます (「アドレスの入力」参照)。
式をビルドするより複雑な方法には、C および C++ 演算子、ラベル アドレスと関数アドレス、タイプキ
ャストなどがあります。
レジスタ名
式でレジスタ名を使用できます。レジスタ名の前には、レジスタ名が固有の識別子となっていない限り、
変数と区別するため、$ 記号をつける必要があります。
レジスタには、キャストされていない場合は int の C 形式、キャストされている場合は該当するタイプの
C タイプがあります。
タイプキャストとタイプデフ
すべての式は、ちょうど C と同様に、タイプキャストできます。たとえば、ウォッチ ビューに
(int*)$fp と入力すると、以下の文字列が表示されます。
+ (int*)$fp int * -> 00000001

構造タグを使用してタイプキャストを行えますが、構造タグにキャストする際に、struct というキーワー
ドを入力する必要はありません。構造またはクラスにタイプキャストすると、以下の文字列が表示されま
す。
-Tester* (Tester*)$fp = 0x807ff88
-Tester
+unsigned char* m_pName = 0x00000645
+unsigned char* mpLongName = 0xFFFFFFFF

タイプデフにキャストすることもできます。たとえば、(daddr_t)p と入力すると、以下の文字列が表示
されます。
long (daddr_t)p = 0x00003024

ラベル
式でラベルを使用できます。評価機能は、まず変数名の一致作業を行ない、次にラベルを検索します。
ラベルには、int の C タイプがあります。
関数
式で関数名を使用できます。関数名の値は、その関数のアドレスです。
関数は、ウォッチ ウィンドウで以下のように表示されます。
main int () @ 00201020

関数は int の C 形式です。

式の評価

式内の名称検索順序
式中の名称を検索する順序は、以下のとおりです。
(1) 退避させたレジスタ名 ($が先頭についた名称)
(2) C名
(3) ラベル名

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 95 -
ProDG Debugger for PlayStation®3 ユーザー ガイド

式評価機能でのコンテキスト指定子オペレータ
デバッガが、複数回発生する静的変数名の特定のインスタンスを解決できるようには、式評価機能に対し
てコンテキスト指定子オペレータを使用します。
現在は、スタック フレームが指定できます。
コンテキスト指定子の書式は次のとおりです。
{ <attribute list> } <unary-expression>

ここで、<attribute list> はセミコロン (';') で区切られた属性リストです。つまり、タイプキャストに似て


いますが (また、同じ優先順位ですが)、中かっこ ({}) を使用します。

メモ: 属性名は、一意に識別できる最低の長さにまで省略することができます。たとえば、'f:' は
'file:' と解釈されます。

属性の詳細を以下に示します。

stack:<functionname> 指定された関数のスタック フレーム内で見つかるまで、コールス


タックを検索する。検索後、そのスタック フレーム内のローカル
変数を評価するように指定できる。

C++ メソッド名を簡単に指定するため、0 以上の任意の文字に一致


する '*' をワイルドカード指定子として使用できる。たとえば、c::*
は、クラス c 内のすべての関数に一致し、*::Index* は、任意のクラ
ス内の Index というすべての関数に一致する。

例:
{ stack:main } loopnum

上記は、main() のスタックフレームにあるローカル変数 loopnum を評価します。

ソースビューでのホバー評価
コード行の上にマウスのカーソルを置けば、すぐに式を 評価できます。カーソルの下にある式が評価さ
れると、その結果が下図のようなポップアップ へルプに表示されます。

以下のコード フラグメントの [main] 上にカーソルを置くと、ツールチップ内の関数タイプおよびアドレ


ス情報が表示され、変数上では「front_end_game_data.selected_country」式全体を評価し、タイプおよ
び数値情報を表示します。
テキストを選択すると、その選択した範囲のテキストを評価できます。これは下記の例において、変数名
の一部を評価するのにとても便利です。
たとえば以下の「front_end_game_data.selected_country」テキストを選択すると、以前どおりに動作し
ますが、変数の「front_end_game_data」部分のみを選択し、その上にカーソルを置くと、選択した部分
のみを評価し、(この例の場合) そのクラスのタイプおよびアドレス情報が表示されます。
main()
{
front_end_game_data.selected_country = 0;
front_end_game_data.selected_game_mode = WWR_TIME_ATTACK_MODE;
front_end_game_data.selected_class = NOVICE_CLASS;
front_end_game_data.selected_car = WWR_DOUBLE_MOON;
...
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 96 -
ProDG Debugger for PlayStation®3 ユーザー ガイド

変数の自動展開
ProDG のデバッガは、Microsoft Visual C++ の自動展開機能に対応しています。これにより、フローテ
ィング ツールチップ、ウォッチ ビュー、ローカル ビュー、またはオート ビューにおいて、構造体 (また
はクラス) の表示をカスタマイズすることができます。
自動展開は、デバッガ実行ファイルと同じディレクトリにある自動展開定義ファイルが、デバッガによっ
て読み込まれると有効になります。このファイルには、[AutoExpand] セクション ヘッダが含まれる必要
があります。
ProDG では、デフォルトの自動展開ファイル「sn_autoexp.dat」が%SN_PS3_PATH%\bin ディレクトリ
にインストールされます。ユーザー変更は後続のインストールによって上書きされるため、このファイル
は読み込み専用として扱うことが求められます。このファイルには、汎用 STL と PlayStation®3 自動展開
宣言が含まれます。
さらに、デバッガではユーザー定義型ファイル「autoexp.dat」が読み込まれます。これは、さらなるカ
スタマイズを目的として、同じディレクトリに作成することが可能です。
デバッガでは、起動時に両ファイルが読み込まれるのに加え、[ファイル] メニューから [ロード] >
[Autoexp.dat] が選択されたときも再度読み込まれます (詳細は「[ロード] サブメニュー」を参照)。TTY
デバッグ チャンネルでは、これらのファイルの解析に関連するエラーがすべて出力されます。

自動展開の構文
自動展開ファイルは、基本構文と拡張構文の 2 つの構文に従って記述することができます。
基本構文
自動展開ファイルの基本構文は以下のようになります。
[AutoExpand]
type={text}<member{,{bitfield}format}>
...

上記の「=」、「<」、「,」の文字は実際に挿入しますが、「{}」は任意のエレメント、「...」は繰り返し
挿入される任意のエレメントを表します。

type データ タイプの名前

text テキスト文字列 (メンバ名のラベルなど)

member 表示するメンバの名前、または処理されている type のインスタンスを表す「.」

bitfield ビットフィールド指定子 (「ビットフィールド指定子」を参照)

format フォーマット指定子 (「フォーマット指定子」を参照)

例:
Vector3=x=<x,i> y=<y,i> z=<z,i>
DateTime=<日>/<月>/<年> <時間>:<分>:<秒>

拡張構文
自動展開ファイルの拡張構文は、以下のようになります。
[Visualizer]
type{
preview block
children block
}

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 97 -
ProDG Debugger for PlayStation®3 ユーザー ガイド

「{」と「}」文字の中は必須です。

preview block 任意のプレビュー ブロック (「プレビュー ブロック」を参照)

children block 任意の子ブロック (「子ブロック」を参照)

ビットフィールド指定子
ビットフィールド エレメントは、以下の方法で宣言します。
start position: number of bits

start position ビットフィールドの最下位ビットの数。データ タイプの最下位ビットは、0 とし


てカウント

number of bits 表示するビットの数 (最大 32)

たとえば、64 ビット タイプを 2 つの 32 ビット浮動小数点数として表示する場合は、以下を使用します。


"long long" =[vector]x =<.,32:32f> y =<.,0:32f>

フォーマット指定子

文字 説明 サンプル 表示形式

c 1 つの文字 0x0061 'a'

d 符号付きの 10 進整数 0xFFFFFFF1,d -15

e 符号付き科学表記浮動小数点 2./5,e 4.000000e-001

f 符号付き浮動小数点 2./5.,f 0.400000

g 短縮形、e または f 2./5.,g 0.4

h d、i、u、o、x、X のいずれかの 15,lx 0x000F


短縮プレフィックス

i 符号付きの 10 進整数 0xFFFFFFF1,i -15

l d、i、u、o、x、X のいずれかの 15,lx 0x0000000F


プレフィックス

o 符号なしの 8 進整数 0x000F,o 17

s ヌル終端文字列 0x00123456,s "My string"

u 符号なしの 10 進整数 0x000F,u 15

x,X 16 進整数 15,x 0x0000000F

プレビュー ブロック
preview (
preview expression
)

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 98 -
ProDG Debugger for PlayStation®3 ユーザー ガイド

プレビュー ブロックは、ウォッチに従って値フィールドに表示されるテキスト、およびウォッチされる
変数のフローティング ツールチップを決定するために使用されます。
preview expression (プレビュー式) 内の複数エレメントはコンマで区切り、「#(」 と「)」 で範囲を定め
てください。template<*> 構文を使用することにより、テンプレート パラメータ タイプ名に合わせるこ
とも可能です。このタイプは、用語「$Tn」 (このとき、n = 1 ... 8、複数のテンプレート パラメータをサ
ポートする)を使って式の中から参照できます。また、用語「$c」は、現在の式を参照するとき使用し
ます。
例:
preview
(
#("[", $c._Mysize, "]" )
)

プレビュー式は、ネストされた条件ステートメントに対応しています (「条件ステートメント」を参
照)。たとえば、 std::string * については以下のようになります。
preview
(
#(
#if(($c._Mysize) < 0x10)
([$c._Bx._Buf,s])
#else
([$c._Bx._Ptr,s])
)
)

子ブロック
children (
expanded expression
)
子ブロックでは、式が展開された場合に表示される内容が制御されます。子ブロックはプレビュー ブロ
ックと似ていますが、expanded expression (拡張式) 内の個々のエレメントを指定することができます。
拡張式内の複数エレメントには、コンマ区切りであること、および「#(」と「)」で範囲を定められてい
ることが求められます。template<*> 構文を使用することにより、テンプレート パラメータ タイプ名に
合わせることも可能です。用語「$T1」を使用することにより、タイプは式の内部から参照できます。ま
た、用語「$c」は、現在の式を参照するとき使用します。用語「[$c,!]」は、自動展開を使用すること
なく、現在の式の子メンバを表示するために使用できます。
拡張式 内では以下のように、各エレメントに名前を付けることができます。
[name]: [expr,f]

「f」の場所には、フォーマット指定子が入ります (「フォーマット指定子」を参照)。
子式は、ネストされた条件ステートメント (「条件ステートメント」を参照)、および #array ステートメ
ント (「Array ステートメント」を参照) に対応しています。以下はその例です。
children
(
#(
[raw members]: [$c,!],
#if(sizeof($T1) <=1)
(
#array
(
expr: ($c._Map[(($i + $c._Myoff) / 16) %
$c._Mapsize][(($i + $c._Myoff) % 16)]),
size: $c._Mysize
)
)
)
)

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 99 -
ProDG Debugger for PlayStation®3 ユーザー ガイド

条件ステートメント
条件ステートメント (#if、#else、#elif ステートメント) は、プレビュー式と子式の両方で使用するこ
とができます。これらはネストすることが可能で、以下にその例を示します。
preview
(
#if($c._Val[1] != 0)
(
#if ($c._Val[0] != 0)
(
#if ($c._Val[1] >= 0)
(#(($T1)$c._Val[0],"+i*",($T1)$c._Val[1]) )
#else
(#(($T1)$c._Val[0],"-i*",($T1)-$c._Val[1]))
)
#else
(
#if ($c._Val[1] >= 0.0)
(#("i*",($T1)$c._Val[1]))
#else
(#("-i*",($T1)-$c._Val[1]))
)
)
#else
($c._Val[0])
)

Array ステートメント
#array ステートメントは、条件と共にネストすることが可能で、expr と size の 2 つのキーワード表現
が必要とされます。
• 「size」キーワードは、この配列に対して作成されるべき子エレメントの数を表します。
• 「expr」キーワードは、特定の配列子エレメントに対し、デバッガが評価する式です。
$i 構文はカウント変数として使用でき、$c 構文は現在の式を参照するために使用できます。$i 変数は
0 から (size-1) にインクリメントされます。以下はその例です。
#array
(
expr: $c._Myfirst[$i],
size: $c._Mylast - $c._Myfirst
)

List ステートメント
#list ステートメントには、head、size、next の 3 つのキーワード表現が必要とされます。#list ステー
トメントは、単独リンクされたリストをたどるために使用され、各エレメントを現在の表現の「子」とし
て配置します。
• 「next」キーワードは、子ノードにおけるフィールド名を表します。
• 各 $e の表示法を変更するため、修飾子 (「$e._Myval」など) を使用できます (以下の例を参照)。
• レポート対象外とする指標ノードを表すために、オプションで「skip」キーワードを使用できま
す。これが検出されると、走査が停止されるため、指標ノードが最初にある場合は、それ以降で走
査を開始します。
• 表示されるエレメントの数を制限するために、「size」表現を使用することもできます。
「$c」構文は、現在の式を参照するために使用できます。以下はその例です。
#(
#list
(
head : $c._Myhead->_Next,
size : $c._Mysize,
next : _Next

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 100 -
ProDG Debugger for PlayStation®3 ユーザー ガイド

) : $e._Myval,
)

Tree ステートメント
#tree ステートメントには、head、size、left、right の 4 つのキーワード表現が必要とされます。

デバッガでは、left、current、right の走査順を使用してツリーが走査されます。#list と同様に、size:


では子ノードの数を制限でき、skip: では指標を回避できます。また、修飾子 (「$e._Myval.first」な
ど) を使用して各 $e の表示法を変更することもできます (以下の例を参照)。

「$c」構文は、現在の式を参照するために使用できます。
#tree
(
head : $c._Myhead->_Parent,
skip : $c._Myhead,
size : $c._Mysize,
left : _Left,
right : _Right
: $e._Myval.first

Switch ステートメント
#switch ステートメントは、プレビュー ブロック (「プレビュー ブロック」を参照)、または子ブロック
(「子ブロック」を参照) でサポートされています。以下の構文に従う必要があります。
#switch (評価する式)
#case プレビュー/子の結果として生じる値
#default プレビュー/子

たとえば、このシンプルなプレビュー ブロックでは、タイプ「a」メンバの値に対する英語が表示されま
す。
preview
(
#switch ($c.a)
#case 0x0 ("ゼロ")
#case 0x1 ("1")
#default ("2 またはそれ以上")
)

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 101 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

7: ソースおよび逆アセンブリの閲覧
この章では、開発ハードウェア上でソース コードや逆アセンブリ コードを表示する方法について説明し
ます。また、コード内の潜在的ストールを検出するパイプライン分析も取り上げます。
この章には、以下のセクションがあります。
• ソースの閲覧
• 逆アセンブリの閲覧
• ソースと逆アセンブリ内の検索
• パイプライン アナライザ

ソースの閲覧
デバッガでは、プログラムのソースを閲覧し、ソース内を移動することができます。
現在のプログラム カウンタの位置がソース コードで閲覧できる場合は、ソース ペインを開くだけでソー
スを閲覧できます。
• [ウィンドウ] メニューで [新しいビュー] をポイントし、[ソース] をクリックするか、[ソース] ツー
ルバー ボタンをクリックします。この操作によって、ソースビューを持つ新しいウィンドウが開き
ます。
• ソースでプログラム カウンタを見られない場合、またはソースファイルの場所が不明な場合、「ソ
ース ファイルがロードできません」というメッセージが表示されます。

ターゲットが実行を停止しているときはいつでも、ソースビューが開いていれば、ソース ( 文字で表
示) のプログラム カウンタの現在位置を表示して更新します。
• ソース ビュー ショートカット メニューの [PC へ移動] オプションを使用すると、素早く新しいプロ
グラム カウンタ位置に移動できます。

ソースファイルの配置
デフォルトでは、デバッガはアプリケーションのソースファイルを、ELF/PRXファイルがビルドされた
ときの場所を元に検出します。しかし、ソースファイルが後で移動された場合は、必要なファイルを検出
できるよう、新しいパスを指定する必要があります。ソース検索パスの設定についての詳細は、「検索デ
ィレクトリ」を参照ください。
ターゲットで現在実行されているソース コードの行だけでなく、他のどのソース ファイルも閲覧できま
す。
ソース ファイルの場所を特定するには、次の手順に従います。
(1) ソース ビューで右クリックし、 [ソースファイルを開く] を選択します。
(2) 表示されたダイアログで必要なソース ファイルを探して選択します。
新しいソース ビュー タブが開き、選択したソースファイルの内容が表示されます。このビューは、
プログラム カウンタを含むソースビューと同様に使用でき、このファイルでブレークポイントを設
定したり、必要に応じて内容を閲覧できます。
(3) ソース ビューの複数のタブを前方スクロールするには、[次のファイル] ショートカット キー (デフ
ォルトでは Ctrl+等号キー) を押します。
(4) ソース ビューの複数のタブを後方スクロールするには、[前のファイル] ショートカット キー (デフ
ォルトでは Ctrl+マイナス記号) を押します。
(5) ソース ファイルを閉じるには、ビューを選択して [ソース ファイルを閉じる] ショートカット キー
(デフォルトでは Shift+F4) を押します。

メモ: ソース検索パスを通じて、そのもともとの場所以外からファイルをロードしている場合、[ソ
ースファイルをロード] を使用してファイルをロードすると、デバッガはオブジェクトコードとの関係

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 102 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

を推測できません。この場合 [アドレスへ移動] (ソース ビューのショートカット メニュー)を使用して


関数名を入力し、ソース コード内の適切な位置へ移動する方が良いでしょう。こうすれば、ソース検
索パスとビルド情報から、ファイルを探し当てることができます。

ELF デバッグ情報でのソース ファイルのリスト表示


[ファイル ブラウザ] ダイアログでは、ELF ファイルのデバッグ情報内にリストされているソース ファイ
ルを表示できます。
[ファイル ブラウザ] ダイアログは、[ソース] ビューのショートカット メニューから [ファイル ブラウザ]
を選択して開きます。

デフォルトではすべてのソース ファイルが表示されますが、[ファイル:] 編集コントロール ボックスで指


定したテキストを含む名前のファイルのみに限定することもできます。たとえば「ter」と指定すると、
「Terminate.cpp」、「Filter.cpp」、「Filter.h」などのファイルが表示されます。
[存在するファイルを確認] チェックボックスを選択すると、存在するすべてのファイルについては修正時
間と日付が、見つからないファイルすべてについては「ファイルが見つかりません」とダイアログボック
スに表示されます。[検索パスを使用] チェックボックスでは、ファイルがオリジナルの場所からロードで
きない場合、検索パス内のファイルがファイル ブラウザで検索されます。これは ELF/PRX ファイル
が、異なるディレクトリ構造を持つ別のマシンでビルドされた場合に便利な機能です。
また、場所が不明なファイルをすべて表示対象外とすることもできます。これは、リストを右クリックし
て表示される [存在しないファイルを表示] オプションで設定でき、これを解除すると、場所が見つから
ないファイルは表示されなくなります。

このダイアログには、左の列からファイル名、ビルド時の場所、ファイルの最終変更日時が表示され、フ
ァイルが存在しない場合は「ファイルが見つかりません」と表示されます。
ファイルは最初、ファイル名のアルファベット順に表示されますが、列ヘッダをクリックすると、場所順
や日時順に変更できます。また列をダブルクリックすると、昇順/降順を切り替えることもできます。
1 つまたは複数のファイルを選択して [OK] をクリックすると、アクティブになっている [ソース] ビュー
内にファイルが開きます。

ソース ビュー
ソース ビューでは、現在ターゲット上で実行されているアプリケーションのソースを閲覧できます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 103 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

アプリケーションのソース ファイルの場所は、実行可能ファイルに記述されています。ソース ビューを


開くと、デバッガは、プログラム カウンタが元の場所にあるソース ファイルを検出します。しかし、こ
の場所が変更されている場合、または実行可能ファイルがマシンにビルドされていない場合は、[デバッ
グ] メニューの [ソース検索パス] オプションを使用して、デバッガがソース ファイルを検索・検出できる
ディレクトリを入力してください。
このビューを開くと、通常、ソース ファイルのプログラム カウンタがある現在位置が表示されます。し
かし、ソースにプログラム カウンタが表示されない場合は、ソースを表示できないことを示すメッセー
ジがビューに表示されます。ソース ビューがアクティブ ビューである場合、プログラム カウンタはター
ゲット ステータスが変更される度に自動的に更新されます。このため、ソース ビューの現在位置は常に
確認することができます。
([行番号を表示] がチェックされていれば) ビュー左側の枠ストリップに行数、ブックマーク、ブレークポ
イント マークなどを表示します。このストリップの背景/前景色は、オプション ダイアログのソース設
定で変更できます (「ソース設定」参照)。ソース ビューで使用されているアイコン (プログラム カウンタ
やブレークポイントなど) の色は、[オプション] ダイアログの [フォントと色] 設定で変更することができ
ます (「フォントと色設定」を参照)。
複数行のコメント (Cスタイルの/* */マーカー使用) が認識されており、それに従って色分けされていま
す。
ソース ビューでは、ビューの上端にタブ バーも表示できます。ここには、ロードされた各ファイルにそ
れぞれタブが用意されています。
• 各タブには、(パスを除く) ファイル名が表示されます。
• ポインタをタブに合わせると、ツールヒントに完全パスとファイル名が表示されます。
• 各タブには、5 つのオプションを含むそれぞれ独自のコンテキスト メニューが用意されています。
[ファイルを閉じる] によってカーソル下のタブを削除します。[他のタブを閉じる] をクリックする
と、選択されているタブ以外のタブがすべて閉じます。[ソース ファイルを開く] によって他のソー
ス ファイルが開けます。[含まれるフォルダーを開く] をクリックすると、Windows エクスプローラ
が開き、ファイルが含まれているフォルダが表示されます。[完全パスのコピー] をクリックすると
完全パスとファイル名がクリップボードにコピーされます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 104 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

式チップ
ソース ビューでは、ツールチップが式チップに置換されます。基本的なツールチップ情報の表示 (式の評
価や値の表示) に加え、式チップでは値の編集が可能となります (式をウォッチ ビューにコピーしてそこ
で変更する必要がありません)。
式チップの概観と機能は、フローティング ウォッチ ビューを小型化した感じになります。すなわち、式
チップには 2 つの列が含まれ、左の列には式名が、右の列には値が表示されます。

マウス ポインタが置かれている式が展開可能な場合、式チップの左側には展開ボックスが表示されま
す。マウス ポインタをこの上に置くと、該当オブジェクトのメンバ アイテムを含むさらなる式チップが
作成され、展開可能な任意のメンバ アイテムに対しても同様に処理されます。
式チップを右クリックすると、式において実行可能な追加処理を含むショートカット メニューが表示さ
れます。

式をコピー 式の名前をクリップボードにコピーします。

値をコピー 関連データをクリップボードにコピーします。

ウォッチに <式> を (完全に展開された) 式を、現在の CPU に対して最後に使用されたウォッチ


追加 ビューに追加します。ビューが存在しない場合は、新しいビューを作成しま
す。

<表示形式> 形式オプションを 1 つ選択します。自動検出 ([オート]) を使用、または選択


した変数を 16 進数や 10 進数として表示します。

異なる場所にビルトインされているコードの閲覧
移動されていたり、異なる場所にビルトインされている SELF ファイルを読み込むと、デバッグ情報とし
ては SELF ファイルのオリジナルの場所に基づいたソース ファイル情報が利用されます。このため、デバ
ッガはソース コードを探し出すことができなくなります。このようなケースにはダイアログ ボックスが
表示され、ソース ファイルの場所を特定するよう促されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 105 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

新しい場所が見つかると、デバッガはパスの最初の部分に対してパス マッピング エントリを作成し、フ


ァイル名を新しい場所にリダイレクトします。「パスのマッピング」を参照してください。

たとえば、プロジェクトが次のフォルダ内にビルトインされている場合を見てみましょう。
C:\usr\local\cell\samples\Console_Output\MyProject\
このフォルダは次の新しい場所に移動されたとします。
C:\samples\Console_Output\MyProject\
デバッガで、新しい場所から SELF ファイルを開くと、当該のソース ファイルに対して新しい場所を指定
するよう促されます。選択を行うと、デバッガは両方のパスを確認し、パス マッピングを追加して、
'C:\usr\local\cell\samples\Console_Output' というすべてのインスタンスを
'C:\samples\Console_Output\' で置き換えます。
これにより、PPU デバッグと SPU デバッグの両方のパス マッピングが作成され、場所の指定を促すこと
なく、デバッガは自動的に「MyProject」フォルダ内に格納されているその他のファイルの場所を特定し
てロードします。
パス マッピングはモジュール設定に追加され、プロジェクト (.snproj) ファイル内に保存され、次にこの
プロジェクトが読み込まれると再利用されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 106 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

ソース ビューのショートカット メニュー

すべて選択 ソース ビューのすべてのテキストを選択します。

最近使用したソース 最近アクセスしたソース ファイルのサブメニュー リストにアクセスする場


ファイル 合に使用します。

検索 ソース ファイルのテキストを検索するためのダイアログを開きます。テキス
トが検出されたら、そのテキストを含む行がカーソルで示されます。

次を検索 前述の [検索] コマンドを繰り返します。

表示 [表示] サブメニューにアクセスします。「表示サブメニュー」を参照。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 107 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

定義に移動 カーソルが置かれている関数名の開始点まで移動します。

定義に移動を [定義に移動] が選択されているときに [定義に移動を取り消す] を選択する


取り消す と、前の場所に戻ります。

アドレスに移動 見たいビューの特定のアドレスをメモリに入力するダイアログを開きます。
16 進数のアドレスを入力する場合は、それに 0x を付けます。必要なアドレ
ス、記号、式などを入力して閲覧したいメモリ部分を指定できます。シンボ
ル名の最初の文字を入力した場合には、[自動入力] ボタンを使用すると、ア
プリケーションで利用可能なシンボルのリストが提供されます (「アドレス
の入力」を参照)。

モジュールへ移動 埋め込みモジュールの開始点に移動します。

関数の開始点に移動 現在キャレット記号 (^) を含んでいる関数の開始点に移動します。

関数の終了点に移動 現在キャレット記号 (^) を含んでいる関数の終了点に移動します。

ソースに 移動 選択された行番号が中心になるようにソースを変更します。

逆アセンブリに移動 ソース ファイルの対応する逆アセンブリ ビューに切り替えます。

関数の参照 アプリケーションの関数に沿ってソースを閲覧できるダイアログを開きま
す。さらに、このダイアログからアプリケーションの特定の関数にブレーク
ポイントを設定したり、ブレークポイントを解除できます。

ブックマークの追加 現在の行にブックマークを設定/削除します。ブックマークは左のマージン
/削除 に薄青色で表示されます。

次のブックマーク 次のブックマーク行の開始点にカーソルを配置します。この機能を使用する
と、それ以降ブックマークがない場合には、ファイルの始まりから検索が行
われます。

前のブックマーク 前のブックマーク行の開始点にカーソルを配置します。この機能を使用する
と、前のブックマークがない場合には、ファイルの終わりから検索が行われ
ます。

ブックマークを ブックマークをすべて削除します。
クリア

ブレークポイントの 現在の行にブレークポイントを設定します。ブレークポイントは左のマージ
追加 ンに茶色の点で表示されます。

スレッド特有の スレッド特有のブレークポイントを設定します。「スレッド特有のブレーク
ブレークポイントの ポイント」を参照。
追加

トレースポイントの 現在の行にトレースポイントを設定します。「トレースポイント」を参照。
追加

ブレークポイントの 現在の行のブレークポイントを無効にします。
無効化

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 108 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

ブレークポイントの 現在の行のブレークポイントを削除します。
削除

ブレークポイントの [ブレークポイントのプロパティ] ダイアログを表示します。「[ブレークポイ


プロパティ ントのプロパティ] ダイアログ」を参照。

すべてのブレーク ブレークポイントをすべて削除します。
ポイントを削除

PCをトラックする このチェックボックスをオンにすると、逆アセンブリ ビューのプログラム


カウンタの場所が自動的に追跡されます。

PCに移動 ビューで閲覧しているソースを変更して、プログラム カウンタが現在設定さ


れている行を表示するようにします。ターゲットが停止している時のみ有用
です。

カーソル位置にPC プログラム カウンタを、現在の行に設定します。「>」記号が指定行へ移動


をセット し、プログラム カウンタがリセットされたことを示します。新しいプログラ
ム カウンタの位置までの間にある行は実行されないのでご注意ください。

カーソルまで実行 現在の行までプログラムを実行します。「>」記号が指定行へ移動し、プロ
グラム カウンタがリセットされたことが確認できるはずです。

アドレスまで実行 プログラムのアドレスを選択できます。

外部エディタでファ 外部エディタ の [オプション] ダイアログでソース設定グループが [カスタム]


イルを開く に設定されている場合 (「ソース設定」を参照)、このオプションにより外部
エディタが起動され、このソース ファイルが同じ場所で編集できます。

ファイルの更新 選択したファイルを更新します。

全ファイルの更新 ソース ビューのすべてのファイルを更新します。

ソース ファイルを このコマンドにアクセスしているソース ビューに、別のソース ファイルを


開く ロードするよう指定できます。[ファイルを開く] ダイアログが表示され、開
くソース ファイルが選択できます。ロードするファイルを検出すると、その
ファイルが、ソース ビューにもともと表示されていたファイルに代わって表
示されます。このコマンドは、常に選択したソース ファイルを新しいソース
ビューで開く [ファイル] メニューの [ソース ファイルをロード] コマンドと
はやや異なります。

ファイル ブラウザ ELF ファイルのデバッグ情報内のソース ファイルをリスト表示します。この


オプションは、プログラムをロードするまで使用できません。

表示サブメニュー

インジケータ マージン チェックしている場合、左のマージンにプログラム カウンタ、ブックマ


を表示 ーク、ブレークポイントを表示します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 109 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

行番号を表示 チェックしている場合、ソース ファイルのそれぞれの行に対する行数を


表示します。

EUC-JP モード このチェックボックスをオンにすると、現在のエンコーディング メソッ


ド検出 (ShiftJIS または デフォルトの UTF8) が無効にされ、EUC
(Extended Unix Code) エンコーディングが有効になります。

ShiftJIS モード このチェックボックスをオンにすると、現在のエンコーディング メソッ


ド検出 (EUC-JP またはデフォルトの UTF8) が無効にされ、ShiftJIS エンコ
ーディングが有効になります。

逆アセンブリの閲覧
逆アセンブリビューが開いている場合、ターゲットが実行中止する度にビューの内容が更新され、アプリ
ケーション逆アセンブリ内のプログラム カウンタの現在位置が表示されます ( マークで表示)。
プログラム カウンタの現在位置を含む新しい逆アセンブリ ビューを開くには、次の手順に従います。
• [ウィンドウ] メニューで [新規ビュー] をポイントして [逆アセンブリ] をクリックするか、[逆アセン
ブリ] ツールバー ボタンをクリックします。
逆アセンブリ ビューを含む新しいウィンドウが表示されます。このビューには、現在実行されてい
るコードの逆アセンブリが表示されます。[PC に移動] コマンドを使うと、プログラム カウンタが閲
覧できます。

逆アセンブリ ビュー
逆アセンブリ ビューはプログラム コードの逆アセンブリの閲覧に使用されます。このビューには、ソー
ス コード、アドレス、オペコード、逆アセンブリが表示されます。
PPU メモリに組み込まれた SPU コードは、「.spu_image」と呼ばれるセクション内にある場合、逆アセ
ンブリ ビューによって自動的に検出されます。続いて、そのメモリが SPU コードとして逆アセンブルさ
れ、別の色で表示されます。

逆アセンブリ ビューは以下に示す 3 つの情報列で構成されています。


• 1 列目には、アドレスまたはラベルが表示されます。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 110 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

• 2 列目には、16 進数の命令を表示します。この列はショートカット メニューの [コード バイトを表


示] オプションのチェックを外すことで非表示にできます。
• 3 列目には、逆アセンブリの命令を表示します。

プログラム カウンタの現在位置には、1 列目の前に 記号が表示されます。


[逆アセンブリ] ビューがアクティブである場合、[逆アセンブリ] ビューは現在のプログラム カウンタの
値を追跡します。
[逆アセンブリ] ビューでは、現在カーソルのある行が、四角い点線で囲まれてハイライト表示されます。
これによってユーザーは、このビューがアクティブでない場合でも、カーソルのある行をすぐに確認する
ことができます。
スペースキーを押すと、ソース ビューと逆アセンブリ ビューの切り替えができます。

命令のヘルプ
命令の上にマウスを移動すると、命令の概要がチップ ビューに表示されます。この機能はデフォルトで
ON に設定されていますが、[逆アセンブリ] ビューのサブメニュー (Ctrl+I) 上の [命令のヘルプ] オプショ
ンを使うと、オン/オフが切り替えられます (「逆アセンブリ サブメニュー」を参照)。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 111 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

[逆アセンブリ] ビューのショートカット メニュー

すべて選択 ソース ビューのすべてのテキストを選択します。

最近使用したソース 最近アクセスしたソース ファイルのサブメニュー リストにアクセスする


ファイル 場合に使用します。

検索 ソース ファイルのテキストを検索するためのダイアログを開きます。テキ
ストが検出されると、そのテキストを含む行がカーソルで示されます。

次を検索 前述の [検索] コマンドを繰り返します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 112 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

逆アセンブリ [逆アセンブリ] サブメニューにアクセスします。「逆アセンブリ サブメニ


ュー」を参照。

表示 [表示] サブメニューにアクセスします。「表示サブメニュー」を参照。

定義に移動 カーソル下の関数の開始点に移動します。

定義に移動を取り消す [定義に移動] が選択されているときに [定義に移動を取り消す] を選択する


と、移動する前の場所に戻ります。

アドレスに移動 見たいビューの特定のアドレスをメモリに入力するダイアログを開きま
す。16 進数のアドレスを入力する場合は、前に 0x を付けます。必要なア
ドレス、記号、式を入力して、閲覧したいメモリ部分を指定できます。シ
ンボル名の最初の文字を入力した場合には、[自動入力] ボタンを使用する
と、アプリケーションで利用可能なシンボルのリストが提供されます
(「アドレスの入力」を参照)。

モジュールへ移動 埋め込みモジュールの開始点に移動します。

関数の開始点に移動 現在キャレットを含んでいる関数の開始点に移動します。

関数の終了点に移動 現在キャレットを含んでいる関数の終了点に移動します。

ソースに移動 ソース ファイルに対応するソース ビューに切り替えます。

関数の参照 機能ブラウザを開くと、アプリケーションの機能表示に移動し、その閲覧
ができます。「関数の参照」を参照。

ブックマークの追加/ 現在の行にブックマークを設定/削除します。ブックマークは左のマージ
削除 ンに薄青色で表示されます。

ブレークポイントの 現在の行にブレークポイントを設定します。ブレークポイントは左のマー
追加 ジンに茶色の点で表示されます。

スレッド特有のブレー スレッド特有のブレークポイントを設定します。「スレッド特有のブレー
クポイントの追加 クポイント」を参照。

トレースポイントの 現在の行にトレースポイントを設定します。「トレースポイント」を参
追加 照。

ブレークポイントの 現在の行のブレークポイントを有効/無効にします。
有効/無効

ブレークポイントの 現在の行のブレークポイントを削除します。
削除

ブレークポイントの [ブレークポイントのプロパティ] ダイアログを表示します。。「[ブレーク


プロパティ ポイントのプロパティ] ダイアログ」を参照。

すべてのブレーク すべてのブレークポイントを削除します。
ポイントを削除

数式にロック 表示した逆アセンブリを [ロック数式をセット] で指定した式にロックしま

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 113 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

す。このオプションが有効のときは、逆アセンブリ ビューで PC の位置を


追跡する代わりに、ロックしたアドレスを表示します。

ロック数式をセット アドレスを評価する式を指定できます。

PCをトラックする このチェックボックスをオンにすると、逆アセンブリビューのプログラム
カウンタの位置が自動的に追跡されます。

PCに移動 ビューで閲覧する逆アセンブリを変更して、プログラム カウンタが現在設


定されている行を表示するようにします。ターゲットが停止している時の
み有用です。

カーソル位置にPCを プログラム カウンタを、現在の行に設定します。「>」記号が指定行まで


セット 移動し、プログラム カウンタがリセットされたことが確認できるはずで
す。新しいプログラム カウンタの位置までの間にある行は実行されないの
でご注意ください。

カーソルまで実行 現在の行までプログラムを実行します。「>」記号が指定行へ移動し、プ
ログラム カウンタがリセットされたことが確認できるはずです。

アドレスまで実行 プログラムのアドレスを選択できます。

ブランチまで実行 分岐命令に到達するまで、スレッドを実行します。

ソースのステップを 単一ステップを実行します。
強制

全ファイルの更新 選択したファイルを更新します。

ソースファイルを開く このコマンドにアクセスしているソース ビューに、別のソース ファイル


をロードするよう指定できます。[ファイルを開く] ダイアログが表示さ
れ、開くソース ファイルが選択できます。ロードするファイルを検出する
と、そのファイルが、ソース ビューにもともと表示されていたファイルに
代わって表示されます。このコマンドは、常に選択したソース ファイルを
新しいソースビューで開く [ファイル] メニューの [ソースファイルをロー
ド] コマンドとはやや異なります。

ファイル ブラウザ ELF ファイルのデバッグ情報内のソース ファイルをリスト表示します。こ


のオプションは、プログラムをロードするまで使用できません。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 114 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

逆アセンブリ サブメニュー

Auto / PPU / SPU / RSX 逆アセンブラのフォーマットを 1 つ選択します。

パイプライン オプション パイプライン アナライザのオプションを選べるサブメニューへア


クセスできます。選択されているときには、パイプライン分析デ
ータは逆アセンブリビューに表示されます。「パイプライン アナ
ライザ」 を参照。

アドレスを NOP にセット 選択したアドレスを NOP オペコードに設定します。

ポインタに追従 (アドレス) 現在の行のアドレスに移動します。任意のポインタに追従できま


す。

ポインタに追従の取り消し 以前のアドレスに戻ります。

逆アセンブリをファイルに保存 逆アセンブリをファイルに保存できます。「逆アセンブリをファ
イルに保存」を参照。

ソース コードを表示 チェックしている場合、逆アセンブリを組み込んだソース コード


を表示します。

コード バイトを表示 チェックしている場合、その命令の 16 進標記を含んだ拡張欄を


表示します。

レジスタの色 チェックしている場合、レジスタをカラーで表示します。

命令のヘルプ 選択されていると、チップ ビューに、カーソルの下にある命令の


説明が表示されます (「命令のヘルプ」および「ソース設定」を
参照)。

長い命令を切り詰める RSX の命令が極端に長い場合、これを選択すると表示される行数


が 64 行に切り詰められます。切り詰められた場合には、命令の
最後に […] と表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 115 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

表示サブメニュー

インジケータ マージン チェックしている場合、左のマージンにプログラム カウンタ、ブックマ


を表示 ーク、ブレークポイントを表示します。

行番号を表示 チェックしている場合、ソース ファイルのそれぞれの行に対する行数を


表示します。

EUC-JP モード このチェックボックスをオンにすると、現在のエンコーディング メソッ


ド検出 (ShiftJIS またはデフォルトの UTF8) が無効にされ、EUC
(Extended Unix Code) エンコーディングが有効になります。

ShiftJIS モード このチェックボックスをオンにすると、現在のエンコーディング メソッ


ド検出 (EUC-JP またはデフォルトの UTF8) が無効にされ、ShiftJIS エンコ
ーディングが有効になります。

レジスタの色分け
逆アセンブリ ビューのレジスタは色分けされています。この機能では、現在のカーソル位置にある命令
が分析され、読み込み元または書き込み先のレジスタが決定されます。これらレジスタのオカレンスが表
示全体を通じて適宜色付けされるため、使用されているレジスタの場所を簡単に特定できるようになりま
す。
逆アセンブリ ビューのショートカット メニューでは、[逆アセンブリ] サブメニューの [レジスタの色分
け] オプションを選択することにより、レジスタのカラーリングを有効/無効に設定できます。[オプショ
ン] ダイアログを使ってもレジスタの色を設定できます (「ソース設定」を参照)。レジスタ ビューでは、
レジスタが同じ色でハイライト表示されます。

逆アセンブリをファイルに保存
逆アセンブリは、[逆アセンブリ] サブメニューから [逆アセンブリをファイルに保存] オプションを使用
することにより、アセンブリ形式のファイル (.s) に保存できます (「逆アセンブリ サブメニュー」を参
照)。
[ファイルの逆アセンブル] ダイアログボックスが表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 116 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

開始アドレス 保存する逆アセンブリの最初の行のアドレスです。

終了アドレス 保存する逆アセンブリの最後の行のアドレスです。

デフォルトの基数 選択された場合、アドレスが 16 進数と見なされます。


(16進数)

コードのバイト数を 選択された場合、コード バイトが含まれます。


表示

パイプライン分析を 選択された場合、パイプライン アナライザが含まれます (「パイプライ


表示 ン アナライザ」を参照)。

ラベルを表示 選択された場合、ラベルが含まれます。

ソースと逆アセンブリを同時に閲覧
同じビューにソースと逆アセンブリを表示する方法は次のとおりです。
• 逆アセンブリ ビューを開きます。「逆アセンブリの閲覧」参照。
• ショートカット メニューの [表示] サブメニューで [ソース コードの表示] オプションにチェックマー
クを付けます。

ソースと逆アセンブリ内の検索
テキスト エディタでソース ファイル内を移動するのと同じように、ソースの別の場所を閲覧できます。
• ソース ビューでの場所を覚えておくため (および後で戻るため) にブックマークを使用できます。
• ソース ビューと逆アセンブリ ビュー間の切り替えをスペース キーで行えます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 117 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

ブックマークの使用
ブックマーク (しおり) を使用してソース ビューの任意の場所に後で簡単に戻ってくることができます。
• Ctrl+F2 でブックマークを追加します。カーソルのある行の境界線に、青のマーカーが表示されま
す。
• 異なる部分のソース ファイルを閲覧する時は <F2> でブックマークのある行まで戻ります。
• ソース ファイルには複数のブックマークを挿入できます。<F2> を押すとカーソルが現在の位置から
最後のブックマークに到達するまで、次のブックマークに移動します。最後まで到達すると、ファ
イルの初頭から検索を開始します。
• カーソルのある場所から逆方向に検索したい時は <Shift+F2> を使用してください。
• デバッガを終了すると、すべてのファイルのブックマークは設定ファイルに保存され、次回デバッ
ガを実行する時にレストアされます。

テキストの検出
[検索]、[次を検索] の各ショートカット メニュー オプションを使用すれば、ソース ビュー内で検索文字
列を簡単に探し当てられます。必要ならば、大文字・小文字を区別して検索することもできます。
テキスト文字列を検索するには、次の手順に従います。
(1) テキスト文字列を検索するには、[検索] ショートカット メニュー オプションを使用します。
(2) 検索ダイアログの表示で、検索文字列を定義できます。

(3) [検索項目] フィールドには、最近検索した文字列 (最後に検索したものが最初) のドロップダウン履


歴リストを含んでいるため、繰り返し検索するときに再入力する必要はありません。
(4) 以下をチェックすることにより、一致する検索結果数を制限したり、増加したりできます。

大文字と小文字を区別 このチェックボックスをオンにすると、一致文字列の大文字・小文字が検
する 索文字列と同じでなければ、一致と見なしません。

完全に一致する項目を このチェックボックスをオンにすると、一致文字列が完全一致でなければ
検索 (一致するサブ文字列が見つからないなど)、一致と見なしません。

上方向に検索 チェックしている場合、カーソルの位置から上方向に検索します。

正規表現を使用 チェックしている場合、[検索項目] フィールドで正規表現が使用できま


す。「正規表現」を参照。

メモ:これらのオプションは、アプリケーションの継続時間内のみ有効であり、アプリケーション 終
了時に設定ファイルに保存されることはありません。
(5) 文字列が検出されたら、最初に検出された文字列を含むソース行がソース ビュー内で強調表示され
ます。
(6) テキスト文字列の検索を続けるには、[次を検索] ショートカット メニュー オプションを使用しま
す。

正規表現
[検索] ダイアログは、正規表現に対応しています (「テキストの検出」を参照)。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 118 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

正規表現は、文字列検索で使用される文字列のパターンを記述する標準的な方法です。正規表現を作成す
るには、所定の書式に従う必要があります。
正規表現は、文字、文字列、および特殊記号からなり、算数式に類似しています。また算数式のように、
必要に応じて括弧 (すなわち(expr)) で囲んで正規表現を式のほかの部分から区切ることができます。
• 文字リテラル。これは文字、たとえば「A」は正規表現の一部であることを示します。非印字文字は
拡張テキスト フォーマット文字、すなわち'\ '、 '\n'、 '\r'、 '\t' 、 '\v'、あるいは 16 進数とみなさ
れます (「\xnn」など。ここで nn は 16 進数を示し ます)。'\*'、 '\+'、 '\?'、 '\.'、 '\|'、 '\['、
'\]'、 '\('、 '\)'、 '\-'、 '\$'、 '\^'などの句読点および記号もまた、正規表現書式においては特別な意
味をもつために、エスケープ文字となります。
• 文字セット。これは、ありうる値の範囲において一致があることを示し、式は「[set]」のように角か
っこでくくられます。式の集合は、複数のサブセットからなり、たとえば、式「[0-9A-Za-z]」はい
ずれかの英数字文字セットと一致します。文字集合を、始めの角かっこのすぐ後に「^(not、否を示
す)」を置いて反意にできます。したがって、「[^0-9A-Za-z]」はいずれかの非英数字文字セットと
一致することになります。特殊文字「.」もいずれかの文字に一致します。
• 連結式。2 つの式を連結して、より大きな式を生成できます。たとえば「_[A-Za-z]」は、第 1 の文
字がアンダーバー「_」で、第 2 の文字がアルファベットであるいずれかの文字列と一致します。2
つの式は、以下のように OR symbol 「|」で区切られます。
"[0-9]+|[A-Za-z_][A-Za-z_0-9]*"

* は整数あるいは C 識別子に一致します。
• 演算子。以下のように様々な特殊記号を使用して、すぐ前の式を変更できます。
expr* expr の 0 回の繰り返しに一致する
expr+ expr の 1 回以上の繰り返しに一致する
expr? expr の少なくとも 1 回の発生に一致する
[検索項目] フィールドの右にある [>] ボタンにより、次の正規表現メニューが表示され、ここから一般的
に使用されるいくつかの正規表現シンタックスが選択できます。

デバッガで対応している正規表現の全リストについては、「付録 B: 正規表現シンタックス」を参照して
ください。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 119 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

パイプライン アナライザ
パイプライン アナライザは静的分析ツールで、コード内の潜在的ストールを検出し、リファクタリング
が必要と推測される箇所をハイライト表示します。
パイプライン分析データは、逆アセンブリ ビューの [逆アセンブリ] サブメニューで選択されている場合
に表示されます (「逆アセンブリ サブメニュー」を参照)。ストール情報は、逆アセンブリ テキストの右
側に表示されます。

PPU
PPU では、以下のような画面が表示されます。

PPU パイプライン アナライザの出力には、以下の情報 (右側) が以下の順番で含まれます。


命令の実行に 1 サイクル以上要する (ストール) 場合は、2 桁の数値が表示されます。この数値は、この命
令が CPU サイクルにおける追加ストール時間を表します。この数値は、「##+#」形式で 2 つのセクショ
ンに分割して表示される場合もあり、一方の数値は命令 (レジスタ依存など) の実行を開始できるまでの
時間、もう一方の数値は命令 (パイプライン化されていないマルチ サイクル演算「mul」や「div」など)
の所要時間を表します。
かっこに囲まれた次の数字は、そのストールの原因となっている命令のアドレスです。
次にストール コード、およびストールの理由を表す略語 (以下を参照) が表示されます。

MC マイクロコード命令。

CSI コンテキスト同期命令。

REG 前の演算へのレジスタ依存。

PIPE 命令が二重発行できない。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 120 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

FLUSH 命令によるパイプライン フラッシュ。

LSU LSU 演算が、前の LSU 演算または FXU 演算に依存。

LHS 命令が「ロード - ヒット - ストア」ペナルティの原因になる可能性が高い (以下の「ロ


ード - ヒット - ストア予測」を参照)。

PIPE ストール コードの場合、ディスパッチ ペアの命令は、便宜上 2 つ目の命令のみが画面上でフラグ付


けされますが、両方とも単一発行されます。また、PIPE が唯一のストール原因の場合は、ストール持続
時間は表示されません。

00016018 980100CE stb r0,0xCE(r1) 03 (00016014) REG LSU

この場合は、アドレス 0x00016014 のオペコードへの依存性が原因で、オペコード ストールが 3 サイクル


にわたって続いた、ということを意味します。このストールの理由は、レジスタ依存および LSU パイプ
ライン バブルです。
制限事項:
• この概算の目的において、メモリからのロード処理は L1 キャッシュ (2 サイクルのレイテンシー) の
ヒットとされます。PPU パイプライン アナライザでは、キャッシュ分析は実行されません。
• ここでは、リニア コードの分析のみが実行され、分岐の追跡やループの検証は実行されません。
• 表示されるタイミングは、概算値または予測値です。実際のストールの遅れは、ほかのハードウェ
ア スレッドの処理 (実行中は、同じ優先度の 2 つのスレッドから交互に命令が発行された場合にレイ
テンシーが半減) などの、さまざまな要因に影響されます。これは、1 つのハードウェア スレッドと
して実行されているコードの分析をベースに、潜在的な問題を意味する LHS の遅延において顕著に
なります (ほかのハードウェア スレッドが同時に命令を発行していないことが前提)。
PPU パイプライン ハザードに関する詳細は、『PPE Users Manual』を参照してください。
ロード - ヒット - ストア予測
デバッガの PPU パイプライン アナライザには、ロード - ヒット - ストア (LHS:Load-Hit-Store) 予測
機能が搭載されています。LHS ペナルティの詳細は、『PPE Users Manual』を参照してください。基本
的に、メモリへのストアから約 20 サイクル以内に PPU が同じメモリ アドレスからのロードを実行した
場合、大きなストールが発生します。この場合デバッガでは、命令が参照したそのメモリ アドレス、お
よびその命令間の時間に対して部分的な分析が追加実行され、分析結果に LHS ペナルティの可能性が現
れた場合は、パイプライン アナライザにフラグが付けられ、ペナルティ サイズの概算値が表示されま
す。パイプライン アナライザでは、LHS ストール コードに続いて、角かっこに囲まれた数値 (ストア以
降のサイクル数を表す) が表示されます (例:LHS[7])。これを改善するには、潜在的ストールを避けるた
め、この数値ができるだけ 20 に近づくようにコードの再編成を行います。
たとえば、r1 のコンテンツが不明な場合でも、これらの命令が集中して発行された場合は LHS ペナルテ
ィの原因になるということを、パイプライン アナライザが判定します。
std r4,0x0008(r1)
...<other code here>
lvx v0,0,r1

また、これら 2 つの命令間で r1 が変化した場合は、これが無視されます。


パイプライン アナライザは、ボトム ビットのみが LHS 判定に使用されることも認識しているため、以下
のような「偶発的」な LHS ケースも識別します。
std r4,0x0010(r1)
...
lwz r0,0x1010(r1)

ここでは、レジスタの特定コンテンツは考慮されないため、異なるベース レジスタからのアクセスなど
では LHS は検出されません。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 121 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

SPU
SPU では、以下のような画面が表示されます。

SPU パイプライン アナライザの出力には、以下の情報 (右側) が以下の順番で含まれます。


命令の実行に 1 サイクル以上要する (ストール) 場合は、2 桁の数値が表示されます。この数値は、この命
令が CPU サイクルにおける追加ストール時間を表します。倍精度演算などの二重発行命令の場合は、
PPU パイプライン アナライザと同様に、この遅れは「08+6」などの形式で 2 つのセクションに分割して
表示されます。
かっこに囲まれた次の数字は、そのストールの原因となっている命令のアドレスです。
次にストール コード、およびストールの理由を表す略語 (以下を参照) が表示されます。ストール コード
には以下があります。

REG 前の演算へのレジスタ依存。

ODD ODD 命令が偶数アドレスにある。

EVN EVEN 命令が奇数アドレスにある。

LATCH 前の命令とのオペランド ラッチの衝突。

FLUSH 命令によるパイプライン フラッシュ。

HSTALL 分岐でのヒント トリガ待機中のヒント ストール。

?HINT デバッガがこの分岐のヒントを認識できない。

ODD 命令が EVEN ディスパッチ スロットにある場合、または EVEN 命令が ODD ディスパッチ スロッ
トにある場合、そのディスパッチ ペア内の両方の命令が単一発行されます。デバッガには便宜上、不適
切にアラインされた命令のみが表示され、ペアの両方の命令は単一発行としては表示されませんが、依存
性の遅れを計算する際には、両方の単一発行によって発生したパイプラインの遅れが考慮されます。

000184 7A80C103 fi $3,$2,$3 02 (0000017C) REG EVN

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 122 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ソースおよび逆アセンブリの閲覧

この場合は、アドレス 0x0000017C のオペコードへの依存性が原因で、オペコード ストールが 2 サイクル


にわたって続いた、ということを意味します。このストールは、レジスタ依存、およびこのオペコードが
最適にアラインされていないことが原因となっています。
SPU パイプライン ハザードに関する詳細は、『SPE Users Manual』を参照してください。
分岐ヒント: SPU パイプライン アナライザは、分岐命令に応じてヒントが特定されます。分岐に近すぎ
る位置でヒントが発行された場合は、ヒントが機能しないため、デバッガにはその分岐が予測失敗として
表示されます。それ以外の場合、ヒントのストール時間が表示されます (ストールが発生した場合)。特定
の分岐命令に対応するヒントを特定できない場合は、分岐の隣に「?HINT」と表示されます。
制限事項:
• すべての遅延とストールのタイミングは概算値ですが、SPU パイプラインは PPU よりシンプルで予
測しやすくなっており、SPU のローカル ストアには複雑なキャッシュ構造もなく、1 つのハードウ
ェア スレッドのみが使用されるため、タイミングの予測はより正確なものとなります。
• 見つからない分岐ヒントが「?HINT」として表示された場合は、これがコードの直線的な分析であ
るということに注意する必要があります。この分析では、分岐の追跡やループの検出は実行され
ず、対象となるヒントを検索する際は、命令履歴の短いセクション (過去 100 サイクル程度) のみが
検証されるため、不規則に配置されたヒントは検出されません。SPU C コンパイラから自動的に提
供されるヒントの多くは検出されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 123 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

8: ブレークポイントおよびステッピング
この章では、異なるタイプのブレークポイントの使用や、コード内のステッピングを行うことにより、開
発ハードウェア上でコードをデバッグする方法について説明します。
この章には、以下のセクションがあります。
• プログラム実行の中止
• プログラムを 1 ステップずつ実行
• ブレークポイント ビュー
• 条件付きブレークポイント
• スレッド特有のブレークポイント
• 埋め込み SPU 内のブレークポイント - グローバル ブレークポイント
• トレースポイント
• ハードウェア ブレークポイント
• メモリ アクセス トラップ (MAT)

プログラム実行の中止
コード内のバグを追跡する際、ターゲット上でのコードの実行を完全に制御しつづけることがカギとなり
ます。このセクションでは、コードにブレークポイントを設定する方法と、コードをステップする手順に
ついて解説します。
• ターゲット上で実行しているプログラムは、随意に開始したり停止することができます ( ゲームの実
行を参照)。
• デバッガで、プログラムのソースまたは逆アセンブリビューのいずれかにブレークポイントを設定
すると、実行パスのどこで実行しているプログラムも、インタラクティブに中止させられます。
• ターゲット上のアプリケーションを手動で中止させたり、その他の理由 (ブレークポイントなど) で
アプリケーションが中止した場合、それ以降は実行パスのコード 1 行を 1 度に実行できます。
• 条件が TRUE (正) かどうかにかかわらず、条件付きブレークポイントを設定できます (「条件付きブ
レークポイントの設定」参照)。
• 特定アドレスへのアクセスが発生する度にトリガされるハードウェア ブレークポイントをセットす
ることができます (「ハードウェア ブレークポイント」を参照)。
• 選択した 1 つのスレッド上だけでトリガされる、スレッド特有のブレークポイントを設定すること
ができます。

ブレークポイントの設定・閲覧
プログラムが C や C++、またはアセンブリのコードの指定行に到達した時に、プログラム カウンタ プロ
グラムの実行を中止したい場合に設定するのがブレークポイントです。
アプリケーション コードのブレークポイントの位置は、デフォルトでは xxxconfig.xml 設定ファイルで、
セッション間で保存されます (デバッガを同じ ELF ファイルで起動し、かつそれがデバッガ コマンドラ
インで指定されている場合)。
ソースまたは逆アセンブリにブレークポイントを設定するには、次の手順に従います。
(1) ターゲットが動作していないことを確認し、ソース ビューまたは逆アセンブリ ビューを開きます。
(2) ブレークポイントを設定したいソースまたは逆アセンブリの行へスクロールします。
(3) ショートカット メニューの [ブレークポイントの追加] をクリックします。そこにブレークポイント
がすでに存在する場合、ショートカット メニューは [ブレークポイントの削除] に変わります。ブレ
ークポイントが存在しない場合には、新しいブレークポイントがこの行にセットされます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 124 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

メモ:プログラム カウンタが停止できない行 (コメントなど) にブレークポイントを設定した場合、コ


ードの選択した行の次に来る停止可能な行にブレークポイントが設定されます。さらに、ブレークポ
イントを正確に設定できない場合や、アプリケーションがプログラムの不適切な場所のブレークポイ
ントで停止する場合は、ソース コードのコンパイル時に最適化が適用されている可能性があります。
この問題を解決するには、アプリケーションを再ビルドするか、コンパイラ引数 (makefile内) から -0x
フラグを削除する必要があります。

これでターゲットを起動すると、ブレークポイントを設定した行にプログラム カウンタが到達した時点
で実行中止し、すべてのデバッグ情報ビューが更新されるようになります。さらに、ソース ビューまた
は逆アセンブリ ビューが開いており、かつアクティブ状態である場合は、現在のプログラム カウンタの
位置を表示するよう更新されます。

プログラムを 1 ステップずつ実行
コード内のバグを追跡する際、ターゲット上でのコードの実行を完全に制御しつづけることがカギとなり
ます。このセクションでは、コードにブレークポイントを設定する方法と、コードをステップする手順に
ついて解説します。

プログラムを 1 ステップずつ実行する
プログラム内を 1 ステップずつ実行するには、次の手順に従います。
(1) ターゲットが動作していないことを確認して、ソース ビューまたは逆アセンブリ ビューを開きま
す。
(2) ビュー ショートカット メニューの [ステップ] または [ステップオーバー] コマンドを使用して、(選
択したビューにより) ソースまたは逆アセンブリを 1 ステップずつ処理します。[ステップ] コマンド
を選択すると、任意の関数コールまでプログラムを実行し、呼び出された関数の中にあるコードの
行を実行します。

メモ:[デバッグ] メニューの [ステップ]、[ステップオーバー] コマンドを使用することもできます。


逆アセンブリ ビューがアクティブ状態になっている場合は、逆アセンブリを実行します。そうでない
場合は、アプリケーションのソースを実行します (何らかのソース情報がある場合)。ソースを実行で
きない場合は、逆アセンブリを実行します。

これらのオプションに関する詳細は、「ソース ビュー」、および「逆アセンブリ ビュー」を参照してく


ださい。

現行関数をステップアウトする
現在、関数を 1 ステップずつ処理している場合、その関数のコードの残っている行すべてを実行しなくて
も、関数を呼び出したソースの行に戻れます。
• [ステップ アウト] ツールバーボタンをクリック、または [デバッグ] メニューの [ステップ アウト] を
クリックします。
プログラム カウンタは、関数コールの次のコード行まで進みます。
ただし、関数が終了するまでのコードに (またはそれ以前に呼び出された関数に) ブレークポイントがあ
る場合、ビューが切り替わって、次にブレークポイントが設定された行で一時停止する場合があります。

ブレークポイント ビュー
アプリケーションのソースや逆アセンブリに設定されたすべてのブレークポイントは、ブレークポイント
ビューでいつでも閲覧できます。このビューではブレークポイントが設定されている位置と、ブレークポ
イントが設定されている機能が一覧表示されています。このビューで、ブレークポイントを追加したり、
選択したブレークポイント、またはブレークポイントすべてを削除できます。
新しいブレークポイント ビューを開く方法は次のとおりです。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 125 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

• [ウィンドウ] メニューで [新しいビュー] をポイントし、[ブレークポイント] をクリックするか、ま


たはツールバーの [ブレークポイント] ボタンをクリックします。
この操作でブレークポイントを含む新しいウィンドウが開きます。
ブレークポイント ビューは、最初に開いた時点では空白ですが、ブレークポイントが設定・解除される
と、直ちに更新されます。矢印は、プログラムが現在どのブレークポイントで停止しているのかを示すた
めに使用されます。
以下のスクリーンショットはブレークポイント ビューです。

ブレークポイントは、ファイルや行に複数のインスタンス (テンプレート関数など) が含まれる形式の構


想構造で表示されます。また、ファイルや行が表示されるメインのブレークポイントは、各インスタンス
に対する子ブレークポイント項目と同時に追加されます (個々のアドレスが表示される)。
• ブレークポイントには、チェックボックスが用意されており、これを選択するとブレークポイント
が有効になり、選択解除すると無効になります。
• 最上位のブレークポイントを選択 (または選択解除) すると、すべての子ブレークポイントも選択 (選
択解除) されます。
• 子ブレークポイントを 1 つや 2 つ選択または選択解除すると、親ブレークポイントのチェックボッ
クスがグレーで表示 (異なるステータスを持つ子ブレークポイントが存在することを表す) されま
す。

ブレークポイントの種類
ブレークポイントには、いくつもの種類があります。ブレークポイントはその種類ごとに、それぞれ異な
るアイコン色で区別されます。アイコンに黄色の「+」が付いているときは、ブレークポイントが条件付
きのものであるか、スレッド特有のものであることを示します (「条件付きブレークポイント」および
「スレッド特有のブレークポイント」を参照)。無効にされているブレークポイントのアイコンは、有効
化されている状態のアイコンの中心が空洞になったものとなります。

ブレークポイ 有効化さ 無効化され 解説


ントの種類 れている ているアイ
アイコン コン

標準 プログラムの実行がこの行に到達すると停止します。

条件付き/ プログラムの実行は、条件がトリガーされた場合、または指
スレッド特 定されたスレッドからヒットした場合に停止します。
有のブレー
クポイント
、標準

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 126 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

コードが読 このブレークポイントを含むソース行に関連付けられている
み込まれて コードはありません。その理由としては、ソース ファイルが
いない プロジェクトの一部となっていないか、デバッグ情報がない
ことが考えられます。ブレークポイントは、このソース行を
含む PRX が読み込まれたとき、有効になります。プログラム
の実行がこの行に到達すると停止します。

グローバル グローバル ブレークポイントとは、モジュールが読み込まれ


たとき SPU に転送される埋め込み SPU モジュールにあるブレ
ークポイントのことです (「埋め込み SPU 内のブレークポイ
ント ― グローバル ブレークポイント」を参照)。プログラム
の実行がこの行に到達すると停止します。

条件付き/ プログラムの実行は、条件がトリガーされた場合、またはグ
スレッド特 ローバル ブレークポイントに対して指定されたスレッドから
有のブレー ヒットした場合に停止します。
クポイント
、グローバ

トレースポ 実行がこの行に到達すると、ターゲットは一時的に停止し、
イント メッセージが TTY ビューのデバッグ チャンネルに表示されま
す (「トレースポイント」を参照)。

条件付き/ 条件がトリガーされた場合、または特有のスレッドからヒッ
スレッド特 トした場合、ターゲットは一時的に停止し、メッセージが表
有のトレー 示されます。
スポイント

ブレークポイント アイコンの色は [オプション] ダイアログを使用すると変更できます。


ブレークポイント アイコンの色を変更するには、次の手順に従います。
(1) [ツール] メニューで [オプション] をクリックします。
(2) [オプション] ダイアログで以下を行います。
(a) 左ペインで [フォントと色] をクリックします。
(b) 右ペインの [設定の表示] リストで [アイコン] をクリックします。
[コンポーネント タイプ] ボックスに、各種ブレークポイントのタイプと色が表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 127 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

ブレークポイント ビューのショートカット メニュー

すべてを有効化 すべてのブレークポイントを有効にする。

すべて無効化 選択されたプロセッサに関するすべてのブレークポイントを削除する。

すべて削除 現在のプロセッサについて、すべてのブレークポイントを削除する。

関数の参照 関数ブラウザが開き、アプリケーションの関数に移動したり、その閲覧が
可能。「関数の参照」を参照。

追加 [アドレスを入力]ダイアログを表示して、ブレークポイントを設定するアド
レスを指定できるようにする。

削除 現在のプロセッサについて、すべてのブレークポイントを削除する。

無効化 指定のブレークポイントを無効にする。

ソースに移動 ソース/逆アセンブリビュー内のそのブレークポイントに移動する。

ブレークポイントの [プレークポイントのプロパティ]ダイアログを表示する。「[ブレークポイ
プロパティ ントのプロパティ] ダイアログ」を参照。

ブレークポイント ビューのツールバー

追加 [アドレスを入力]ダイアログを表示して、ブレークポイントを設定
するアドレスを指定できるようにする。

削除 現在のプロセッサについて、すべてのブレークポイントを削除す
る。

すべて削除 現在のプロセッサについて、すべてのブレークポイントを削除す
る。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 128 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

すべてを有効化 すべてのブレークポイントを有効にする。

すべてを無効化 選択されたプロセッサに関するすべてのブレークポイントを削除す
る。

ソースに移動 ソース/逆アセンブリビュー内のそのブレークポイントに移動す
る。

ブレークポイント [プレークポイントのプロパティ] ダイアログを表示する。「[ブレ


のプロパティ ークポイントのプロパティ] ダイアログ」を参照。

[ブレークポイントのプロパティ] ダイアログ

ブレークポイント ビューのショートカット メニューから [ブレークポイントのプロパティ] を選択する


と、上記のプロパティ ダイアログが表示されます。このダイアログでは、条件付き式を入力したり、ヒ
ットカウントの条件を設定したり、現在のヒットカウントをゼロに戻したりできます。

アドレス ブレークポイント アドレスを表示します。

スレッド スレッド特有のブレークポイントを設定するときは、ブレークポイント
をトリガーさせるスレッドの ID を選択します (任意のスレッドの場合は
ブランクのままにします)。

条件 条件を設定する時はこのチェックボックスにチェックを入れます。式入
力ボックスに、ブレークポイントに到達した際評価する式を入力しま
す。

一致/変更 これは、条件が正確であることをテストした、または条件が変更された

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 129 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

ことを意味します。

ブレークポイントがヒ オプションのドロップダウン リストから操作を選択します (例:[ヒット


ットした場合 カウント数が次の数と等しいときに中断] など)。次にターゲット値を数値
フィールドに入力します。

ヒット カウントの 現在のヒット カウントをゼロに戻します。


リセット

現在のヒット カウント 現在のヒット カウントを表示します。

メッセージの画面表示 選択されている場合、メッセージ コントロール ボックスが有効化され、


トレースポイント用にテキスト、識別子、前景色および背景色、変数値
などが指定できます。「トレースポイントの追加」を参照してくださ
い。

実行の続行 選択されている場合、トレースポイント メッセージで指定したポイント


に到達し、メッセージが TTY ビューに表示されると、プログラム実行が
続行されます。

無効化 選択されている場合、ブレークポイントはトリガー後に無効化されま
す。

条件付きブレークポイント
条件付きブレークポイントは、その他のソフトウェアのブレークポイント同様、トリガーされた時にター
ゲットを停止します。なお、条件付きブレークポイントには、条件またはヒットカウントに基づいて、ユ
ーザーがブレークポイントでのターゲットの停止を選択できるという利点があります。
条件は、式エバリュエータによって認証されたものなら、どんな式でもかまいません。設定が済み次第、
ブレークポイントには条件が TRUE の時のみ、その条件が適用されるようになります。条件が FALSE と
判断された場合、ターゲットは実行を継続します。
ブレークポイント ヒットのタイミングを指定する別の方法として、ヒット カウントがあります。まず、
回数に対するヒット カウントを設定した後、次に挙げる 3 事象の 1 つに対してチェックします。
• ヒットカウントと同じ回数ブレークポイントがヒットされた場合
• ヒットカウントの乗数と同じ回数ブレークポイントがヒットされた場合
• ヒットカウント以上の回数ブレークポイントがヒットされた場合
ヒットカウントと条件は相互排除的ではないため、どのブレークポイントにおいても条件とヒットカウン
トの両方を設定できます。この場合は、ブレークするためにはヒットカウントおよび条件の両方とも
TRUE である必要があります。

条件付きブレークポイントの設定
条件付きブレークポイントを設定するには、次の手順に従います。
(1) 通常のソフトウェア ブレークポイントを設定します。詳細は、「ブレークポイントの設定・閲覧」
を参照してください。
(2) ブレークポイント ビューを開き、ブレークポイントを選択します。詳細は、「ブレークポイント ビ
ュー」を参照してください。
(3) ブレークポイントされた行を右クリックし、ショートカット メニューを表示します。
(4) [ブレークポイントのプロパティ] オプションを選択し、[ブレークポイントのプロパティ] ダイアログ
(「[ブレークポイントのプロパティ] ダイアログ」を参照) からブレークポイントの条件またはヒット
カウント、もしくはその両方を設定します。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 130 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

これでブレークポイントは条件付きブレークポイントとして設定されました。

スレッド特有のブレークポイント
スレッド特有のブレークポイントは、ソフトウェアのブレークポイントと同じようなものですが、作成時
にスレッド ID によって指定される、ある特定のスレッドからヒットしたときだけトリガーするところが
異なります。
ブレークポイント ビューにはスレッド列が含まれ、ここにはスレッド特有のブレークポイントのスレッ
ドの ID が表示されます。スレッド特有ではないブレークポイントについては、この列は空白になりま
す。

スレッド特有のブレークポイントの設定
スレッド特有のブレークポイントをブレークポイント ビューから設定するには、次の手順に従います。
(1) 通常のソフトウェア ブレークポイントを設定します。詳細は、「ブレークポイントの設定・閲覧」
を参照してください。
(2) ブレークポイント ビューを開き、ブレークポイントを選択します。詳細は、「ブレークポイント ビ
ュー」を参照してください。
(3) ブレークポイントされた行を右クリックし、ショートカット メニューを表示します。
(4) [ブレークポイントのプロパティ] を選択し、ブレークポイントのスレッド ID を設定します (「[ブレ
ークポイントのプロパティ] ダイアログ」を参照)。
これでブレークポイントはスレッド特有のブレークポイントとして設定されました。
スレッド特有のブレークポイントは、ソース ビューと逆アセンブリ ビューからも設定できます。コンテ
キスト メニューの [スレッド特有のブレークポイントの追加] オプションを使って設定を行います
(Shift+F9)。このとき、ブレークポイントは、現在のスレッド上でトリガーするよう自動的に設定されま
す。

埋め込み SPU 内のブレークポイント ― グローバル ブレークポイント


SPU ELFファイルが PPU コード内に埋め込まれている場合でも、このメモリ領域にブレークポイントを
追加することができます。埋め込み SPU コードが SPU メモリにアップロードされる際、追加されたブレ
ークポイントもすべて SPU メモリに転送されます。このようなブレークポイントは、「グローバル ブレ
ークポイント」と呼ばれます。グローバル ブレークポイントが PPU メモリに追加されると、これらは
PPU ビューに違う色で表示されます。

SPU ビューからのグローバル ブレークポイントの追加および削除


ショートカット メニュー (Ctrl キーと F9 キー) の使用、または Ctrl キーを押しながらブレークポイント
ボーダーをクリックすると、SPU ビューに対してグローバル ブレークポイントを追加/削除することがで
きます。これらは、キーボード ショートカットやショートカット メニュー アイテムが異なるという点を
除いて、通常のローカル ブレークポイントとまったく同じ様に機能します。ブレークポイントが追加さ
れると、それらはローカル SPU メモリに加え、PPU メモリ内の埋め込み SPU コードにも挿入されます。
以下の図は、PPU ビューと SPU ビューの両方に表示されているグローバル ブレークポイントを示したも
のです。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 131 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

PPU ビューで Alt+G キーを押すと、埋め込みモジュールが選択できる [ロードされたモジュール] ダイア


ログが開きます。

グローバル ブレークポイントの復元
グローバル ブレークポイントがデバッグ セッション中にユーザーによって SPU メモリから削除されて
も、PPU メモリ内の SPU コードに追加されたブレークポイントに影響を与えることはなく、該当コード
が次回 SPU メモリに転送される際にはそれが復元されます。反対に、ブレークポイントが PPU メモリか
ら削除された場合、SPU の現在のステータスに影響を与えることもありません (すなわち、現在ブレーク
ポイントを含む SPU からはブレークポイントが削除されない)。ただし、ブレークポイントは SPU コー
ドと共に SPU メモリには転送されなくなるため、SPU コードの次回転送時には存在しなくなります。

トレースポイント
トレースポイントは、ソフトウェアのブレークポイントに似ていますが、ブレークポイントとは違い、ト
リガーされたときプログラムの実行を停止させることがありません。その代わり、トレースポイントがト
リガーされるとターゲットが一時的に停止し、TTY ビューのデバッグ チャンネル内にメッセージが表示
されますが、その後、ターゲットは実行を続行します。

メモ: トレースポイントはターゲットを停止/開始させるため、実行速度は通常より遅くなります。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 132 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

トレースポイントが作成されると、用意されているテンプレート上でトレースポイント メッセージが指
定されます。トレースポイント メッセージには、プレーン テキストの他、定義済みの識別子、前景およ
び背景の色、変数値などを含めることができます。

定義済みの識別子 説明

$PID プロセス ID

$PNAME プロセス名

$TID スレッド ID

$TNAME スレッドの名前

$ADDRESS 現在のコンピュータのアドレス

$FUNCTION 現在の関数の名前

$CALLER 呼び出し元の関数の名前

$CALLSTACK 現在のコールスタックを出力

{v} 変数「v」の値を出力。「,x」または「,d」を追加して 16 進または 10 進数


を指定することもできます。例: 「{v, x}」または「{v, d}」

前景色や背景色を設定するときは、前景または背景の識別子 ($FG_ および $BG_) を指定します。この識


別子の直後に、次のような色を追加してください。
BLACK、RED、GREEN、YELLOW、BLUE、MAGENTA、CYAN、WHITE
例: $FG_RED, $BG_RED, $FG_CYAN
トレースポイント メッセージで指定された色は維持されるため、メッセージの終わりで元の色が復元さ
れない場合、後に続くテキスト出力にもその色が利用されます。
ソフトウェア ブレークポイントと同じ方法で、トレースポイントにもこの条件が適用されることがあり
ます。「条件付きブレークポイント」を参照してください。
次の例では、テンプレートにはトレースポイント、スレッド ID (赤字で表示) と 変数「loop_counter」の
16 進値を含む関数の名前が表示されます。これは青い背景色の上に黄色い文字で表示されます。
"Execution hit $FG_MAGENTA$FUNCTION$FG_BLACK from thread $FG_RED$TID$FG_BLACK.
loop counter == $FG_YELLOW$BG_BLUE{loop_counter,x}$FG_BLACK$BG_WHITE"
実行がこのポイントに到達するたびに、以下のデータがデバッグ TTY チャンネルに追加されます。

トレースポイントの追加
トレースポイントを追加するには、次の手順に従います。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 133 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

(1) 以下の方法のいずれかで、トレースポイントを追加します。
(a) ソースまたは逆アセンブリの 1 行を右クリックし、コンテキスト メニューから [トレースポイ
ントの追加] を選択します。
(b) ショートカット (Alt+F9) を使って、現在の場所にトレースポイントを追加します。
(c) Alt キーを押しながら、ソース ビューのインジケータ余白をクリックします。
[ブレークポイントのプロパティ] ダイアログ ボックスが自動的に表示されます。

(2) このダイアログの [ヒット時] 領域で [メッセージの画面表示] をクリックします。


(3) 有効化されている [メッセージ コントロール] ボックスで、トレースポイント メッセージで指定され
たポイントにプログラム実行が到達したとき表示されるメッセージを指定します。[メッセージ コン
トロール] のとなりにある右矢印をクリックするか、Ctrl + スペース キーを押して、定義済みの識別
子を含むメニューを表示します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 134 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

(4) 必要に応じて識別子を選択すると、現在のキャレットの場所にある [メッセージ コントロール] に識


別子が挿入されます。
(5) [トレースポイント式の読み込み] をクリックすると、前に保存したトレースポイント メッセージが
読み込まれて再利用されます。
(6) 現在のトレースポイント メッセージを今後利用するために保存するときは、[トレースポイント式の
保存] をクリックします。トレースポイント式は .exp 拡張子付きでプレーン テキスト ファイルとし
て格納されます。
(7) [OK] をクリックして、トレースポイントをアクティベートし、TTY ビュー上にメッセージを表示し
ます。

トレースポイントの削除
トレースポイントはブレークポイントの特殊タイプですので、ブレークポイントと同じ方法で削除できま
す。「ブレークポイント ビュー」を参照してください。

ハードウェア ブレークポイント
PPU プロセッサには、1 つのハードウェア ブレークポイントを設定できます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 135 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

ハードウェア ブレークポイントは、指定した変数や、メモリ内の変数アドレスにアクセスされた時点
で、プログラムの実行を中断するように指定することができます。
ハードウェア ブレークポイントがトリガーされた場合は、ソフトウェア ブレークポイントと同様の処理
(プログラムの一時停止など) を行います。その後、ターゲット管理コマンド (Step、Run to、Go) を使用
して実行を再開することもできます。
PlayStation®3 では、ハードウェア ブレークポイントを設定し、特定の C/C++ 変数またはアセンブリ ア
ドレスへのアクセスが発生した際にトリガすることができます。ハードウェアの制限のため、PPU のハ
ードウェア ブレークポイントは、8 バイトでアライメントされた 8 バイトの範囲にのみ設定可能です。ハ
ードウェア ブレークの範囲内のデータにアクセスすると、そのアクセスがリクエストされた変数内にあ
るかどうかを問わず、ハードウェア ブレークが発生します。

ハードウェア ブレークポイントの設定
ハードウェア ブレークポイントは、変数がアクセスされた際にトリガされるもの、および特定のアドレ
スへの書き込みが発生した際にトリガされるもののいずれかを設定できます。
ハードウェア ブレークポイントを設定するには、次の手順に従います。
(1) [デバッグ] メニューの [ハードウェア ブレークポイント] をクリックします。

(2) アプリケーションの C/C++ コード内、またはアセンブリ アドレス内の変数の名前を、[アドレス] フ


ィールドに入力します。
(3) 必要に応じて、[読み込み時] または [書き込み時] を選択します。
(4) [OK] をクリックし、ハードウェア ブレークポイントを設定して有効化します。

メモリ アクセス トラップ (MAT)

メモ:デバッガでメモリ アクセス トラップ サポートを有効にするには、Target Manager の


[プロパティ] のプロパティ ページ ([ロード オプション] > [追加ロード オプション] セクショ
ン) で [MAT 有効化] チェックボックスを「はい」にする必要があります。

ヒープで割り当てられたメモリは、範囲ごとにグループ分けされます。[メモリ アクセス トラップ


(MAT)] ダイアログでは、書き込み処理または読み込み/書き込み処理に関するアクセス時に、ブレーク
ポイントを引き起こすメモリ領域にフラグを立てることができます。
メモリ領域に例外フラグを設定するには、次の手順に従います。
(1) [デバッグ] メニューで [メモリ アクセス トラップ (MAT)] をクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 136 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

MAT 例外が有効なヒープ メモリの全範囲が、[メモリ範囲] リストボックスに表示されます。リスト


に表示される範囲数は、ELF のメモリ設定に従って変化します。
(2) このリストから範囲を選択すると、このダイアログの下部が更新され、選択したメモリが 4KB ペー
ジのグリッドに表示されます。
メモリ アドレスは各行の左側に表示され、グリッドの右側にあるスクロールバーで該当メモリ範囲
内をスクロール ダウンすることができます。
(3) グリッド内のメモリ ブロックを選択した後、メモリ グリッドの右側にある [書き込み時にブレーク]
ボタンや [読み込み/書き込み時にブレーク] ボタンを使用し、選択したページのそれぞれに対して例
外フラグを設定します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 137 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

例外フラグが設定されると、ページは青 ([書き込み時にブレーク]) または赤 ([読み込み時にブレー


ク]) で色付けされます。例外フラグが設定されていないページは、白で表示されます。
(4) 例外フラグをクリアし、選択したページを白くするには、必要に応じて [無視] ボタンを使用しま
す。例外フラグを設定できない範囲にあるページは、[無効] として表示されます。
メモリ範囲内のポインタを検索するには、次の手順に従います。
(5) 特定のメモリ範囲にあるポインタを検索するには、このダイアログの下部にある編集コントロール
を使用できます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 138 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング

(6) ポインタの名前を入力し、[移動] ボタンをクリックします。


指定したシンボルが有効なメモリ範囲のどこかにある場合、該当アドレスを含む 4KB ページが選択
されます。
ライブラリ関数 sys_mat_set_condition() を使用してソフトウェア経由で設定された MAT 例外
領域も表示されます。
(7) 適切なトラップでフラグされたページの書き込みまたは読み込み/書き込みアクセスによって MAT
例外がトリガーされた場合、デバッガは MAT 例外で停止し、レジスタ ビューとプロセス ビューに
その旨が示されます。

(8) 実行を再開するには、関連ページの MAT フラグを [無視] に設定して MAT 例外を削除します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 139 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
メモリとレジスタの閲覧・変更

9: メモリとレジスタの閲覧・変更
この章では、メモリ ビューを使用したメモリ データの表示方法と変更方法について説明します。また、
レジスタ ビューを使用したレジスタ データの表示方法と変更方法についても取り上げます。
この章には、以下のセクションがあります。
• メモリの閲覧・変更
• レジスタの閲覧・変更

メモリの閲覧・変更
メモリ ビューのメモリを閲覧できます。また、すべてのメモリ アドレスの値を変更できます。
メモリアドレスの値を閲覧する方法は次のとおりです。
• [ウィンドウ] メニューで、[新規ビュー] をポイントして [メモリ] をクリックするか、[メモリ] ツー
ルバー ボタンをクリックします。
これで、メモリ ビューを含む新しいウィンドウが開きます。

メモリ ビュー
メモリ ビューには、ターゲット メモリの任意部分の内容を表示できます。

メモリ ビューにはツールバーとデータ用の 3 行のメイン ディスプレイがあります。

アドレス この最初の列では、残りの行で表現されるターゲット上のメモリ内でのアドレス
が表示されます。このアドレスは 16 進法形式で、デフォルトでは32ビットです。

データ 2 番目の列では、指定されたメモリ アドレスの実際のデータが表示されます。 表


示されるデータの量は、ビューの幅によって決まります。データはバイト、ワー
ド、ダブルワード、フロートおよび各種固定形式で表示できます。

ASCII [ASCII の表示] オプションをチェックしている場合 (「メモリ ビューのショート


カット メニュー」参照)、3 行目に 2 行目のメモリ データを ASCII 文字で表示し
ます。印刷しない文字は「.」文字が表示されます。

ツールバーには、アドレスまたはプログラム ラベル (「メイン」など) を入力する編集フィールドを持つ


[アドレス] コンボボックスと最近入力したアドレスのドロップダウン リストボックスがあります。アド
レスを入力する場合は、その値に「0x」を付けて 16 進数を入力し、<Enter> を押すとビュー表示のメモ
リをリフレッシュします。
メモリ ビューの上部は、ビューに表示するメモリの列数を設定するための 列 構成があります。自動 設定
にすると、列数はビューの現在の幅に合わせて変わります。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 140 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
メモリとレジスタの閲覧・変更

メモリを変更・選択する
2 列目の [データ] 列に表示されるメモリ データは、必要に応じて上書きすることでターゲットのメモリ
を直接変更できます。また、3 番目の ASCII 列に ASCII 文字を入力することにより、データを上書きす
ることも可能です。
メモリ ビューには、選択機能とコピー機能が含まれています。たとえば、ある範囲のメモリ アドレスを
選択してそれをクリップボードにコピーし、他のビューに貼り付けるなどです。
以下の選択方法があります。
• ビューの左側アドレスをダブルクリックして選択します。これを別のメモリビューの [アドレスに移
動] 機能を使用してドラッグするか、ウォッチ ビューにドラッグして、そのビューに追加できる変数
かどうかを調べます。
• アドレス列をクリック、ドラッグしてメモリ行全体を選択します。
• メモリ値をクリック、ドラッグして個々のメモリ域を選択するため、フリーフォーム選択を実行し
ます。
以上が選択されればクリップボードにテキストとしてコピーできます。

メモリ ビューのショートカット メニュー

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 141 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
メモリとレジスタの閲覧・変更

1バイト/2バイト/4 サイズ のオプションを 1つ選択します。メモリを1バイト、ハーフ ワード、1


バイト/8バイト/16 ワード、ダブル ワードなどで表示します。
バイト

16進/符号付き/符 形式オプションを 1 つ選択します。メモリを 16 進数、署名付き整数、署名な


号なし/浮動小数点 し整数、浮動小数点、固定小数点形式で表示します。前のサイズ オプション
/Fixed0/Fixed の設定によって選択できる形式が異なります。
4/Fixed12/Fixed15

新しい値の入力 このダイアログで新しい値を入力し、メモリの位置に書き込みができます。
「式の使用」 を参照。

メモリを値で 現在の選択部の全データアイテムをユーザー指定値で満たします。「値でメモ
フィル リをフィルする」を参照。

バイト オーダーを マルチバイト データ アイテムの big- と little-endian 表示をトグルします。


維持

ASCIIを表示 このチェックボックスをオンにすると、メモリ データが 3 列目に ASCII 文字


で表示されます。

アドレスに移動 メモリ ビューで閲覧する特定のアドレスやシンボルを指定できます。アドレ


スは、表示される [数式の入力] ダイアログで入力してください。16 進法のア
ドレスを入力する場合は、0x を前につけます。シンボル名の先頭部分を入力
する場合は、[自動入力] ボタンを使用すると、利用可能なシンボルのリストが
表示されます。必要なアドレスを入力すると、メモリ ビューが更新され、ビ
ューの先頭にメモリの指定した部分が表示されます。

ポインタに追従 現在選択されているデータ アイテム内に格納されたアドレスにジャンプしま


す。選択されたアイテムが 32 ビットを下回る場合、隣り合うアイテムはアド
レスを形成するように連結されます。

ポインタに追従を 前に実施した [ポインタに追従] 操作を取り消します。


取り消し

アドレスにロック メモリの表示をロックするアドレス式が指定できます。表示されるダイアログ
に、必要なアドレス、または式を入力してください。表示のロックを解除する
には、再度 [アドレスにロック] ダイアログにアクセスする必要がありますが、
数式フィールドは空白のままにしてください。「メモリ ビューをポインタ ア
ドレスにロックする」を参照。

メモリのロード ファイルをターゲット メモリにロードできます。「ターゲット メモリをバイ


ナリ ファイルからロードする」を参照。

メモリの保存 ターゲット メモリをファイルに保存できます。「ターゲット メモリをバイナ


リ ファイルに保存する」を参照。

値でメモリをフィルする
値でメモリをフィルする (埋める) には、次の手順に従います。
(1) メモリ ビューのショートカット メニューで [メモリを値でフィル] を選択すると、以下のダイアログ
が表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 142 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
メモリとレジスタの閲覧・変更

(2) このテキスト ボックスに、メモリをフィルする値を入力します。


(3) 値を入力するとダイアログが更新され、値のタイプとサイズに関する情報 (「サイズ 4, タイプ int」
など) が表示されます。
ここには、以下のタイプが表示されます。

タイプ 例

int 123 / -123 / 0x12345678

long 123l / -123l / 0x12345678l

long long 123ll / -123ll / 0x12345678ll

float 123.0f

double 123.0 / 0x1234567812345678

long double 123.0l

char 'a' / '\0' / '\n'

string "a12sfs"

16 進数を明示的に宣言する場合は、接頭辞に「0x」を使用します。
値でメモリをフィルする場合は、[パターンの繰り返し] チェックボックスを選択します。値を [開始
アドレス] に 1 回書き込み、それ以降のメモリを「0」(ゼロ) で埋めたい場合には、[パターンの繰り
返し] チェックボックス にチェックを入れないでください。

メモ:選択したメモリの [長さ] が値のタイプ サイズより長い場合は、[パターンの繰り返し] チェック


ボックスが自動的に選択されます。
(4) [埋めるメモリ範囲] セクションに入力して対象となるメモリ範囲を指定します。
メモリ ビューで選択範囲が指定されている場合は、[開始アドレス]、[長さ] (バイト) および [終了ア
ドレス] の各フィールドが自動的に入力されますが、これは任意に変更できます。
16 進数を明示的に宣言する場合は、接頭辞に「0x」を使用します。また、ダイアログ下部の [デフォ
ルトの基数 (16 進数)] チェックボックスを選択すると、16 進数の値が入力されることが前提となり
ます。
(5) 警告やエラーがある場合は、ダイアログ下部にそれぞれ黄色と赤色のテキストで表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 143 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
メモリとレジスタの閲覧・変更

メモ:[長さ] に、値のタイプ サイズが整数の倍数以外で入力された場合、最後の書き込み個所で値が


終了します。

ターゲット メモリをバイナリ ファイルに保存する


ターゲット メモリをバイナリ ファイルに保存するには、次の手順に従います。
(1) メモリ ビューのショートカット メニューの [メモリの保存] をクリックすると次のダイアログが表示
されます。

(2) メモリ範囲の [開始アドレス]、[長さ]、[終了アドレス] を適宜それぞれのフィールドに入力します。


16 進数を明示的に宣言する場合は、接頭辞に「0x」を使用します。[アライン] ボタンは、保存され
たメモリ ブロックが 1、2、4、8、16 バイト境界で始まっているかを確認し、必要に応じて端数処理
(rounding) が行われます。
(3) 既存のファイルを選択するか、メモリの内容を保存したいバイナリ ファイル名を入力し、[保存]をク
リックします。

ターゲット メモリをバイナリ ファイルからロードする


ターゲット メモリをバイナリ ファイルからロードするには、次の手順に従います。
(1) [メモリ ビュー] のショートカット メニューで [メモリのロード] をクリックすると以下のダイアログ
が表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 144 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
メモリとレジスタの閲覧・変更

(2) 必要なバイナリ ファイルへ移動し、そのバイナリ ファイルをダウンロードしたいメモリの先頭アド


レスを [開始アドレス] フィールドで指定します。16 進数を明示的に宣言する場合は、接頭辞に
「0x」を使用します。
(3) [開く] をクリックすると、指定した先頭アドレスのメモリに、ファイルの内容がダウンロードされま
す。

メモ:ファイル全体がメモリ内に読み込まれます。すなわち、ファイルのうち特定のバイト数 (n バイ
ト) を指定してメモリに読み込むことはできません。

メモリ ビューをポインタ アドレスにロックする


ポインタを使ってメモリを操作するアセンブリ コードをシングルステップしている場合には、メモリ ペ
インのショートカット メニューの [アドレスにロック] オプションを使うとポインタが変更してもポイン
タにメモリを表示させることができます。「メモリ ビューのショートカット メニュー」を参照してくだ
さい。
このオプションでは、ビューの開始アドレスとして継続的に使用される式を指定することができます。シ
ングルステップを実行するたびに式が再評価され、ペインは再度更新されます。これはデバッガが評価で
きる C++ の変数やその他の式でもかまいません。たとえば、「r1」などのレジスタ名も可能です。

レジスタの閲覧・変更
レジスタ ビュー内のレジスタは、すべて閲覧できます。また、レジスタ値はすべて変更できます。
レジスタ値を閲覧するには、次の手順に従います。
• [ウィンドウ]メニューで [新しいビュー] をポイントし、[レジスタ] をクリックするか、[レジスタ] ツ
ールバーボタンをクリックします。
これで、すべてのレジスタとその現在の値を示すレジスタ ビューを含む新しいウィンドウが開きま
す。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 145 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
メモリとレジスタの閲覧・変更

レジスタ ビュー
レジスタ ビューには、ターゲット上で使用可能な情報に関するレジスタがすべて表示されます。さら
に、プログラム カウンタが設定されている逆アセンブリ命令と、ターゲットの現在の状態 (赤色で表示)
を表示します。

デフォルト レジスタ ビュー


レジスタ ビューは、ターゲットが停止するたびに、自動的に更新されます。
レジスタ値を変更するには、レジスタ ビューの値を直接上書きします。レジスタ値を変更すると、新た
な値がターゲットに送られます。このアクションを取り消す方法はありません。

メモ: この方法でレジスタ値を変更すると、アプリケーションがターゲットで動かなくなる場合があ
りますのでご注意ください。

値0xD15EA5ED は、 PPU または SPU レジスタに表示されることもあります。Target Manager では、レジ


スタの読み込みが行えない場合 (ターゲットが無効/切断された場合、あるいは無効なレジスタにアクセ
スしようとした場合) にこの値が戻されます。

レジスタ ビューのショートカット メニュー


レジスタ ビューのショートカット メニューは、レジスタ値を右クリックすると表示されます。

<有効な形式の 1 つ選択します。選択された形式に従ってレジスタの値が表示されます。
リスト>

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 146 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
メモリとレジスタの閲覧・変更

サイクル形式 このテンプレートに対して有効な形式の表示を通じたサイクル。このオプショ
ンでは、レジスタ ペイン内の全レジスタの形式が変更されます。

レジスタ形式の 選択したレジスタのストリング全体が変更されます。
サイクル

<有効なビルトイ 1 つ選択します。選択されたビルトイン レジスタ テンプレートを使用してレ


ン テンプレートの ジスタが表示されます。
リスト>

テンプレート ユーザー定義レジスタ テンプレートをリストするサブメニューが表示されま


す。詳細は、「ユーザー定義レジスタ テンプレート」を参照してください。

ユーザー定義レジスタ テンプレート
レジスタ ビューが、ハードウェア レジスタ レイアウトを表示する外部テンプレート(.rgt)ファイルをサポ
ートするようになりました。この機能は、ターゲットで利用できるレジスタを表示するカスタマイズ可能
なレイアウトを持つ組込みレイアウトを拡張します。デバッガが起動すると、デバッガの格納されている
フォルダで.rgtファイルの検索が開始されます。
デバッガの起動時に、デバッガが格納されているフォルダでは .rgt ファイルの検索が行われます。検索の
結果、これらのファイルの名前 (ファイル拡張子を除いた部分) が、レジスタ ビューのショートカット メ
ニューにおける [テンプレート] サブメニューに追加されます (「レジスタ ビューのショートカット メニ
ュー」を参照)。
形式
Register Template V1.0 .RGT ファイルの最初のラインとして必須
#reg t マクロを定義
#string <name>(<string>) <name> を <string> と同等のものと
して定義 (「文字列の列挙」を参照)
%nD 逆アセンブリを表示
%nE プロセッサの例外を表示
%n[!]<[$]r,f[|f|...]> レジスタ フィールドを表示
{m} マクロを使用

上記の補足
[] = 任意のパラメータ
n = 10 進数の数値
! = 読み取り専用
r = レジスタ名 (先頭に $ がある場合は 16 進数のアドレスが後続する)
t = 行の最後までマクロで使用されるテキスト
m = レジスタのマクロ番号
name = <string> の代替テキスト。例:
#string spuop{PUT=32,PUTB,PUTF,PUTL=36,PURLB,PUTLF,PUTR=48}
...
%6!<mfc0,6s27:8{#spuop}>
f = フォーマット指定子
[n]x[n:n] 16 進数
[n]d[n:n] 符号付きの 10 進数
[n]b[n:n] 2 進数
[n]f[n:n] 浮動小数点
[n]g[n:n] ダブル
[n]u[n:n] 符号なしの 10 進数
[n]s[n:n]{text[,text,...]} 文字列の列挙
[n]m[n:n]{[0|-|.|c]} ビット マスク

上記の補足

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 147 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
メモリとレジスタの閲覧・変更

c = ASCII 文字
[n] は [フィールドの長さ]
[n:n] は [開始ビット : ビット フィールドの長さ]
<text> は文字列リテラル、または {#<name>} 構文による参照 #string
定義。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 148 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ローカル変数とウォッチ変数の閲覧

10: ローカル変数とウォッチ変数の閲覧
この章では、ローカル、ウォッチ、オートの 3 つのビューを使用して変数をモニタする方法について説明
します。
この章には、以下のセクションがあります。
• ローカル変数の閲覧
• PC 周辺の変数を表示
• 変数のモニタリング
• ローカル ビューとウォッチ ビューでの配列の使用

ローカル変数の閲覧
プログラム カウンタが位置する関数のローカル変数を、ローカル変数ビューで閲覧できます。
ローカル変数 (現在の関数の変数) の値を閲覧するには、次の手順に従います。
• [ウィンドウ] メニューで、[新しいビュー] をポイントし、[ローカル] をクリックするか、[ローカル]
ツールバー ボタンをクリックします。
これで、現在の関数の全変数とその現在の値を示すローカル ビューを含む新しいウィンドウが開き
ます。

ローカル ビュー
ローカル ビューを使い、ターゲット上の現在の関数スコープのローカル変数を表示します。表示は、タ
ーゲット ユニット上の関数間で移動するたびに変わり、ターゲットが停止すると自動的に更新されま
す。

ターゲット上の各変数は、現在のデータ タイプおよび値と共に表示されます。列はサイズ変更ができ、
列のヘッダーを再配置する行にドラッグできます。
展開できる変数の前には、「+」記号が表示されます。これらの変数を展開するには、その変数をダブル
クリックします。現在展開されている変数は、再度ダブルクリックすると、折りたたまれます。配列を展
開すると、すべての配列メンバが表示されます。
• 表示は、ターゲットが停止するたびに自動更新します。
• 変数を変更するには、[値]フィールドの値をダブルクリックしてその値を編集します。
• 選択した変数の自動デクリメントやインクリメントが、キーボード ショートカットで行えます。デ
フォルトのキー割当てでは、「COMMA」が値のデクリメントで、「PERIOD」が値のインクリメ
ントです。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 149 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ローカル変数とウォッチ変数の閲覧

ローカル ビューのショートカット メニュー

グリッド ライン このチェックボックスをオンにすると、ローカル ビューを行と列に分ける表


グリッドを表示し、内容が読みやすくなります。

スタティック スタティック クラス メンバを表示するかどうかを指定します。


メンバを表示

オート/16 進数/ 形式オプションを 1 つ選択します。自動検出 ([オート]) を使用、または選択


10 進数 した変数を 16 進数や 10 進数として表示します。

PC 周辺の変数を表示
オート ビューのプログラム カウンタ位置で、この機能の現ステートメント、前のステートメント、次の
ステートメントが参照する変数を閲覧できます。
オート表示する方法は次のとおりです。
• [ウィンドウ] メニューで [新しいビュー] をポイントし、 [オート]をクリックするか、または [オー
ト] ツールバー ボタンをクリックします。
これにより、自動ビューを含む新しいウィンドウが開きます。

オート ビュー
オート ビューは、現在の PC 位置でソース コードを調査して、現ステートメント、前のステートメン
ト、次のステートメントが参照する変数を表示します。
現在のプログラム カウンタおよび次のプログラム カウンタ ロケーションに対する逆アセンブリも表示さ
れます。インストラクションで使用されるレジスタは、そのインストラクションのエレメントとして表示
され、適切にフォーマットされます。有効なアドレスが計算され、ロード-ストア処理用に表示されま
す。ロード処理に関しては、ロードされるメモリのコンテンツを表示するため、有効なアドレスが逆参照
されます。オート ビューにおける逆アセンブリ表示は、オート ビューのショートカット メニューで無効
にすることができます。
このビューは、PC ロケーションが変わるたびに変更されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 150 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ローカル変数とウォッチ変数の閲覧

• 選択した値の自動デクリメントやインクリメントが、キーボード ショートカットで行えます。デフ
ォルトのキー割当てでは、「COMMA」が値のデクリメントで、「PERIOD」が値のインクリメン
トです。

オート ビューのショートカット メニュー

グリッド チェックしている場合、オート ビューの行と列で分割しているテーブル グリッド


ライン を表示して可読性を向上します。

スタティック スタティック クラス メンバの表示オン/オフを切り替えます。


メンバを表示

逆アセンブリ 選択された場合、現在および次のプログラム カウンタ アドレスに対する逆アセン


オートの表示 ブリが表示されます。

オート/16 進 形式オプションを 1 つ選択します。自動検出 ([オート]) を使用、または選択した変


数/10 進数 数を 16 進数や 10 進数として表示します。

変数のモニタリング
ウォッチ ビューでは、特にウォッチしたい変数を設定できます。
ウォッチ変数の値を表示するには、次の手順に従います。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 151 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ローカル変数とウォッチ変数の閲覧

• [ウィンドウ] メニューで、[新しいビュー] をポイントして [ウォッチ]をクリックするか、[ウォッチ]


ツールバー ボタンをクリックします。
空のウォッチ ビューを含む新しいウィンドウが表示されます。このビューでは任意のウォッチ変数
が追加できます。追加できる変数は、現在の関数の範囲にとどまりません。

ウォッチ ビュー
ウォッチ ビューでは、変数や式をウォッチして、コードを実行するとどのように変化するかを確認でき
ます。ウォッチ ビューは、始めて開いた時には空白なので、ここに必要なウォッチを追加します。「ウ

ォッチ変数の追加」を参照してください。

ウォッチ変数の追加
各アプリケーション変数は、現在のデータ タイプおよび値と共に表示されます。列はサイズ変更がで
き、列のヘッダーは再配置する行にドラッグできます。
展開できる変数の前には、「+」記号が表示されます。これらの変数を展開するには、その変数をダブル
クリックします。現在展開されている変数は、再度ダブルクリックすると、折りたたまれます。配列を展
開すると、すべての配列メンバが表示されます。
• ウォッチ対象の変数値の表示は、ターゲットが停止するたびに自動更新されます。
• 赤色で表示されている変数は、最後にウォッチ ビューで値を変更した後に変更されていることを示
します。
• 変数の値を変更する場合は、値フィールドの値をダブルクリックして、その値を編集します。
• 選択した値の自動デクリメントやインクリメントが、キーボード ショートカットで行えます。デフ
ォルトのキー割当てでは、「COMMA」が値のデクリメントで、「PERIOD」が値のインクリメン
トです。
• ウォッチ ビューを閉じると、追加して監視していた変数は失われます。しかし、監視した変数を含
むオープン ウォッチ ビューの設定は、デバッグ セッション間に保存されます。

ウォッチ ビューのショートカット メニュー


監視した変数を右クリックして選択すると、このショートカット メニューが表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 152 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ローカル変数とウォッチ変数の閲覧

貼り付け これを選択すると、クリップボードのコンテンツを使用して、新規のウォ
ッチ式がビューに加えられます。このメニュー アイテムは、クリップボー
ドにテキスト情報が含まれる場合のみ表示されます。

グリッド ライン このチェックボックスをオンにすると、ウォッチ ビューに列と行に区切ら


れた表グリッドを表示し、内容を読みやすくします。

スタティック メンバ スタティック クラス メンバを表示するかどうかを指定します。


を表示

オート/16 進数/10 進数 形式オプションを 1 つ選択します。自動検出 ([オート]) を使用、または選


択した変数を 16 進数や 10 進数として表示します。

親に移動 クラス/構造体の式からその親に移動します。このメニュー項目は該当す
る式の種類を右クリックした場合のみ、表示されます。「クラス/構造体
の式から親への変更」を参照してください。

省略型表現式 展開されたクラス/構造体のメンバからそれに該当する省略型の式に変更
します。このメニュー項目は該当する式の種類を右クリックした場合の
み、表示されます。「表現の短縮」を参照してください。

変数を参照 変数ブラウザを表示します。このブラウザでは、アプリケーション内にあ
るすべての使用する可能性のある変数を、C++ クラスごとに閲覧し、追加
する必要のある変数を正確に選択できます。

ウォッチを追加 ウォッチする変数の名称が入力できます。ウォッチする変数の名称を入力
するためのダイアログが表示されます。

ウォッチを削除 ウォッチ ビューから、指定のウォッチ変数を削除します。

すべてのウォッチの ウォッチ ビューからすべてのウォッチ変数を削除します。ウォッチ ビュ


削除 ーからすべてのウォッチ変数を削除するには、表示されるダイアログで

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 153 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ローカル変数とウォッチ変数の閲覧

[はい] をクリックし、ビュー内に残すには [いいえ] をクリックします。

ウォッチ変数の追加
ウォッチ変数の追加には 3 つの方法があります。
• 変数をソース ビューからウォッチ ビューにドラッグ アンド ドロップします。
• ウォッチ ビュー ショートカット メニューで [ウォッチを追加] をクリックします。[ウォッチ数式入
力] ダイアログで、必要な変数名を入力します。新しいウォッチ ビューにそのウォッチが追加され、
ターゲットの値が自動的に表示されます (取得できる場合のみ)。
• ショートカット メニューの [変数を参照] オプションをクリックして、その C++ クラスに従った変数
を閲覧します。「変数ブラウザを使用したウォッチの追加」を参照。

変数ブラウザを使用したウォッチの追加
ウォッチしたい変数の正確な名称がわからない、さらにはアプリケーションの特定の C++ クラスに属し
ている変数を閲覧したい (別のクラスにある変数には、同じ名称をもつものがある)、という場合がありま
す。この場合、C++ 変数ブラウザを使用して、アプリケーションのすべての変数を、クラスごとにグル
ープ分けして閲覧できます。
• ウォッチ ビューのショートカット メニューから [変数を参照] を選択して [変数ブラウザ] ダイアログ
ボックスを開きます。

[変数ブラウザ] ダイアログには、開発中のアプリケーションのすべての変数が表示されます。
追加したい変数、または変数群を指定したら、[ウォッチの追加] ボタンをクリックします。ここで表示さ
れるダイアログでは、選択した変数がウォッチ ビューに追加されています。ウォッチ ビューにそれ以上
ウォッチを追加せずにダイアログを終了するには、[閉じる] ボタンをクリックします。

クラス/構造体の式から親への変更
[親に移動] 機能は、クラス/構造体のアクセサを含む式を右クリックすると有効になります。この機能で
は、最後のメンバ アクセサが式から削除されます。たとえば以下の式で、
my_class.my_structure.var3

[親に移動] を選択すると、以下のようになります。
my_class.my_structure

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 154 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ローカル変数とウォッチ変数の閲覧

ここで [親に移動] を再度選択すると、以下のようになります。


my_class

表現の短縮
[省略型表現式] 機能は、ウォッチ ビューで展開されたクラス/構造体のメンバを右クリックすると有効に
なります。この機能では、クラス アイテムが、選択したメンバ アイテムをアクセスするための同等の 1
行の式に変換されます。たとえば、展開された以下のクラスでは、
my_class
my_var1
my_var2
my_structure
.var1
.var2
.var3 <--

矢印のついた「var3」に対して [省略型表現式] を選択すると、「my_class」が 1 つの表現式に変換され


ます。
my_class.my_structure.var3

ウォッチ ビューで 128ビット レジスタを表示


各種接尾辞を使用することにより、128 ビット レジスタの異なるエレメント (SPU または VMX のいずれ
か) を表示することができます。
以下がエレメント指定子の接尾辞です。

浮動小数 .x、.y、.z、.w または .f0、.f1、.f2、.f3

倍精度 .xy と .zw または .d0 と .d1

符号なし 64 ビット .ll0 と .ll1

符号付き 64 ビット .ll0.s と .ll1.s

符号なし整数 .l0 — .l3

符号付き整数 .l0.s — .l3.s

符号なし短整数 .s0 — .s7

符号付き短整数 .s0.s — .s7.s

符号なしバイト .b0 — .b15

符号付きバイト .b0.s — .b15.s

例:レジスタ r002 の符号付バイト 12 を表示するには、「$r002.b11.s」と入力します。

書式指定子を使用して変数を表示
[ウォッチ] ペインで変数を表示する際、書式指定子を使用して、値が表示される形式を変更することがで
きます。
デバッガでは Visual Studio でサポートされている書式指定子のリストが拡大適用され、一部の Windows
固有オプションが無視されます。詳細は、「MSDN - Format Specifiers in C++」を参照してください。
サポートされている書式指定子

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 155 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ローカル変数とウォッチ変数の閲覧

指定子 書式 式 表示される値

b バイナリ 0x12345678, b 0b00010010001101000101011001111000

指定子「b」は、「h」または「l」(hb、hl) に変更してそれぞれ 16 ビットや 64 ビット幅に強制するこ


とが可能です。

hf 半精度浮動小数点数 (3./2.), hf 1.5000

he 半精度科学記数法 (3./2.), he 1.5000e+000

hg 半精度浮動小数点数 (3./2.), hg 1.5


と半精度科学法のう
ち、いずれか短い方

メモリ位置に対する書式記号

指定子 書式 式 表示される値

mf16 8 個の半精度浮動小 ptr, mf16 0x810002B4 0.0000, 1.0000, 2.0000,


数点値 3.0000, 4.0000, 5.0000, 6.0000, 7.0000

mf32 4 個の単精度浮動小 ptr, mf32 0x810002B4 0.00000000, 2.00000000,


数点値 3.00000000, 4.00000000

mf64 2 個の倍精度浮動小 ptr, mf64 0x810002B4 0.0000000000000000,


数点値 1.0000000000000000

sej EUC-JP ストリング ptr, sej "あいうえお"

ssj Shift-JIS ストリング ptr, ssj "あいうえお"

メモ:デバッガでは「0x」仕様に従い、8 進数値には「0o」を、バイナリには「0b」を接頭辞として
付けて表示されます。

サポートされていない書式指定子
• hr (HRESULT または Win32 エラー コード)
• wc (Windows クラス フラグ)
• wm (Windows メッセージ番号)

ローカル ビューとウォッチ ビューでの配列の使用

ユーザー定義の配列サイズ – ウォッチ ビューのみ


配列の表示上限を変更するには、配列名に 'n' の接尾辞を付けます。ここで 'n' はユーザー定義の上限で、
たとえば次のようになります。
myArray, 32

上記は、元の配列のサイズにかかわらず、要素 0 から 32 までを表示します。
ポインタについても同様に設定できます。上述と同様の方法でポインタ名に接尾辞を付け、ポインタを配
列として表示します。たとえば、次のようになります。
pPacket, 10
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 156 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ローカル変数とウォッチ変数の閲覧

上記は、ポインタ 0~10 を配列として表示します。

配列のインデックスのスクロール – ウォッチ ビューとローカル ビュー


配列のいずれかの要素が選択されている場合、オープンしている配列のインデックスをその上限と下限の
間でキーパッドの<+> キーと <-> キーを使ってスクロールすることができます。これらのキーを押す
と、表示されるすべての配列インデックスが、1 インデックス単位で増分または減分されます。たとえ
ば、
myArray
[0]
[1]
[2]
[3]

上記は、<EQUALS SIGN> を押すと次のようになります。


myArray
[1]
[2]
[3]
[4]

さらに上記は、<MINUS SIGN> を押すと次のようになります。


myArray
[-1]
[0]
[1]
[2]

Ctrl キーを押しながら <EQUALS SIGN> または <MINUS SIGN> を使うと、表示される配列インデック


スをページ単位でスクロールできます。4 つの要素が表示される場合、ページの値は 4 になります。たと
えば、
myArray
[0]
[1]
[2]
[3]

上記は、Ctrl+EQUALS SIGN を押すと次のようになります。


myArray
[4]
[5]
[6]
[7]

さらに上記は、Ctrl+MINUS SIGN を押すと次のようになります。


myArray
[-4]
[-3]
[-2]
[-1]

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 157 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
コールスタック情報の表示

11: コールスタック情報の表示
この章では、コールスタック ビューを使用してプログラム関数の順序を表示する方法について説明しま
す。
この章には、以下のセクションがあります。
• コールスタックの閲覧

コールスタックの閲覧
プログラム スタックの現在の状態を、コールスタック ビューで閲覧できます。このビューでは、プログ
ラム カウンタの現在位置に至るまでにアプリケーションが呼び出したプログラム関数の順序が表示され
ます。
コールスタックを閲覧するには、次の手順に従います。
• [ウィンドウ] メニューで、[新規ビュー] をポイントし、[コールスタック] をクリックするか、[コー
ルスタック] ツールバー ボタンをクリックします。
これで、プログラム スタックの現在の状態を示すコールスタック ビューを含む新しいウィンドウが
開きます。

コールスタック ビュー
コールスタック ビューでは、プログラムスタックの内容をいつでも閲覧し、特定の関数コールを選択し
て、現在のデバッガ コンテキストを変更できます。
アプリケーションが実行中止する度に、コールスタック ビューは、アプリケーションが現在のプログラ
ム カウンタに到達するまでに呼び出した関数に更新されます。
コールスタック ビューでリスト表示されている関数のうち、先頭に表示されているものは、最後に呼び
出された関数です。ウィンドウには呼び出された各関数のデータ型や現在のスタック使用状況も表示され
ます。たとえば、関数がメインの実行可能ファイル内にない場合には、.self または PRX の名前など、[モ
ジュール] 列には関数を含むモジュールの名前が表示されます。モジュール名が利用できない場合 (シス
テム関数などの場合) には、この列はブランクにされます。

デバッガのコンテキストを変更するには、必要な機能をダブルクリックします。「 」記号は、現在コ
ールスタックで閲覧しているコンテキストを示しています。特定の関数に新しいコンテキストを設定する
と、すべてのデバッガ ビューは更新され、その関数が呼び出された時点のターゲットについての情報を
表示します。

メモ:[PPU デバッギング オプション] ダイアログの [コールスタックのリンク レジスタを調整する]


チェックボックスをオンにすると、コールスタック ビューのビヘイビアが変更され、各レベルのスタ
ックに対するリンク レジスタの値をポイントするのではなく、先行する命令をポイントするような調
整が可能となります。詳細は、「PPU デバッギング設定」を参照してください。

コールスタック ビューに表示されるアイコン (プログラム カウンタやブレークポイントなど) の色は、[オ


プション] ダイアログの [フォントと色] 設定で変更することができます (「フォントと色設定」を参照)。
デバッガにシンボル情報が保持されていない関数内に PC が存在する場合、コールスタック ビューに
は、「??? Address」と表示されます (コールスタックが PRX を通じて移動する場合など)。これらの場合

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 158 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
コールスタック情報の表示

デバッガでは関数開始との推測に基づいてコールスタックの確立が試みられ、検出される各関数の開始に
「??? Address」が表示されます。
値 0xD15EA5ED がコールスタック ビューに表示されることがあります。これは、LR の読み込みに関する
問題のため、あるいはターゲットが無反応/切断されているため、デバッガでスタック レベルの読み込み
が行えないことを表します。

コールスタック ビューのショートカット メニュー

スタック レベルを 選択した機能が呼ばれたときに、デバッガ コンテキストをターゲットの状


セット 態に変更できます。このコマンドを有効にするには、機能呼び出しがコー
ル スタック ビューで選択されている必要があります。デバッガのコンテ
キストが変更されると、それが現在のスタック コンテキストであることを
示す文字 がコンテキストの前に設定されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 159 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
TTY 情報の表示

12: TTY 情報の表示


この章では、TTY ビューを使用したゲーム出力の表示方法について説明します。
この章には、以下のセクションがあります。
• TTY 出力の閲覧

TTY 出力の閲覧
プログラムからの TTY 出力は、TTY ビューで閲覧できます。このビューでは、デバッグなど printf タイ
プの出力が表示されます。

メモ: Target Manager では各々 TTY 出力ストリームを閲覧することも可能です。

TTY 出力を閲覧するには、次の手順に従います。
• [ウィンドウ] メニューで [新しいビュー] をポイントして、[TTY] をクリックするか、[TTY] ツール
バー ボタンをクリックします。
これにより、TTY ビューをもつ新しいウィンドウを開き、ビューのツールバーを使用して TTY スト
リームの特定タイプをフィルタすることができます。
TTY バッファ サイズは構成ファイルに保存され、デバッガが起動されるたびに復元されます。TTY バッ
ファのデフォルトは 64KB です。TTY チャンネルの構成に関する詳細は、「TTY チャンネルのプロパテ
ィ」を参照してください。

TTY ビュー
TTY ビューには、ゲームで生成された標準出力がすべて表示されます。ソース コードに printf コマンド
を挿入してある場合、それらのコマンドからの出力を TTY ビューで閲覧できます。
ビューを上下にスクロールして、以前の出力を閲覧することもできます。
TTY ビュー上部のタブ バーには、それぞれの TTY 出力ストリーム用のタブがあります。そのうち 1 つを
選択して、該当するストリームを表示します。たとえば、PPU (STDIN/OUT) はゲーム出力を表示しま
す。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 160 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
TTY 情報の表示

TTY ビューのショートカット メニュー


TTY ビューで右クリックすると、以下のショートカット メニューが表示されます。

すべて選択 TTY ビューのすべてのテキストを選択します。

検索 TTY ビューでテキストを検索するためのダイアログ ボックスを開きます。テキス


トが検出されると、そのテキストを含む行がカーソルで示されます。

次を検索 前述の [検索] コマンドを繰り返します。

クリア 選択したチャンネルの TTY バッファを消去します。

行に移動 選択したライン位置にカーソルを移動します。

EUC-JP モード このチェックボックスをオンにすると、現在のエンコーディング メソッド検出


(ShiftJIS または デフォルトの UTF8) が無効にされ、EUC (Extended Unix Code) エ
ンコーディングが有効となります。

ShiftJIS このチェックボックスをオンにすると、現在のエンコーディング メソッド検出


モード (EUC-JP またはデフォルトの UTF8) が無効にされ、ShiftJIS エンコーディングが有
効となります。

不明な ESC オプション サブメニューが開きます。この設定では、TTY 出力に含まれる未認識


エスケープ コードの処理方法について決定します。印刷=通常のキャラクタとして
表示、拡張=キャレット記号 (^) に続いてキャラクタを表示、非表示=無視、とな
ります。

プロパティ 選択した TTYチャンネルの詳細を表示します。「TTY チャンネルのプロパティ」


を参照。

TTYチャンネ 利用可能な TTYチャンネルの概要を説明します。「TTY チャンネルの管理」を参


ルの管理 照。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 161 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
TTY 情報の表示

TTY チャンネルのプロパティ
[TTYチャンネルのプロパティ] ダイアログは、選択した TTY チャンネルのオプション シートを表示し、
タイトルバーのかっこ内にそのチャンネル名を表示します。
TTY チャンネルのプロパティを表示するには、次の手順に従います。
(1) TTY ショートカット メニューで、TTY チャンネルと [プロパティ] を選択します (「TTY ビューのシ
ョートカット メニュー」を参照)。現在設定されているオプションは [TTY チャンネルのプロパティ]
ダイアログに表示されます。
(2) 左側の [全般] をクリックするとプロパティ全般が表示されます。

名前 TTYチャンネルの名称を表示します。

使用可能 チェックしている場合、TTY ビューの TTY チャンネルを表示します。

TTY 入力を画面 キーボード入力ができるコンソール出力チャンネルでは、このチェックボックス


にエコーさせる は、押下したキーをコンソール出力ストリームにエコーするかどうかを決定する
ものです。デフォルトでは無効化されていますが、ターゲット側のアプリケーシ
ョンが、入力されたキャラクタをコンソール ストリームに送信しない場合は有
効にできます。

タイムスタンプ 選択している場合、TTY に対するテキスト出力の各行の先頭に


を有効化 timestamp.Timestamps が付けられます。タイムスタンプはローカル形式で追加
されます。

タイムスタンプ 現在の日付をタイムスタンプに追加します。
に日付を含める

サイズ (Kb) TTY チャンネル バッファのサイズをキロバイトで表示します。デフォルトは


64KB です。

右端で折り返す チェックしている場合、TTY 出力は行末で禁則処理をします。

横 テキスト ユーザー インターフェイスの幅を設定します。このオプションは、タ


ーミナル モードのチャンネルにのみ適用されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 162 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
TTY 情報の表示

縦 テキスト ユーザー インターフェイスの高さを設定します。このオプションは、


ターミナル モードのチャンネルにのみ適用されます。

(3) 左側の [ストリーム マッピング] をクリックするとストリーム マッピングのプロパティが表示されま


す。

未マップ 該当する TTY チャンネルでマッピングしていないストリームをリスト表示しま


す。ストリームをマップ済みリストに移動するには、そのストリームを選択して
>> ボタンをクリックします。

マップ済 該当する TTY チャンネルでマッピングした TTY ストリームをリスト表示しま


す。ストリームをマッピングなしリストに移動するには、そのストリームを選択
して << ボタンをクリックします。

(4) 左側の [ログ] をクリックすると、ログのプロパティが表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 163 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
TTY 情報の表示

ファイルにログ 選択したチャンネルのログを開始し、ロギング オプションの設定が行えま


す。

ファイル名 ログ出力のファイル名を設定できます。

最大サイズ ログ ファイルの最大サイズ (バイト) を設定できます。ファイル サイズを強制


(バイト) 的に無制限にするには、「-1」を使用します。

追加 チェックしている場合、それぞれの新しいデバッグ セッションのファイルの
開始時に開く代わりにログ出力がファイルに付加されます。

TTY クリア時に TTY バッファがクリアされるたびにログ ファイルもクリアされます。


ログを消す

TTY 出力のフィルタリング
[TTY チャンネルのプロパティ] ダイアログボックスの [フィルタ] オプションでは、一致/置換ストリング
に、正規表現を使用することができます。受信 TTY の各ラインに対し、Target Manager では、該当ライ
ンと一致する最初の (該当する場合) フィルタが検出され、関連したテキストの置換が行われます。
フィルタを追加するには、[フィルタ] ダイアログボックスの [+] 記号をクリックします。これにより、マ
ッチ ストリングと置換ストリング (オプション) の設定が促されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 164 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
TTY 情報の表示

[一致] ストリングでは、マッチ対象となるストリングを指定できます。
[置換] ストリングでは、一致するストリングと置換するストリングを指定、または空白のままにして一致
したストリングを TTY 出力から削除することができます。置換表現式には、以下の構文を使用します。

テキスト 意味

\\ リテラル バックスラッシュ文字。

\{0} 一致したストリング。

\{1}, \{2}, n 番目のサブ表現マッチ。


\{n}

\{<color>} カラー テキストを開始。オプションは、「red」、「blue」、「black」、


「green」、「cyan」、「magenta」。

\{normal} デフォルトのカラー テキストを開始。

マッチングに使用される正規表現構文に関する詳細は、http://msdn.microsoft.com/ja-
jp/library/k3zs4axe(v=vs.80).aspx で確認することができます。
例:

一致 ==== Start agent ====

置換 \{red}\{0}\{normal}

結果 「Start agent」ラインを赤でハイライト表示。

一致 {lv2\(2\): system software: }{.*}

置換 \{1}\{blue}\{2}\{normal}

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 165 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
TTY 情報の表示

結果 システム モードを青でハイライト表示。

一致 \[INFO\]:.*

置換

結果 「[INFO]:」で始まるすべての行を削除。

上下矢印キーを使用し、フィルタのリストを移動することができます。
選択したフィルタの正規表現の構文を確認するには、 [] 記号をクリックします。
選択したフィルタを削除するには、[] アイコンをクリックします。

TTY チャンネルの管理
すべての TTY チャンネルの概略を取得するには、TTY ビューのショートカット メニューで [TTY チャン
ネルの管理] をクリックします。TTY チャンネルの管理ダイアログが表示されます。

それぞれのチャンネルに対してこのダイアログは、チャンネル名、TTY の受信バイト数、最大バッファ
サイズ、割り付けられたメモリのバイト数を表示します。
[割り当て済みメモリ] には、現在 TTY チャンネル専用になっているメモリの量が表示されます。その量
は、最大バッファ サイズ になるまで TTY出力の受信ごとに増加します。バッファサイズ以上に TTY 出
力を受信した場合には、その最大バッファ サイズ に従って、TTY 出力が付加されるごとにバッファの最
初から徐々にデータを削除します。
• [新規…] をクリックして新しい TTY チャンネルを追加します。TTY チャンネルの詳細ダイアログ
は、「新しいチャンネル」用に表示され、そこで新しいチャンネルを適切に設定できます。「TTY
チャンネルのプロパティ」を参照。
• [削除]をクリックして、TTYチャンネルを削除します。チャンネルを削除してもよいかを確認するメ
ッセージが表示されます。
• [プロパティ…] をクリックして選択した TTY チャンネルのプロパティを表示します。「TTY チャン
ネルのプロパティ」を参照。
• 選択したチャンネルのプロパティをデフォルトに戻すには、[リセット] をクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 166 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

13: カーネル情報の表示
この章では、カーネル ビューで対応している様々なタイプのオブジェクトについて説明します。

カーネル ビュー
スレッド、ミューテックス、PRX、メモリ コンテナなどの各種システム オプジェクトに関する情報を、
タブを選択することにより、カーネル ビューに表示できます。
カーネル情報を閲覧するには、次の手順に従います。
• [ウィンドウ]メニューで [新規ビュー] をポイントして [カーネル] をクリックするか、[カーネル] ツ
ールバー ボタンをクリックします。
これで、カーネル ビューを含む新しいウィンドウが開きます。

メインのビュー エリアは、オブジェクトの階層ビューを表示するツリー ビュー (ビューの上半分) と、現


在選択しているノードについての詳細を表示するリスト ビュー (ビューの下半分) に分割されています。
階層ビューには、異なるオブジェクト間の関係が表示されます。 たとえば、あるスレッドが休止中であ
る場合、どのオブジェクトを待機中であるか、また同期オブジェクトでは、どのスレッドがそのオブジェ
クトを待機中であるかなどです。
カーネル同期プリミティブ、その属性および使用法に関する詳細情報は「Lv2-Users_Manual_j.pdf」を参
照してください。
ツリー ビューのノードをクリックすると、リスト ビューのコンテンツが変化し、詳細情報が表示されま
す。

プロセス
プロセス ノードを選択すると、現在のプロセスのメモリ使用量のサマリーが表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 167 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

共有メモリ このプロセスによって作成された共有メモリ サイズの合計。

ローカル メモリ ローカルに割り当てられたプロセス メモリ。

テキスト サイズ 静的テキスト サイズの合計 (rodata サイズを含む)。

モジュール PRX テキスト サイズの合計 (rodata サイズを含む)。


テキスト サイズ

モジュール データ PRX データ サイズの合計。


サイズ

その他 その他メモリ (データ サイズ、スタック サイズ、SPU スレッド コンテキスト


メモリなど)。

合計メモリ使用量 メモリの合計使用量 (= 上記の合計)。

ファイル名 該当プロセスを作成したモジュール ファイル名。

GUID モジュールがコンパイルされる際/リンクされる際に、リンカによって設定さ
れるグローバルに固有な識別子 (PPU-GUID とも呼ばれる)。
メモ:デフォルトではリンカによる GUID 設定が行われません。この場
合、モジュールに GUIDは存在せず、デバッガによって 0 が戻されます

メモ:テキスト サイズとデータ サイズは常に 64 KB の倍数となります。

PPU スレッド
[PPU スレッド] ノードを選択すると、下方のビューにスレッドの全リストが表示されます。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 168 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

ハンドル lv2 OS から返されるスレッド ID によって、スレッドの作成された時刻を示す


関数 sys_ppu_thread_create() が生成されます。

優先度 スレッドの優先順位。

ステータス スレッドの現在のステータス。 以下の値が考えられます。


IDLE
RUNNABLE
ONPROC
SLEEP
SUSPENDED
SLEEPSUSPENDED
STOP
ZOMBIE
DELETED

スタックアドレス スレッド スタックのアドレス。

スタックサイズ スレッド スタックのサイズ。

名前 ユーザー指定の名前。

Sys. lib. このオブジェクトを作成したシステム ライブラリまたは PRX の名前。

基本優先度 デフォルトのスレッド優先度。

スレッドがなぜブロックされたかを判定するには:
[PPU スレッド] ノードを展開し、見たいスレッドを探します。

上の例では、ハイライトされたスレッドが軽量ミューテックス (LW Mutex) において待機しています。


LW ミューテックス ノードに付加された「Waiting (待機中)」というテキストが、スレッドがこのオブジ
ェクトにおいて待機中であることを示しています。また、「Owned by...」というテキストで示される軽
量ミューテックスも保持しています。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 169 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

2つのミューテックスについての詳細な情報を表示させるには、軽量ミューテックス ノードを展開し、ツ
リーで軽量ミューテックスの場所を探してください。

オブジェクトのノードを表示することにより、このオブジェクトで待機している他のスレッドに加え、こ
のオブジェクトを現在保持する (またはロックした) スレッドも確認することができます。

スレッド デッドロック検出
デバッガでは、スレッドのチェックおよび潜在的なデッドロックへのリソース割り当てが行われ、詳細調
査を喚起する警告が発せられます。

潜在的デッドロックを含むスレッドは、メイン「PPU スレッド」セクションですべて警告され、デッド
ロック サイクル自体は、「潜在的デッドロック」セクションにコピーされます。
チェーンをたどっていくと、スレッドと割り当てられたリソース間のサイクル完了までの関係がわかりま
す。
制限:スレッドが所持可能なリソースのみが、検出フェーズで検討されるため、検出されないデッドロッ
クがシステムに存在する可能性もあります (セマフォで待機中のスレッドなど)。

メモ:すべての同期基本命令には、デバッガ スクリプティング API でアクセスすることができます。


デッドロックの検出方法例について
は、%SN_PS3_PATH%\examples\DebuggerScripting\DeadLockDetection.c スクリプトを参照してく
ださい。

セマフォ
セマフォ ビューには、セマフォのリストが表示され、それらにおいて待機しているスレッドが示されま
す (該当する場合)。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 170 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

ハンドル lv2 OS 作成関数 sys_semaphore_create() が返すオブジェクト ID。

カウント セマフォの現行値。

最大カウント セマフォの最大値。

attr_protocol 複数のスレッドが 1 つのオブジェクト上で待機している場合の、スケジュー


リング プロトコルを示します。
有効な値は以下のとおりです。
SYS_SYNC_FIFO – 「先入れ先出し」ポリシーに基づき、次のオーナーが選
択されます。
SYS_SYNC_PRIORITY – スレッドの優先度に基づき、次のオーナーが選択さ
れます。
SYS_SYNC_PRIORITY_INHERIT – 該当オブジェクトを保持するスレッド
が、優先度のより高いスレッドをブロックする原因となる場合、当該スレッ
ドは一時的にその高優先度を継承します。

attr_pshared オブジェクトがどのように共有されているかを示します。
SYS_SYNC_NOT_PROCESS_SHARED – オブジェクトはプロセス間で共有さ
れていません。

key オブジェクトを作成する際に指定される固有のキー。

フラグ オブジェクトを作成する際に指定されるフラグ。

名前 オブジェクトを作成する際に指定される最大 8 文字の名前。

Sys. lib. このオブジェクトを作成したシステム ライブラリまたは PRX の名前。

待機スレッド 待機中スレッドのリスト。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 171 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

ミューテックス

ハンドル lv2 OS 作成関数 sys_mutex_create() が返すオブジェクト ID。

オーナー スレッド 当該オブジェクトを現在保持するスレッド (0xffffffff は、オブジェクトが初期


化されているものの、現在保持されていないことを表す)。

ロック カウント オブジェクトが、同じオブジェクトによって (再帰的に) ロックされた回数を


示します。

条件カウント 現在このミューテックスで使用されている条件変数の数。

条件変数 ID 常に「0」。

attr_protocol 複数のスレッドが 1 つのオブジェクト上で待機している場合の、スケジュー


リング プロトコルを示します。
有効な値は以下のとおりです。
SYS_SYNC_FIFO – 「先入れ先出し」ポリシーに基づき、次のオーナーが選択
されます。
SYS_SYNC_PRIORITY – スレッドの優先度に基づき、次のオーナーが選択さ
れます。
SYS_SYNC_PRIORITY_INHERIT – 該当オブジェクトを保持するスレッドが、
優先度のより高いスレッドをブロックする原因となる場合、当該スレッドは
一時的にその高優先度を継承します。

attr_recursive sync オブジェクトを既に保持またはロックしたスレッドが、再びそれをロッ


クできるかを定義します。
有効な値は以下のとおりです。
SYS_SYNC_RECURSIVE – オーナーは、オブジェクトを複数回ロックするこ
とが可能です。
SYS_SYNC_NOT_RECURSIVE – オーナーは、オブジェクトを 1 度のみロック
することが可能です。

attr_pshared プロセス間で、オブジェクトが共有される様子を示します。
有効な値は以下のとおりです。
SYS_SYNC_NOT_PROCESS_SHARED – オブジェクトは、プロセス間で共有
されません。

attr_adaptive 適応属性は実行されません。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 172 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

key オブジェクトを作成する際に指定される独自のキー。

フラグ オブジェクトを作成する際に指定されるフラグ。

名前 オブジェクトを作成する際に指定される最大8文字までの名前。

Sys. lib. このオブジェクトを作成したシステム ライブラリまたは PRX の名前。

待機スレッド 待機中スレッドのリスト。

軽量ミューテックス

ハンドル lv2 OS 作成関数 sys_lwmutex_create() が返すオブジェクト ID。

オーナー スレッド 当該オブジェクトを現在保持するスレッド (0xffffffff は、オブジェクトが初期


化されているものの、現在保持されていないことを表す)。

ロック カウント オブジェクトが、同じオブジェクトによって (再帰的に) ロックされた回数を


示します。

attr_protocol 複数のスレッドが 1 つのオブジェクト上で待機している場合の、スケジュー


リング プロトコルを示します。
有効な値は以下のとおりです。
SYS_SYNC_FIFO – 「先入れ先出し」ポリシーに基づき、次のオーナーが選択
されます。
SYS_SYNC_PRIORITY – スレッドの優先度に基づき、次のオーナーが選択さ
れます。
SYS_SYNC_PRIORITY_INHERIT – 該当オブジェクトを保持するスレッドが、
優先度のより高いスレッドをブロックする原因となる場合、当該スレッドは
一時的にその高優先度を継承します。

attr_recursive sync オブジェクトを既に保持またはロックしたスレッドが、再びそれをロッ


クできるかを定義します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 173 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

有効な値は以下のとおりです。
SYS_SYNC_RECURSIVE – オーナーは、オブジェクトを複数回ロックするこ
とが可能です。
SYS_SYNC_NOT_RECURSIVE – オーナーは、オブジェクトを 1 度のみロック
することが可能です。

name オブジェクトを作成する際に指定される最大 8 文字の名前。

Sys. lib. このオブジェクトを作成したシステム ライブラリまたは PRX の名前。

待機スレッド 待機中スレッドのリスト。

条件変数

ハンドル lv2 OS 作成関数 sys_cond_create() が返すオブジェクトID。

ミューテックス ID 関連するミューテックス変数の ID。

attr_pshared プロセス間で、オブジェクトが共有される様子を示します。
有効な値は以下のとおりです。
SYS_SYNC_NOT_PROCESS_SHARED – オブジェクトはプロセス間で共有さ
れません。

key オブジェクトを作成する際に指定される独自のキー。

フラグ オブジェクトを作成する際に指定されるフラグ。

名前 オブジェクトを作成する際に指定される最大8文字までの名前。

Sys. lib. このオブジェクトを作成したシステム ライブラリまたは PRX の名前。

待機スレッド 待機中スレッドのリスト。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 174 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

読み書きロック

ハンドル lv2 OS 作成関数 sys_rwlock_create() が返すオブジェクト ID。

オーナー スレッド 当該オブジェクトを現在保持するスレッド (0xffffffff は、オブジェクトが初期


化されているものの、現在保持されていないことを表す)。

attr_protocol リソースが利用可能になった場合に、複数の待機中スレッドがどのように処
理されるかを示します。
有効な値は以下のとおりです。
SYS_SYNC_FIFO
SYS_SYNC_PRIORITY
SYS_SYNC_PRIORITY_INHERIT

attr_pshared プロセス間でオブジェクトが共有される様子を示します。
有効な値は以下のとおりです。
SYS_SYNC_NOT_PROCESS_SHARED – オブジェクトはプロセス間で共有さ
れません。

key オブジェクトを作成する際に指定される独自のキー。

フラグ オブジェクトを作成する際に指定されるフラグ。

名前 オブジェクトを作成する際に指定される最大8文字までの名前。

Sys. lib. このオブジェクトを作成したシステム ライブラリまたは PRX の名前。

待機中の読み込み 読み込みでブロックされたスレッド数。
スレッド

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 175 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

イベント キュー

ハンドル lv2 OS 作成関数 sys_event_queue_create() が返すオブジェクト ID。

キー イベント キューを作成する際に指定される独自のキー。

キュー サイズ キューの最大サイズ。

attr_protocol 複数のスレッドが 1 つのオブジェクト上で待機している場合の、スケジュー


リング プロトコルを示します。
有効な値は以下のとおりです。
SYS_SYNC_FIFO – 「先入れ先出し」ポリシーに基づき、次のオーナーが選択
されます。
SYS_SYNC_PRIORITY – スレッドの優先度に基づき、次のオーナーが選択さ
れます。
SYS_SYNC_PRIORITY_INHERIT – 該当オブジェクトを保持するスレッドが、
優先度のより高いスレッドをブロックする原因となる場合、当該スレッドは
一時的にその高優先度を継承します。

タイプ イベント キューのタイプ。


有効な値は以下のとおりです。
SYS_PPU_QUEUE – 受信スレッドは PPU スレッドです。
SYS_SPU_QUEUE – 受信スレッドは、SPU スレッドです。

名前 オブジェクトを作成する際に指定される最大 8 文字の名前。

Sys. lib. このオブジェクトを作成したシステム ライブラリまたは PRX の名前。

待機スレッド 待機中スレッドのリスト。

キュー イベント 現在キューにあるイベントの数。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 176 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

軽量条件変数

ハンドル lv2 OS 作成関数 sys_cond_create() が返すオブジェクト ID。

名前 オブジェクトを作成する際に指定される最大 8 文字の名前。

Sys. lib. このオブジェクトを作成したシステム ライブラリまたは PRX の名前。

ミューテックス ID 関連するミューテックス変数の ID。

待機スレッド 待機中スレッドのリスト。

仮想メモリ領域

開始アドレス 仮想メモリ領域の開始アドレス (VM 領域)。

フラグ 領域のページ サイズとアクセス権:


ページ サイズ フラグ:
SYS_MEMORY_PAGE_SIZE_64K – 64K ページを指定

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 177 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

SYS_MEMORY_PAGE_SIZE_1M – 1MB ページを指定


アクセス権フラグ:
SYS_MEMORY_ACCESS_RIGHT_PPU_THR - PPU によるアクセスを許可
SYS_MEMORY_ACCESS_RIGHT_SPU_THR - SPU スレッドによるアクセスを
許可
SYS_MEMORY_ACCESS_RIGHT_RAW_SPU -raw SPU によるアクセスを許可

サイズ 仮想メモリ領域の合計サイズ (ページ数 x ページ サイズと同じ)。

オプション 現在は使用されていません。

PPU ページ フ PPU スレッドによるページ フォルトの回数。計算は仮想メモリの作成時から開始


ォルト されます。

SPU ページ フ SPU スレッドまたは raw SPU によるページ フォルトの回数。計算は仮想メモリ


ォルト の作成時から開始されます。

読み込み ページインの数 (バッキング ストアからの読み込み)。計算は仮想メモリの作成時


ページ数 から開始されます。

書き出し ページアウトの数 (バッキング ストアへの書き出し)。計算は仮想メモリの作成時


ページ数 から開始されます。

割り当てメモリ 仮想メモリ領域に割り当てられた物理メモリのサイズ。

使用メモリ 仮想メモリ領域によって現在使用されている物理メモリのサイズ (これがページ


に割り当てられるメモリ)。

タイムスタンプ 情報が取得された時の時間 (最後のリセットに関連)。

ページ数 仮想メモリ領域内のページ数。

各仮想メモリ ページ (VM ページ) に対し、以下の情報が提供されます。

アドレス メモリ内でページが開始されるアドレス。

ステータス lv2 デバッグ関数 sys_dbg_vm_get_page_information() で取得される、ページの


ステータスを表示。
以下のステータスが定義されます。
SYS_VM_STATE_UNUSED - このステータスのページは使用されておらず、そ
のコンテンツは定義されていません。これには、物理メモリも割り当てられてい
ません。仮想メモリ領域の作成直後には、すべてのページがこのステータスにな
ります。
SYS_VM_STATE_ON_MEMORY - このステータスのページには、物理メモリが
割り当てられています。そのコンテンツに応じて、メモリ内のページは、以下の
3 つのステータスのいずれかになります。
SYS_VM_STATE_STORED - このステータスのページには、物理メモリが割り当
てられず、そのコンテンツはバッキング ストアに保存されています。ユーザーが
このステータスのページにアクセスすると、バッキング ストアからの読み込みが
行われます。
SYS_VM_STATE_LOCKED - ページと物理メモリ間の関係が固定されていま
す。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 178 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

SYS_VM_STATE_DIRTY - このステータスの場合は、ユーザーによって割当て
メモリへの書き込みが既に行われているものの、バッキング ストアにはコンテン
ツが保存されていません。あるいは、バッキング ストアへの保存後にユーザーが
メモリへ再度書き込みをしているため、コンテンツが保存済みコンテンツとは異
なります。システムにより、このステータスのページから物理メモリの割当てが
解除される際、バッキング ストアにはそのコンテンツが保存されます。
これらステータスに関する詳細は、liblv2dbg ドキュメントを参照してください。

メモ:仮想メモリ領域とページでは、ドラッグ & ドロップに対応しています。領域またはページの開


始アドレスに移動するには、ツリーから領域またはページをデバッガのメモリ ウィンドウにドラッグ
します。

モジュール
プロセスで現在実行中のモジュールを表示することができます。

モジュール ID モジュールの識別子。

名前 SYS_MODULE_INFO で指定される PRX 名。

メモリ サイズ モジュールで使用されるメモリ量。

バージョン SYS_MODULE_INFO で指定される PRX バージョン。

属性 SYS_MODULE_INFO で指定されるモジュール属性。

開始 開始関数エントリ ポイントのアドレス。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 179 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

停止 停止関数エントリ ポイントのアドレス。

PRX 名 PRX への完全パス。

セグメント数 PRX 内のセグメント数。各セグメントは PRX の個別子ノードとして表示されま


す。

GUID モジュールがコンパイルされる際/リンクされる際に、リンカによって設定され
るグローバルに固有な識別子 (PPU-GUID とも呼ばれる)。

セグメント リスト ノードには、全モジュールからの全セグメントのリストが表示され、それぞれが属す


るモジュールと、そのタイプ、サイズが示されます。また、それぞれの開始と終了アドレスも記載される
ため、任意のメモリ アドレスが属するセグメントを確認することもできます。

アドレス セグメントのベース アドレス。

ファイル セグメントのファイル サイズ。


サイズ

メモリ サイズ メモリ内のセグメント サイズ。

インデックス セグメントのインデックス。

ELF タイプ セグメントのタイプ。

フラグ PPU/SPU および RSX からのセグメントに対するアクセス権を表すフラグです。


以下のフラグは各プロセッサそれぞれに適用可能です。
EXEC (X) – セグメントは PPU で実行可能

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 180 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

WRITE (W) – セグメントは PPU で実行可能


READ (R) – セグメントは SPU で実行可能
.以下の表は、これらのフラグを各セグメントに適用する方法を示したものです。

セグメント PPU SPU RSXTM


0/5 R-X R-- ---

1/5 RW- --- ---

2/5 R-- --- ---

3/5 RW- RW- ---

4/5 RW- RW- RW-

詳細は、Lv2-Users_Manual_j.pdf 参照してください。

アラインメント セグメントのバイト アラインメントを表示。

メモリ コンテナ
メモリ コンテナは、sys_memory_container_create() をコールすることによって作成できます。詳細は、
「Lv2-Users_Manual_j.pdf」を参照してください。

ID メモリ コンテナの識別子。各プロセスにはデフォルトのメモリ コンテナがあり、


これらには ID がなく、単に「プロセス メモリ」と呼ばれます。

親 ID メモリ コンテナの親 ID。メモリ コンテナがデフォルト メモリ コンテナの子であ


る場合、親 ID は単に「プロセス メモリ」となります。

合計 メモリ コンテナの合計サイズ。子メモリ コンテナが作成されると、合計は適宜削


減されます。

使用可能 メモリ コンテナに含まれる未使用のメモリ量。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 181 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

イベント フラグ

ハンドル lv2 OS 作成関数 sys_event_flag_create () が返すオブジェクト ID。

attr_protocol リソースが使用可能になった時に、複数待機スレッドをどのように処理するかを
示す。
有効な値:
SYS_SYNC_FIFO
SYS_SYNC_PRIORITY
SYS_SYNC_PRIORITY_INHERIT

attr_pshared プロセス間でのオブジェクト共有法を示す。
有効な値:
SYS_SYNC_NOT_PROCESS_SHARED – プロセス間でオブジェクトを共有しない。

key オブジェクトの作成時に指定される固有のキー。

flags オブジェクトの作成時に指定されるフラグ。

type オブジェクトの作成時に指定されるイベント フラグのタイプ。


有効な値:
SYS_SYNC_WAITER_SINGLE
SYS_SYNC_WAITER_MULTIPLE

name オブジェクトの作成時に指定される最大 8 文字の名前。

ビット イベント フラグの現在のビット パターン。


パターン

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 182 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示

待機スレッド 待機スレッドのリスト。

イベント フラグでスレッドが待機している場合、待機しているビット パターンと待機モード


(sys_event_flag_wait へのコール中に指定される) が、丸かっこ内に示されます。待機モードに関する
許容値は以下のとおりです。
SYS_EVENT_FLAG_WAIT_AND
SYS_EVENT_FLAG_WAIT_OR
SYS_EVENT_FLAG_WAIT_CLEAR
SYS_EVENT_FLAG_WAIT_CLEAR_ALL

カーネル ビューのショートカット メニュー

コアダンプをト [実行ファイルのロード] ダイアログで [コア ダンプを強制的に有効化] オプション


リガー が選択されている場合、コア ダンプがトリガーされます (「実行可能ファイルの
ロード」を参照)。なお、このオプションはプロセスを右クリックしないと表示さ
れません。

スレッド停止時 この設定が有効な場合、ブレークポイント、例外、手動停止のいずれかによって
に更新 スレッドが停止する時はいつでも、ビューのコンテンツが強制的に更新されま
す。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 183 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

14: プロセス情報の表示
この章では、プロセス ビューを使用してプロセスやスレッド情報を確認する方法について説明します。
また、ファイバ サポートに関する情報や、ファイバのデバッグ方法も取り上げます。

プロセス ビュー
プロセス ビューには、ターゲット上で作成されたすべてのプロセスとスレッドが、ツリー形式でリスト
表示されます。
プロセスとスレッドの情報は、以下の方法で表示します。
• [ウィンドウ] メニューで、[新しいビュー] をポイントして [プロセス] をクリックするか、または [プ
ロセス] ツールバー ボタンをクリックします。
プロセス ビューを含むウィンドウが新しく開きます。
プロセス ビューには、ターゲット上で実行されているすべてのプロセスとスレッドの情報が表示されま
す。さらに、PPU メモリに埋め込まれた SPU モジュール (つまり、PPU ELF ファイルまたは内在する
PRX に静的にリンクされたもの) が「埋め込み SPU モジュール」グループに表示され、PPU ロード アド
レスとモジュール名が示されます。

プロセスビューはツールバーおよび 5 つのデータ コラムを持つメイン ディスプレイを含みます。

タイプ 名前や ID と共に、プロセスおよびスレッドの階層構造が表示される。

ステータス スレッドのステータス (executing, sleeping等)。

名前 スレッドの名前。

PC 停止スレッドのPC値。

詳細 stack size、address、priority そして ELF filename を含むその他の情報。

プロセスは、ツリーのルートに表示され、各プロセスには、PPU スレッド、SPU スレッド/グループ、


raw SPU が表示されます。さらに、SPURS を使用する任意の SPU スレッド グループのコンテキスト情
報 (タスク/ジョブ、カスタム作業負荷情報を含む) も表示されます。 SPU スレッドと raw SPU スレッド
には、ロードされているモジュールのリストが含まれる場合があります。また各項目には、ステータスお
よび各種のタイプ別情報 (優先順位、ファイル名、GUID など) が表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 184 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

• 単独のプロセスやスレッドは常に太字で表示され、これは、デバッグ中のプロセスやスレッドを表
します。
• 停止状態のスレッドは、赤く表示されます。
• 任意の SPU スレッド/グループが指定された場合、[タイプ] フィールドにその名前 (SPURS が使用さ
れている場合は接頭辞) が表示され、それ以外の場合は ID が表示されます。また、グループやスレ
ッドで同じ名前/接頭辞が使用されている場合、グループに対してはその名前が表示されますが、ス
レッドに対しては ID のみが表示されます。
• エラーが発生すると、SPURS コンテキスト アイテムが赤で表示され、そのエラーは [詳細] 列に表示
されます。
• SPURS ジョブチェーンで検出されたジョブまたはタスク エントリには、[ステータス] 列にチェック
ボックスが表示されます。このボックスをオンにすると、該当ジョブに対するデバッギングが有効
になります。デバッガによるジョブの対処方法は、[SPU デバッギング] 設定の [SPURS デバッグ オ
プション] に依存します (「SPU デバッギング設定」を参照)。
プロセス ビューには、多様な情報を示す列が多数含まれます。ただし、このビューは表示される情報量
が多くすぐに一杯になるため、すべての列を確認することは困難です。この問題への対応策として、プロ
セス ビューには分割制御が含まれています。これにより、選択した行の詳細を表示するために、サイズ
変更を行って 2 つ目のペインを表示することが可能になります。
プロセスやスレッドをダブルクリックすると、アクティブなプロセス/スレッドを変更でき、それに応じ
てすべてのビューが更新され、新たにアクティブになったプロセス/スレッドのステータスが表示されま
す。
ターゲットの実行中およびシングル ステップ中は、プロセス/スレッドのステータス、およびプロセス
ビュー内にリストされている項目は、自動的に更新されます。
PPU スレッドと SPU スレッドがペインにドラッグ&ドロップされると、ショートカット メニューで変更
した場合と同様に、そのビューのユニットが、ドロップされたスレッドのものに変化します。
プロセス ビューでは、いつでもコア ダンプのトリガーが行えます。[実行ファイルのロード] ダイアログ
で [コア ダンプを強制的に有効化] オプションが有効な場合 (「実行可能ファイルのロード」を参照)、ま
たは
-u コマンドライン オプションを使用する場合、[コア ダンプをトリガー] ツールバー ボタンを選択するこ
とにより、あるいはプロセス ビューでプロセス行を選択してショートカット メニュー オプションを使用
することにより、コア ダンプを強制できます (「プロセス ビューのショートカット メニュー」を参照)。
生成されるコア ダンプ ファイルのロードに関する詳細は、「コア ダンプ ファイルのロード」を参照して
ください。

[プレビュー] ペインには、選択したアイテムに対する各列からの情報がすべて表示されます。これによ
り、列が隠された場合でも選択項目に関する情報を確認することが可能となります。
[プレビュー] ペインは分割バーを使用してサイズ変更が行え、また、水平ペインに切り替えることも可能
です (コンテキスト メニューの [縦に分割] を使用)。この場合、プロセス ビューの下部に沿って横長に表
示されます。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 185 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

プロセス ビューのショートカット メニュー

コア ダンプを [実行ファイルのロード] ダイアログで [コア ダンプを強制的に有効化] オプショ


トリガー ンが選択されている場合、コア ダンプをトリガーします (「実行可能ファイル
のロード」を参照)。

プロセスの デバッガによって実行されなかった .self ファイル (例: Target Manager により


アタッチ 実行された) をアタッチおよびデバッグすることができます。このボタンはプ
ロセス ビュー内のプロセスがハイライトされているときのみ使用可能です。一
旦アタッチされたら、プロジェクト ビューにアクティブなモジュールがある場
合 (そのアイテムは太字で表示されます)、その .self ファイルのシンボルは自動
的にロードされます。見つかった全 SPU のシンボルもデバッガにロードされま
す。プロセスにアタッチをするとき、すべてのスレッド (PPU および SPU) は
停止します。
メモ:もしSPU がsnPause() インストラクションで停止している場合、ELF
をデバッグすることは現在のところできません。

プロセスの中止 選択されたプロセスを中止させることができます。

プロセスの終了 選択したプロセスに終了リクエストを送信します。

すべて選択 プロセス ビューにあるすべての項目を選択します (クリップボードへのコピー


のため)。

更新 プロセス ビューを更新し、プロセス/スレッドの最新情報を表示します。

垂直分割 最高のレイアウト柔軟性を実現するため、プロセス ビューの横方向と縦方向の


分割を切り替えます。

グリッド ライン このチェックボックスをオンにすると、ウォッチ ビューに列と行に区切られた


表グリッドを表示し、内容を読みやすくします。

スレッドの終了を強制

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 186 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

スレッドの このオプションは、「停止」ステータスを持つスレッド上で右クリックした場合
終了を強制 にのみ表示され、該当スレッドを強制的に終了できます。

スレッドの中断と再開
選択した PPU スレッドは、別のスレッドを実行せずに 1 ステップずつ実行するため、中断することがで
きます。選択したスレッドは灰色になって選択できなくなり、スレッド ID の後に "(SUSPENDED)" と表
示されます。
スレッドを 1 ステップずつ実行すると、中断されているすべてのスレッドが現在の状態のままで維持され
ます。

この中断をのちほど取りやめると、スレッドは再び通常どおり実行されます。"(SUSPENDED)" という表
示が消え、スレッドのテキストの色が元どおりになります。

メモ: スレッドが中断されると、[スレッドの再開] オプションが表示されますが、それ以外の場合には


[スレッドの一時停止] オプションが表示されます。スレッドの終了を強制 オプションは、[スレッドの
再開] オプションのとなりには表示されません。中断スレッドを終了することはできないためです。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 187 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

スレッドの 選択した PPU スレッドを右クリックし、[スレッドの一時停止] を選択します。


一時停止 スレッドは灰色になって選択できなくなり、スレッド ID の後に "(SUSPENDED)"

と表示されます。

スレッドの 一時停止を中止したい PPU スレッドを右クリックし、[スレッドの再開] を選択し


再開 ます。
スレッドは通常どおりに実行され、"(SUSPENDED)" という表示が消え、スレッド
のテキストの色が元どおりになります。

すべての すべての中断スレッドの実行が通常どおり再開されます。
スレッドを
再開

ELF ファイルからシンボルをロード

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 188 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

シンボルのロード/アンロード オプションは、SPU ELF ファイルを右クリックしたときのみ、表示されま


す。このオプションを使うと、このファイルからシンボルをロード/アンロードすることができ、シンボ
ルをターゲット上で選択した SPU ELF コードに関連付けることができます。これはデバッガが持つ、
GUID のマッチング機能をオーバーライドするもので、「ベストマッチ」が代わりにロードされるように
するため、元の ELF が使用できなくなったとき便利です。

シンボルの 選択した SPU ELF ファイルからシンボルをロードし、ターゲット上の SPU ELF


ロード コードと関連付けます。
プロセス ビューの、ELF ファイルの近くにはドキュメント アイコンが表示され、
シンボルがロードされたことが示されます。

シンボルの ターゲット上で選択した SPU ELF コードに現在関連付けられているシンボルをク


アンロード リアします。「ベストマッチ」が芳しくなかったとき、これを行います。
プロセス ビューの、ELF ファイルのとなりには×印のついたドキュメント アイコ
ンが表示され、ロードされたシンボルがないことが示されます。

プロセス ビューのツールバー

スレッドの 選択したスレッドを開始します。
開始 メモ:その他のビュー タイプがアクティブなビューである場合、スレ
ッドの開始/停止オプションは無効化されます。

スレッドの 選択されたスレッドを停止します。
停止

プロセスの デバッガによって実行されなかった .self ファイル (例: Target Manager に


アタッチ より実行された) をアタッチおよびデバッグすることができます。このボタ
ンはプロセス ビュー内のプロセスがハイライトされているときのみ使用可
能です。一旦アタッチされたら、プロジェクト ビューにアクティブなモジ
ュールがある場合 (そのアイテムは太字で表示されます)、その .self ファイ
ルのシンボルは自動的にロードされます。見つかった全 SPU のシンボルも
デバッガにロードされます。プロセスにアタッチをするとき、すべてのス
レッド (PPU および SPU) は停止します。
メモ: SPU がsnPause() インストラクションで停止している場合、ELF
をデバッグすることは現在のところできません。

プロセスの 選択されたプロセスを中止させることができます。
中止

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 189 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

プロセスの 選択したプロセスに終了リクエストを送信します。
終了

オプション オプション ダイアログを表示します。「プロセス ビューのオプション」を


参照。

検索パスを すべての検索フォルダと、これらの場所で見つかった ELF ファイルのツリ


表示 ー ビューを表示します。ターゲット上で ELF が検出された場合、このダイ
アログに表示されているすべての ELF ファイルに対して検索が行われ、見
つかれば、その ELF のシンボルがロードされます。詳細は、「検索ディレ
クトリ」を参照してください。

検索パスの 検索ディレクトリの更新を強制します。[検索パス] ダイアログを開く必要


更新 はありません。

更新 ボタンはショートカットメニューの更新オプションと同じです。ターゲッ
トのフルプロセス、PPU、SPU、raw スレッドそして PRX 情報を更新しま
す。

プロセス ビューのオプション
プロセス ビュー ツールバー上の [オプション] ボタンを押すと、以下のオプション ダイアログが表示され
ます。

[表示列] の最初の部分を使うと、プロセス ビューにどの列を表示するのかが選択できます。


[自動展開] オプションでは、プロセス ビューに項目を追加した際に、プロセス ビューの項目を自動的に
展開させることができます。たとえば [PPU スレッド] をチェックした場合は、新しい PPU スレッドが追
加された際に PPU スレッド グループが自動的に展開します。
デバッガによって SPURS システム モジュールの一部が認識される場合があります。認識されたモジュー
ルは、シンボル情報がないことを表す赤い十字記号付きで、プロセス ビューに表示されます。このよう
なモジュールの GUID はゼロになり、[空の GUID を表示しない] チェックボックスをチェックすると表
示されなくなります。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 190 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

システム スレッドの名前はアンダースコアで始まります。システム スレッドは表示させないこともでき


ます。その場合は、[システム スレッドを非表示にする (‘_’ で始まる名前)] チェック ボックスにチェック
を入れてください。
[ステータス ID が分かっているものの値を非表示にする] チェックボックスにチェックを入れておくと、
プロセス ビューの表示から、数値のステータス値が削除されます (例:“0x6 (停止 – TRAP)” と表示され
る代わりに、“停止 – TRAP”)。

ファイバ情報
ProDG では、ファイバに関する情報を表示する機能が限定的にサポートされています。サポート対象と
なるのは、ファイバ作成後にファイバ スケジューラを通じて実行された時、ファイバ コンテキスト経由
で作成された時、または C++ ファイバ ユーティリティ ライブラリの使用時です。
ファイバの使用方法に関する詳細は、SDK ドキュメント『libfiber-Overview_j.pdf』を参照してくださ
い。

ファイバ スケジューラでファイバを使用
各スケジューラは、プロセス ビューにスケジューラ ノードとして表示されます (ファイバ ノード下)。現
在スケジューラで管理されているファイバのリスト (スケジューラ ノード下にファイバ ノードとして表
示) は、cellFiberPpuFiberCreate() をコールすることによってファイバが作成されるたびに、プロセス ビ
ューで更新されます。ステータスはターゲットが停止するたびに (ステッピング時やブレークポイントの
ヒット時など) 更新されます。

以下の情報がプロセス ビューに表示されます。
スケジューラ ノード

ステータス 以下のいずれかのステータスになります。
INITIALIZED – スケジューラが初期化され、使用可能な状態。
INVALID – スケジューラがまだ初期化されていない状態。

名前 該当なし

PC 該当なし

詳細 ワーカー スレッド数 – スケジューラが現在使用しているワーカー スレッドの数を表

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 191 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

します。
ファイバ数 – スケジューラが現在管理しているファイバの数を表します。
フラグ チェック – スケジューラが自動的に cellFiberPpuCheckFlags() をコールすべき
かを示します。フラグは [手動] または [自動] のいずれかになります。
フラグ チェックの間隔 – cellFiberPpuCheckFlags() がコールされる時間間隔を表しま
す。
メモ:これは [フラグ チェック] が [自動] に設定されている場合のみ表示されま
す。

ファイバ ノード

ステータス これは以下のいずれかのステータスになります。
READY_TO_START – これはファイバ作成直後の初期ステータスです。このステー
タスにあるファイバは実行可能ですが、まだその実行は開始されていない状態です。
実行時には、ファイバのステータスが RUNNING になります。
RUNNING – このステータスのファイバは、PPU スレッドによって実行されている状
態です。
ファイバが最初にこのステータスになる時、ファイバはスタック メモリとして指定さ
れたメモリで、作成時に指定されたエントリ関数から実行されます。
その後ファイバがこのステータスになる時、前回の実行位置から再開されます。
このステータスのファイバは、以下のいずれかが明確に実行されるまで、そのままの
状態でとどまります。
- cellFiberPpuYield() がコールされる
- cellFiberPpuWaitSignal() がコールされる
- cellFiberPpuWaitFlag() がコールされる
- cellFiberPpuExit() がコールされる
- エントリ関数から戻される
READY_TO_RESUME – このステータスでは、ファイバの実行が一時停止されます。
実行を再開することもできますが、まだ実行されていない状態です。
ファイバの実行に対して PPU スレッドが割り当てられていない、または別のファイ
バを実行中の状態です。
WAITING_SIGNAL – このステータスのファイバは、同期を行えるようにするため、
シグナルを待っている状態です。cellFiberPpuWaitSignal() のコール時に、ファイバは
このステータスになります。
シグナルを受け取ると、ファイバのステータスは READY_TO_RESUME となりま
す。
WAITING_FLAG – このステータスのファイバは、同期を行えるようにするため、フ
ラグを待っている状態です。cellFiberPpuWaitFlag() のコール時に、ファイバはこの
ステータスになります。
フラグが指定した値に変化し、cellFiberPpuCheckFlags() がコールされると、ファイ
バのステータスは READY_TO_RESUME となります。
EXITED – このステータスの場合、ファイバの実行は完了したものの、ファイバがま
だ存在している状態を表します。cellFiberPpuExit() のコール時、またはエントリ関数
から戻ってきた時、ファイバはこのステータスになります。
このステータスのファイバは、cellFiberPpuJoinFiber() によって削除できます。

名前 ファイバが名前を付けて作成された場合はファイバ名が表示され、それ以外の場合は
「*NO NAME*」と表示されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 192 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

PC 該当なし

詳細 Entry – ファイバのエントリ ポイントを示します (存在する場合はシンボルと、アドレ


スの両方が表示される)。
Arg – cellFiberPpuCreateFiber() へのコールで渡される引数です。
Priority – cellFiberPpuCreateFiber() へのコールで渡される優先度です。
Stack Address/Stack Size – cellFiberPpuCreateFiber() へのコールで渡されるファイバ
スタックのアドレスとサイズです。

レジスタ ノード

このグループでは、関連ファイバのレジスタ ノードが非表示または展開されます。ファイバがスケジュ
ールされている場合、レジスタにはレジスタ ビューと同じ値が含まれます。ファイバが一時停止された
場合は、表示された値が、ファイバの次回スケジュール時に復元される「保存レジスタ値」となります。

メモ:現在のところ、別のスレッドにスケジュールされた実行中ファイバのレジスタを表示すること
はできません。これらのレジスタを表示するには、最初にプロセス ビューでスレッドを選択する必要
があります (該当スレッドをダブルクリック)。

メモ:アクティブなスレッドに対する現在のファイバは、太字で表示されます。複数のワーカー スレ
ッドが存在する場合、現在どのファイバが実行されているかを確認するには、該当するワーカー スレ
ッドをダブルクリックします。

ファイバ コンテキストの使用
各ファイバ コンテキストは、プロセス ビューに コンテキスト ノードとして表示されます (ファイバ ノー
ド下)。リストは、cellFiberPpuContextInitialize() をコールしてファイバ コンテキストが作成されるたび
に、プロセス ビューで更新されます。ステータスは、ターゲットが停止するたびに (ステッピング時やブ
レークポイントのヒット時など) 更新されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 193 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

以下の情報が表示されます。

ステータス 以下のいずれかのステータスになります。
INITIAL – ファイバ コンテキストの初期ステータスです。PPU スレッドによる実行
時、ファイバ コンテキストには必要なエントリ関数、その引数、スタック ポインタの
初期値が保持されます。
ON_THREAD – ファイバ コンテキストが、PPU スレッドによって実行されている状
態です。
SUSPENDED – ファイバ コンテキストの実行が一時的に停止された状態です。この
ステータスのファイバ コンテキストには、実行の再開に必要な情報が保持されます。

名前 コンテキストが名前を付けて作成された場合はコンテキスト名が表示され、名前が指
定されていない場合は「*NO NAME*」と表示されます。

PC 該当なし

詳細 Entry – コンテキストのエントリ ポイントを示します (存在する場合は、シンボルとア


ドレスの両方が表示される)。
Arg - cellFiberPpuCreateFiber() へのコールで渡される引数です。
Stack Address/Stack Size - cellFiberPpuCreateFiber() へのコールで渡されるファイバ
スタックのアドレスとサイズです。
Exit code – これは、ファイバが終了され、ファイバが cellFiberPpuExit() へ渡された
値である場合に表示されます。
Exit arg - OnExit callback に渡される値です。
ExitCallback - 終了コールバックに対するエントリ ポイントを示します (存在する場合
はシンボルとアドレスの両方が表示される)。
Flag address – 待機フラグのアドレス (cellFiberPpuWaitFlag() を参照)。
Flag value – 待機フラグの現在の値です。
Unblock condition – cellFiberPpuWaitFlag() へのコールによって引き起こされる待機
条件を取り除く値です。

ファイバ ユーティリティ ライブラリの使用


プロセス ビューにおいて、ファイバ ノードには、ファイバ スケジューラがスケジューラ ノードとしてリ
ストされます。スケジューラ ノードには、C++ ファイバ ユーティリティ ライブラリを使用して作成され
たファイバが、ファイバ ノードとしてリストされます (「ファイバ スケジューラでファイバを使用」参
照。

ファイバのデバッグ
ファイバは PPU スレッドのコンテキストで実行されるため、ファイバにブレークポイントを配置して、
普通のスレッドと同じようにデバッグをすることができます。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 194 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示

レジスタ ビューにはファイバ デバッグ中の現在のレジスタが表示され、コールスタック ビューには現在


のコールスタックが表示されます。

制限:
• コールスタックでは、ファイバ エントリ ポイントを超えて確認することはできません。
• 現在デバッグされていないファイバのコールスタックやレジスタを確認することは、現時点ではで
きません。この機能は今後のリリースに含まれる予定です。
• 250 より前の SDK を使用している場合、プロセスへのアタッチ時にファイバ情報を取得することは
できません。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 195 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
SPU デバッギング

15: SPU デバッギング


この章では、raw SPU、スレッド SPURS、SPURS モジュールのデバッグ方法について説明します。
この章には、以下のセクションがあります。
• SPU検索パス
• SPU raw/スレッド モジュール
• SPURS デバッグへの対応
• SPU 設定の持続
• SPU 書き込み可能セクション

SPU検索パス
SPU ELF に対するシンボルをロードするには、SPU ELF 検索パスに関連パスを含む必要があります (自動
的に SPU ELF 検索パスに追加される、メイン PPU ELF の場所と「%SCE_PS3_ROOT%\target\images」
を除く)。
検索パスにフォルダを追加した後は、メインの SELF が読み込まれる度にフォルダを再スキャンするので
はなく、フォルダ内に新しい ELF ファイルが追加されたり ELF ファイルが変更されたりする度にモニタ
ーされます。

メモ:spu_elf-to-ppu_obj を使用して SPU ELF が SELF にリンクされる場合、デバッガでは、このツ


ールによって生成される .debug_scespuversion セクションから元の ELF パスを読み込もうとします。
この場合、これらの SPU ELF に対して SPU 実行ファイル検索パスを設定する必要がなくなります。

SPU ELF 検索パスを追加するには、次の手順に従います。


(1) [ツール] メニューの [オプション] をクリックします。
(2) [オプション] ダイアログの [検索ディレクトリ] セクションをクリックし、[検索パス] リストの [SPU
ELF ファイル] をクリックします。
(3) ボタンを使用し、パスおよびサブディレクトリを追加します (「検索ディレクトリ」を参照)。
プロセス ビューで [検索パスを表示] ボタンをクリックすると、SPU ELF 検索パス上の ELF が表示されま
す (「検索ディレクトリ」を参照)。

SPU raw/スレッド モジュール


SPU モジュールでは、1 つの raw またはスレッド SPU でコードを動的に実行することができます。各モ
ジュールは個別にロードおよびアンロードでき、そのモジュール内に含まれるコードは、メイン SPU
ELF からコールすることができます。
これらのモジュールはデバッグに対応させることもでき、ビルド プロセスは、Visual Studio .NET
2005/2008 に対応しています。Visual Studio Integration には、適切な設定およびビルド後のステップを
設定するための、SPU モジュール用のプロジェクト ウィザードが用意されています。Visual Studio を使
用していない場合は、makefile 内で変数を設定することにより、SPU モジュールをデバッグ用に設定す
ることができます。

raw SPU モジュールのビルド


raw SPU モジュールをデバッグ用に設定するには、次の手順に従います。
(1) VSI プロジェクトのプロパティを開きます (「デバッグ用ビルド」を参照)。
(2) PIC (Position-Independent Code:場所に依存しないコード) をコンパイルし、PIC に対応しないライ
ブラリへのリンクを無効にして、バイナリ イメージを作成します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 196 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
SPU デバッギング

(a) [C/C++] フォルダを展開して [コードの生成] セクションをクリックし、[場所に依存しないコー


ド] を[はい]に設定します。
(b) [リンカ] フォルダを展開して [コマンドライン] セクションをクリックし、[リンカの詳細オプシ
ョン] ボックスに「–r」および「–nostdlib」を追加します。
(c) 「イベントのビルド」フォルダを展開して [ビルド後のステップ] セクションをクリックし、[コ
マンドライン] ボックスに「spumodgen.exe “$(TargetPath)” “spu_module_1.bin”」を追加
します。
(3) 変更したリンカ スクリプトを使用し、モジュールに関する情報を含む小さいヘッダ用のスペースを
追加します。リンカ スクリプトのサンプルは、raw SPU モジュールのサンプルを参照してくださ
い。

メモ:デバッグ用に設定された raw SPU モジュールのサンプルは、


「%SN_PS3_PATH%\examples\RawSpuModules」フォルダに収録されています。

スレッド SPU モジュールのビルド


スレッド SPU モジュールをデバッグ用に設定するには、次の手順に従います。
(1) VSI プロジェクトのプロパティを開きます (「デバッグ用ビルド」を参照)。
完全なリンク パスの後ろにリロケーションを出力するようにリンカを設定します。
(2) [リンカ] フォルダを展開して [全般] セクションをクリックし、[再配置のエミット] を [はい] に設定
します。
(3) デフォルトのリンカ スクリプトの [snTextGUID] セクションで、GUID 用のスペースを割り当てま
す。

メモ:デバッグ用に設定されたスレッド SPU モジュールのサンプルは、


「%SN_PS3_PATH%\examples\ThreadedSPUModules」フォルダに収録されています。

SPUモジュールのロードと実行
モジュールは、PPU メモリにロードして DMA (Direct Memory Access) を使用して SPU LS (Local
Storage) に転送する必要があります。PIC を使用してビルドしたモジュールは、SPU LS の任意の場所に
ロードできるようになりますが、適切なロード スキームを実装する必要があります。SPU ローダー コー
ドは、モジュールのヘッダーを読み取って BSS の場所とサイズを認識することができ、必要に応じてこ
れをクリアします。

SPUモジュールのデバッグ
サンプル フォルダ「%SN_PS3_PATH%\examples」には、スレッド/raw SPU モジュールのサンプルが
収録されています。このサンプルは、両方とも同じ機能を持っています。
(1) PPU
(a) SPU ローダー ELF を SPU LS にロードする。
(b) 2 つのモジュールを、128 ビットでアラインされたメモリにロードし、モジュールのアドレスと
サイズを SPU LS に書き込む。
(c) SPU を実行し、SPU がメール ボックスに書き込むまで待機する。
(2) SPU
(a) LS を読み込んでモジュールの場所とサイズを認識し、DMA 経由でモジュールを LS に転送す
る。
(b) モジュールのエントリ ポイントをコールする。
(c) モジュールのサムを出力バッファに出力する。
(d) SPU の処理が完了したことを PPU に通知するため、メール ボックスに書き込む。
(3) PPU
(a) SPU からのバッファを DMA 経由で転送する。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 197 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
SPU デバッギング

(b) バッファを TTY 出力に出力する。


デバッガがモジュールを正しく特定できるようにするには、SPU ELF ファイルの検索パスに適切なパス
を指定する必要があります (「SPU検索パス」を参照)。

SPUモジュールのアンロード
モジュール管理スキームはユーザーが指定する必要があるため、SPU raw またはスレッド モード モジュ
ールをアンロードするためのメカニズムは搭載されていません。デバッガから SPU raw またはスレッド
モード モジュールをアンロードするには、モジュール ヘッダをクリアするシンプルなモジュール管理ス
キームを用います。ターゲットが停止すると、デバッガではそのモジュールが検出されず、関連する任意
のシンボルもアンロードされます。

SPU スレッド グループのデバッグ


SPU スレッド グループのスレッドがブレークポイントで停止すると、グループ内の残りのスレッドも停
止します。
しかし、ハードウェアの制限により、このために停止したスレッドが同期または sys_lwcond_wait() とい
った、他のシステム関数にある場合、ステータスは「不明」と表示され、デバッガにはプログラム カウ
ンタやコールスタックの情報は表示されません。

これが発生した場合には、それぞれの「不明」なスレッドで停止を発行することにより、コールスタック
を取得してください。
プロセス ビュー内で各スレッドを順番に選択し、[停止] ツール バーのボタンをクリックし、次にブレー
クポイントで停止しているスレッドにシングルステップを行います。
これにより、スレッドが実行され (システム待機から戻る)、停止通知が処理されるためにシングル ステ
ップに戻る前にコールスタック情報が更新されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 198 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
SPU デバッギング

SPURS デバッグへの対応
ProDG には、SPURS ジョブ、ジョブキュー、タスク、カスタム ポリシー モジュール (まとめて簡単に
「SPURS モジュール」と呼ばれる) に対するデバッギング サポートが含まれます。「プロセス ビュー」
を参照してください。これらの手順には、デバッギング サポートの設定方法が示されています。これら
の手順には、cell\samples\sdk\spu_library\libspurs\ における任意の SPURS ジョブ/タスク/ポリシー
モジュール サンプルへの適用方法が示されます。

SPURS モジュールのビルド
SPURS モジュールをデバッグ用に設定するには、次の手順に従います。
(1) デフォルト リンカ スクリプトのリンカによって GUID のスペースが割り当てられます。

メモ:-fpic でコンパイルする場合、-q (-r ではなく) をリンカ コマンド ライン引数に渡すと、リンカ


では、 完全リンク後に再配置情報が出力されます (Visual Studio の追加リンカ オプションでは、
-Wl、-q を渡す)。
(2) バージョン 1 のジョブをビルドする際、CellSpursJobMain() は最初にリンクされるオブジェクト フ
ァイル内の最初の関数である必要があります。ポリシー モジュールのビルド時には、
cellSpursModuleEntry() が最初である必要があります。

SPURS モジュールのデバッグ
SPURS モジュールをデバッグする方法には、以下の 3 つの方法があります。
(1) メイン メモリ内の埋め込み SPU モジュールにブレークポイントを配置する
PPU メモリ内の SPU コードの場所を特定してブレークポイントを挿入することにより、ロードされる前
のモジュールにブレークポイントを追加します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 199 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
SPU デバッギング

メイン メモリ内の埋め込み SPU モジュール


(2) プロセス ビューでモジュールを選択する
処理が作成された後、プロセス ビューでジョブまたはタスク選択し、その開始点にブレークポイントを
追加します (「プロセス ビュー」を参照)。

プロセス ビューに表示されたデバッグ可能なモジュール
(3) ハードコードされたブレークポイント
デバッガでの設定に関係なく、任意の SPU コードのデバッグをシンプルかつ非常に効率的に行うメソッ
ドとして、snPause() を直接 SPU ソース コード (これ
は %SN_PS3_PATH%\spu\include\sn\LibSN_SPU.h に存在) にコンパイルする方法が挙げられます。こ
れにより SPU は実行可能となり、このインストラクションで停止します。停止後は、停止オペコードに
スキップするために手動で PC を進める必要なく、実行またはこのインストラクションからステップする
ことができます。

操作手順: SPURS モジュールを最初からデバッグする


このセクションでは、コンパイルでの停止 (snPause() など) を使用しない場合に、起動時から SPURS モ
ジュールをデバッグする方法を説明します。
SPURS モジュールを起動時からデバッグするには、次の手順に従います。
(1) デバッガで ELF をロードし、PPU を main で停止させます。
Visual Studio を使用している場合は、[デバッグ] メニューの [ステップ イン] をクリックします。
Visual Studio を使用していない場合は、「実行ファイルの読み込みと実行」を参照してください。
(2) main で停止するように SPURS デバッグ オプションを設定します。
(a) [ツール] メニューの [オプション] をクリックします。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 200 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
SPU デバッギング

(b) [オプション] ダイアログの [SPU デバッギング] セクションをクリックし、以下のオプション


を設定して [OK] をクリックします。
(i) [SPU Options] グループのチェックボックス [実行] および [main で停止] を選択。
(ii) [SPURS デバッグ オプション] グループの [main で停止] チェックボックスを選択。
(3) デバッガがモジュールのシンボルを検出できるように、SPU ELF の検索パスを設定します (「検索
ディレクトリ」を参照)。
(a) プロジェクト別の検索パスまたはグローバル検索パスを設定します。
プロジェクト別:[ワークスペース] ビューで [プロジェクト ビュー] タブを選択し、ELF ファイ
ルを右クリックして [プロパティ] を選択します。
グローバル:[ツール] メニューの [オプション] をクリックします。
(b) SPU ELF ファイルを選択します。
(i) 左ペインで [検索ディレクトリ] をクリックします。
(ii) 右ペインの [検索パス] リストの [SPU ELF ファイル] をクリックします。
(c) SPU ELF 検索パスのリストに、パスおよびサブ ディレクトリを追加します。
(i) パスを追加する場合は、[パスを追加] をクリックし、パスを入力して Enter キーを押し
ます。
(ii) サブ ディレクトリを追加する場合は、パスを選択して [ELF ファイルを含むサブ ディレ
クトリを追加] をクリックし、[はい] を選択します。

メモ:フォルダの階層が深い場合は、処理に時間がかかる場合があります。検索する階層の深さおよ
び各レベルでのエントリ最大数は、[サブ ディレクトリの追加] で変更できます。
(iii) [OK] をクリックして変更を確認します。
(4) 実行を再開します。
(a) F5 キーを押します。
プロセス ビューに、SPU スレッド グループが表示されます。
(5) モジュールをデバッグします。
(a) プロセス ビューで [SPU スレッド]、[コンテキスト]、[処理] の順に展開し、デバッグするモジ
ュールのチェックボックスを選択します。
(6) SPU スレッドの実行を再開します。
(a) プロセス ビューの [SPU スレッド] をクリックし、[Go] をクリックします。
(7) スレッドをドラッグまたはショートカット メニューを使用して、モジュールのソース コードを表
示します。
(a) 停止している SPU スレッドを [ソース] ビューにドラッグします。
(b) [ソース] ビューを右クリックし、[ユニットの変更] を選択して SPU スレッドをクリックしま
す。
(c) [ソース] ビューにモジュールのコードが表示されます。

SPURS モジュールの各インスタンスをデバッグ
スケジュールの時期に関係なく、モジュールの各インスタンスをデバッグするには、以下のいずれかの方
法で行います。
• モジュールに snPause() へのコールを挿入します。
• モジュールのメイン関数にグローバル ブレークポイントを追加します。詳細は、「埋め込み SPU 内
のブレークポイント ― グローバル ブレークポイント」を参照してください。

SPU 設定の持続
SPU に付随するデバッガ ビュー (スレッドまたは Raw) は、オープンされたままの状態が保持され、SPU
が無効にされても PPU ビューには戻りません。ビューでは、SPU ビューが継続され、その設定情報も保
存されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 201 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
SPU デバッギング

ビューのショートカット メニューである [ユニットの変更] オプション (「ショートカット メニュー」を


参照) では、各 SPU の隣に「立ち入り禁止」アイコンが表示されます。この例に示すように、これは現在
無効、非アクティブ、または作成されていないことを意味します。

これらのビューにスイッチすることは可能ですが、データは無効となります。ユニットが作成されると、
ビューには正しいデータが表示されます。
ソース ファイルに SPU ブレークポイントが追加された場合、これらはデバッグセッション間で記憶され
ます。ただし、これらはターゲット SPU が停止され、これらを含むモジュールが SPU LS 内で検出され
た場合に、SPU LS にのみリロードされます。SPU が作成または無効化された場合、アドレス ブレークポ
イントは削除されます。これは、新しいコードやデータによってブレークポイントが上書きされる可能性
があり、それを依然として有効であると推測するのは危険だからです。

SPU 書き込み可能セクション
.spu_image_writable セクションの仕様に関しては、「Cell Broadband Engine(TM)」と「SPU ABI
Specifications for Cell OS Lv-2」を参照してください。
SPU モジュール デバッグの必要条件は、モジュールのシンボルとデバッグ情報を含む ELF ファイルがデ
バッガで特定できる GUID です。このため、書き込み可能なセクションへの変更を行う際には、モジュ
ールにおける GUID が破損していないことが求められます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 202 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

16: デバッガ スクリプト


この章では、スクリプト ビューとコマンド ビューに対し、デバッガ スクリプトを実行する方法について
説明します。また、サンプル スクリプトについても取り上げます。
この章には、以下のセクションがあります。
• デバッガ スクリプトとは
• スクリプトの使用方法
• スクリプトの読み込みと実行
• 使用可能なライブラリ関数
• 式の評価
• 詳細なスクリプティング
• スクリプト サンプル
• スクリプティングの制限

デバッガ スクリプトとは
C スクリプト インタプリタは基本的に、ターゲット コンソールとデバッガの操作を可能にするスクリプ
トを実行するための手段となっています。新しいスクリプト ビュー を使用することにより、異なる処理
を実行するプログラムを簡単かつインタラクティブに記述することができます。これは、1 度のみ使用す
る「完了するまで実行」タイプのスクリプトで、ターゲットやデバッガのイベント (例外やキー入力など)
と連動させることもできます。ターゲットに対しては、これらのスクリプトを使用してアクセスしてメモ
リの内容を取得することができ、コンソールからの出力をデバッガのペインに表示することもできます。
デバッガに搭載された C インタプリタを構成する本製品は、多くの ANSI C に対応し、搭載された多く
の関数にアクセスできるため、スクリプトによるデバッガやターゲット コンソールとのインタラクショ
ンが可能になります。スクリプトが読み込まれると、バイトコード形式にコンパイルされた後、変換され
ます。
実行速度も非常に高速で、通常は、1 秒間に約 100 万の C ステートメントを実行することができます。
ProDGのスクリプト インタプリタには、一般的な Windows スクリプト機能やコード コンパイル方式と
比較して多くの利点があります。この機能は、COM インターフェイスを使用してアプリケーションを制
御する方法より非常に高速なため、多くの処理が実行可能となり、また使用も簡単です。スクリプト イ
ンターフェイスは C で記述されているため、C プログラマーにとっては非常に使用しやすくなっていま
す。
スクリプト ウィンドウには、スクリプト ビューとコマンド ビューの 2 つのタイプが用意されています。
• スクリプト ビューでは、コマンドの発行とスクリプトの実行が可能です。
• コマンド ビューは、新しいスクリプトを実行できないという点でスクリプト ビューと異なります。
このビューで実行可能なスクリプトは、デバッガが実行されたディレクトリ に保存されている
autoexec.eic およびコマンドラインから「-S」を使用して指定された起動スクリプトのみとなりま
す。起動スクリプトに定義されているすべての関数は、このコマンド ビューから利用できます。
スクリプト インタプリタのコアの部分は EiC となっています。SN Systems は、標準技術ライセンスの
もと、EiC パッケージを使用して製品を開発しています。

インストールの注意
スクリプト機能は、ProDG がインストールされるフォルダの「\examples\DebuggerScripting」サブデ
ィレクトリにインストールされます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 203 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

トラブルシューティング
問題が発生した場合は、コマンドライン スクリプトによって読み込み時エラーと実行時エラーが出力さ
れる TTY ストリームを確認してください。

スクリプトの使用方法
スクリプト ファイルは、デバッガに読み込んで実行できる C のソース コードが記述されたテキスト ファ
イルです。このテキスト ファイルは、任意のエディタを使用して作成/編集できます。

メモ:現在のバージョンでは、デバッガ内でスクリプト ファイルを編集できません。

スクリプト ファイルの拡張子は特に決められていませんが、基本的に ANSI C なため「.c」を使用するこ


とにより、フォーマット方法や構文の色設定をエディタに認識させることができます。また、コンソール
プロジェクト内のソース コードに使用しているほかの C プロジェクト ファイルと区別する必要がある場
合は、別の拡張子を使用してください。
スクリプトは、以下の用途に使用できます。
• 標準の C ライブラリ サポート (ファイル アクセスを含む) を含む ANSI C の変換
• デバッガ ビューに stdout を出力
• C プリプロセッサ命令への対応
• デバッガ キー入力の処理
• タイマー イベントや実行中断などの通知
• ターゲット コンソールとのメモリの送受信
• シンボル テーブルへのアクセスによる、プロジェクトのシンボルを含む式の評価

スクリプト ビュー
スクリプト ビューでは、デバッガでスクリプトを実行できます。このビューは TTY ビューと似ており、
スクリプトの出力が、グラフィックやテキストで表示されます。またこのビューは、ほかのデバッガのビ
ューと同様に機能し、サイズ変更やドッキングも可能です。

複数の異なるスクリプトを同時に実行し、それぞれを個々のビューに表示することも可能で、各スクリプ
トは相互依存していませんが、スクリプトの処理が別のスクリプトに影響を与えないように注意する必要
があります。たとえばプロファイリング スクリプトは、特定の間隔でターゲットの実行を一時停止する
必要のあるスクリプトの影響を受けます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 204 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

スクリプト ビューのショートカット メニュー

貼り付け クリップボードのコンテンツをスクリプト ビューに貼り付けます。

スクリプトの実行 スクリプト ファイルを選択して実行します (「ショートカット メニューか


らスクリプト ダイアログを実行する」を参照)。

スクリプトの一時停止 実行中のスクリプトを一時停止します。

スクリプトの終了 スクリプトの実行を停止します。

イミディエイト モードのステートメント
スクリプト ビューとコマンド ビューでは、コマンドを直接入力できます。入力したコマンドは、現在の
スクリプト オブジェクトのコンテキストで実行されます。これは、前のスクリプトで宣言された範囲内
の関数や変数にアクセスすることもできることを意味します。このため、起動スクリプトで便利なコマン
ドが宣言されており、コマンド ビューのコマンドラインから実行される場合に、非常に便利です。
この機能は、すべての一般的な C ステートメントやプリプロセッサ命令に対応しますが、ステートメン
ト (複数可) は 1 行に限られます。ここでは、2 行以上使用することができないため、長いステートメント
は、1 行に短縮する必要があります。
通常、以下のように 2 行にわたるステートメントは有効ですが、
printf("About to print Hello World\n");
printf("Hello World\n");

イミディエイト モードでは、以下の 2 行にわたるステートメントは違反になります。


for(i=0; i<10; i++)
printf("i=%d\n", i);

このため、以下のように 1 行に短縮する必要があります。
for(i=0; i<10; i++) printf("i=%d\n", i);

• コマンドの実行中は、スクリプト エンジンが無限ループに入ってしまう場合や、完了に長時間かか
る関数を実行してしまう場合があります。また END を押すと、スクリプト エンジンを強制的に終
了できます。これにより、スクリプト エンジンが基本ステータスにリセットされます。存在するス
タートアップ スクリプトが強制リセットの原因の場合、そのスクリプトは実行されせん。
スクリプトの [コマンド ビュー] と [コマンド スクリプト] の重要な違いは、メニューと通知の使用方法で
す。[コマンド ビュー] ビューでは通知を使用せず、コールバック関数を利用します。[コマンド ビュー]
で通知を使用すると、エラーの原因となります。起動スクリプトで、UI にメニュー項目を追加する場合
は、コールバック関数が指定されます。 また、メニュー ID のシステムが継続して使用されているため、
複数の項目が同じ関数をコールバックできます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 205 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

コマンド ビューは、グラフィック出力に対応していません。このため、標準スクリプト モードが対応し


ているグラフィック関数をコールすると、エラーが発生します。

スクリプトの読み込みと実行

autoexec.eic を使用する
デバッガが起動すると、起動した同じディレクトリで autoexec.eic ファイルが検索されます。デバッガに
よりこのファイルが検出されると、コマンド ビューのスクリプト コンテンツ内で自動的に実行されま
す。この情報は、別のウィンドウで実行するスクリプトでは利用できず、[コマンド ビュー] のみがアク
セスできます。この時点では、スクリプト記述時に使用する関数、メニュー項目、定数をセットアップで
きます。

ショートカット メニューからスクリプト ダイアログを実行する


スクリプト ビューが開いている場合は、ビューのショートカット メニューの [スクリプトの実行] を選択
することにより、その状態でスクリプトを実行できます (「スクリプト ビューのショートカット メニュ
ー」を参照)。
表示される [スクリプトの実行] ダイアログ ボックスでは、実行するスクリプト ファイルの名前を指定し
ます (以下参照)。

プロジェクトに保存されたスクリプト
特定のスクリプト ビューで前回実行されたスクリプトのパスは、デバッガでのプロジェクトの保存時に
維持されます。プロジェクトのロード時には、対象となるスクリプト ビューでこのスクリプトが自動的
に実行されます。

使用可能なライブラリ関数

標準 C ライブラリ関数
インタプリタには、標準の C ライブラリ関数が搭載されているため、スクリプト ファイルの最初でイン
クルードしないでください。必要に応じて、ほかのファイルをインクルードしてください。これらの関数
に関しては、「標準 C 」を参照してください。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 206 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

SN Systems 関数
スクリプトを有効にしてデバッガで便利な機能を使用するため、デバッガの一部の機能を有効にする、関
数のビルトイン ライブラリが追加されています。これらの関数のプロトタイプと返り値の詳細は、「付
録 A: スクリプティング API」を参照してください。

式の評価
PS3EvaluateExpression 関数は、デバッガの式評価機能を使用して PC 上の現在のコンテキストのある式
を評価します。
例:
sn_val result;
sn_uint32 uProcessID = 0x1000600;
sn_uint64 uThreadID;
uThreadID.word[1] = 0x0;
uThreadID.word[0] = 0x100;
PS3EvaluateExpression(uProcessID, uThreadID, &result, "a");

上記の例では、ターゲットとなる式 "a" が評価され、スクリプト変数 "result" に結果が出力されます。


以下の例では、名前付きレジスタの値の評価が可能になります。
void dumpreg(char* regname)
{
sn_val result;
sn_uint32 uProcessID = 0x1000600;
sn_uint64 uThreadID;
uThreadID.word[1] = 0x0;
uThreadID.word[0] = 0x100;
sn_address addr;
char namebuff[16] = {'$', 0};

strcpy(namebuff+1, regname);
if (SN_FAILED(PS3EvaluateExpression(uProcessID, uThreadID, &result, namebuff)))
{
printf(GetLastErrorString());
}
else
{
printf("%s = %08X\n", szRegName, result.val.u32);
}
}

以上でこの関数は、スクリプト内の別の関数からコール可能になります。
例:
dumpreg("s0");

スクリプト ビューには、シンプルな評価機能が用意されています。式を評価する場合は、プロセス ビュ
ーで選択されている PPU スレッドのコンテンツで、式の先頭に「?」を付けます。以下に例を挙げます。
?$s0

これは、「s0」レジスタの内容を評価します。この評価の結果は、[スクリプト] の出力ビューに表示され
ます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 207 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

ターゲット変数に新しい値を割り当てる
スクリプトでは、指定したターゲット側の変数に値を割り当てることもできます。この場合は、単に代入
式を評価しますが、その際、現在のターゲット コンソールのコンテキストにある式の左側と右側が評価
されます。
ゲームの実行中は、式がグローバル変数である場合にこれは明らかにより有用になります。ローカル変数
が現在のコンテキスト スコープを持たないからです。代入式の戻り値は、割り当てられた値となりま
す。
スクリプト エンジン自体はビットフィールド (ビットフィールド構造体は、コンパイラの機能とターゲッ
ト コンソールに依存) に対応していないため、デバッガの式評価機能はターゲットのビットフィールド構
造体を理解することができません。このため、ビットフィールド式を割り当てに使用すると違反となりま
す。
以下はサンプルです。
sn_val result;
sn_uint32 uProcessID = 0x1000600;
sn_uint64 uThreadID;
uThreadID.word[1] = 0x0;
uThreadID.word[0] = 0x100;

PS3EvaluateExpression(uProcessID, uThreadID, &result, "gMyCheat.CurrentLevel=1");

上記の例では、整数値 1 がグローバル変数 gMyCheat.CurrentLevel に割り当てられ、スクリプト変数


"result" には、返り値 1 が返されます。

詳細なスクリプティング

GDI 関数
デフォルトでは、デバッガのスクリプト ビューは、標準のデバッガ TTY ビューとほぼ同様に機能します
が、グラフィック出力を含むビットマップ レイヤーを、テキスト ベースのキャラクタマップ上にオーバ
ーレイすることができます。このモードでは、スクリプト ビューが、テキスト レイヤーとグラフィック
レイヤーの 2 つのレイヤーに効果的に分かれています。これらのレイヤーは別々に処理されますが、オー
バーレイ表示されます。この 2 つのレイヤーの組み合わせ方法は、各種管理オプションを使用して設定で
きます。
以下は、スクリプト ビューをグラフィック出力モードに設定し、サンプル グラフィックを描画するため
の一般的なシーケンスです。
//
// デバッガ スクリプトを使用したグラフィック出力のサンプル
//
void MyGraphics()
{
sn_uint32 x,y;
if(SN_SUCCEEDED(GraphicsGetWindowSize(&x,&y)))
{
GraphicsSetWindowSize(x, y);
GraphicsSetDrawMode(DF_TEXT | DF_GRAPHICS,DM_SRC_AND_DST);
GraphicsSetForegroundColor(255,255,0);
GraphicsDrawEllipse(0,0,x,y);
GraphicsSetForegroundColor(0,0,255);
GraphicsDrawRectangle(x/3,y/3,x/3*2,y/3*2);
GraphicsSetForegroundColor(255,0,0);
GraphicsSetFont("Arial", 14);
GraphicsDrawText(250,50,"This is a TEST STRING!");
GraphicsUpdate();

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 208 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

}
}

グラフィック出力は、通常のキャラクタ マップ TTY 出力に対して異なる「レイヤー」となるため、通常


のテキストは重なり合うグラフィックとは別にスクロールします。スクロールバック バッファ機能やテ
キスト選択機能など、TTY のすべての標準機能は通常に動作します。
このシーケンスでの 2 つの重要なコマンドは、GraphicsSetWindowSize および GraphicsUpdate です。
GraphicsSetWindowSize は、描画前に実行する最初のコマンドです。このコマンドを実行しない場合、
描画するビットマップが初期化されず、描画実行時に SN_E_GRAPHICS_NOT_INIT エラーが発生しま
す。GraphicsUpdate は描画バッファと表示バッファを切り替えるコマンドで、このコマンドがコールさ
れると、新しい画像が表示されます。描画コマンドの詳細リストは、付録資料を参照してください。

通知の使用方法
特定のイベントに関する通知は、スクリプトで使用します。以下は、現在使用可能な通知です。
NT_ANY: すべての通知
NT_TIMER: スケジュール式のタイマー通知

NT_THREAD_STOP:ターゲット スレッド一時停止の通知
NT_BREAK: スクリプト作成によるブレークポイントへのヒットを通知

NT_THREAD_RUN:ターゲット スレッド再開の通知
NT_KEYDOWN: デバッガでのキー押下の通知
NT_KEYUP: デバッガでのキー押下解除の通知
NT_CUSTMENU: カスタム メニュー項目選択の通知
NT_DEBUG: デバッグ データがデバッガにロードされたことを通知
NT_TTY: TTY データ受信の通知
コード実行時に例外が発生した場合は、NT_THREAD_STOP 通知が出力されます。この通知は、ブレー
クポイントがヒットした場合、またはデバッガの一時停止機能を使用してコード実行を停止した場合にも
出力されます。NT_ BREAK 通知が受信された場合、「pParam1」には Script ID が含まれ、
「pParam2」には BP_PARAM_INFO 構造体に対するポインタが含まれます。
通知を出力するには、RequestNotification コマンドを使用して通知をリクエストする必要があります。
通知のリクエスト後は、そのすべてのインスタンスが通知キューに送られます。通知は
CancelNotification コマンドを使用してキャンセルすることができ、CheckNotification コマンドを使用す
ると、通知リクエストの有無をチェックすることもできます。
このキューから通知を取得する場合は、GetNotification コマンドまたは PeekNotification コマンドをスク
リプトで使用します。GetNotification コマンドは、返された際にキューの先頭からアイテムが削除さ
れ、通知が利用可能になるまでブロックします。PeekNotification コマンドは、利用可能な通知がない場
合は、キューからアイテムを削除せず、実行もブロックしません。
返された通知オブジェクトの「type」フィールドには、出力された通知のタイプが記入されます。その他
の情報は、「pParam1」フィールドと「pParam2」フィールドに保存されます。キー押下とキー押下解除
の通知の「pParam1」には通知を生成したキーが、「pParam2」にはその際に適用された修飾子 (Ctrl、
Shift、Alt) が含まれます。修飾子はそれぞれ、KEY_CONTROL、KEY_Shift、KEY_ALT として定義され
ています。カスタム メニュー通知が返された場合、「pParam1」には選択されたメニュー項目を表すメ
ニュー ID が、「pParam2」には LOWORD でメニューを生成したオブジェクトの ID および HIWORD
のユニット IDが含まれます。NT_TTY 通知を受信した場合、「pParam1」には TTY データ ポインタが
含まれ、「pParam2」には TTY_PARAM_INFO 構造体に対するポインタが含まれます。
NT_THREAD_STOP 通知または NT_THREAD_START 通知を受信した場合、「pParam1」はスレッド
ID、「pParam2」はプロセス ID となります。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 209 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

NT_TIMER 通知を使用してタイマーをセットし、指定した間隔でスクリプトへの通知を行うことができ
ます。この機能は、スクリプト ビューを定期的に更新し、ターゲット コンソールから取得した最新情報
を表示する場合に便利です。
NT_TIMER 通知をセットアップするための通常のシーケンスは、以下のサンプルを参照してください。
void TimerFunction()
//定期的にコールされる関数
{
static sn_uint32 s_uCount = 0;
printf("Timer counter: %i\n", ++s_uCount);
return;
}
int main(int argc, char** argv)
{
sn_notify Notify;

RequestNotification(NT_TIMER);
//NT_TIMER 通知をリクエスト
SetTimerInterval(1000);
//タイマー通知を毎秒発行

while (1)
{
GetNotification(NT_TIMER, &Notify);
//タイマー待ち
TimerFunction();
//タイマー関数を実行
}
return 0;
}

メニュー項目の追加 - 標準モード
ビューには、メニュー項目を追加することができます。この機能は、キー コマンドの入力を制限するこ
となく、インタラクティブなスクリプトを作成する場合に便利です。カスタム メニュー項目が選択され
た場合は、NT_CUSTMENU タイプの通知がスクリプトに送られます。これは、通知を取得するために
は、通知キューを定期的にチェックする必要があることを意味します。
メニュー項目を追加した場合は、固有の識別子が引数に返されます。逆にメニュー項目が削除された場
合、その識別子は、後に作成されるメニュー項目に割り当てられる場合もあります。このため、メニュー
項目を削除した際、そのメニュー項目の関連付けとその識別子を削除する場合は、注意が必要です。ま
た、メニュー項目を追加するビューを特定するための文字列も渡されます (詳細リストは付属資料を参
照)。
以下のサンプルは、メニュー項目を使用したシンプルな例です。このメニュー項目は、スクリプト終了後
にクリアされます。スクリプトが途中で終了した場合や別のスクリプトが開始した場合、これは自動的に
実行されます。
int main (int argc, char ** argv)
{
sn_uint32 uMenuId;
sn_notify Notify;

AddMenuItem("Choose me!", &uMenuId, “Self”);


RequestNotification(NT_CUSTMENU);
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 210 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

while((sn_uint32)Notify.pParam1 != uMenuId)
GetNotification(NT_CUSTMENU, &Notify);

printf("You selected the menu item!\n");


RemoveMenuItem(uMenuId); // メニューのクリア
return 0;
}

以下は、メニュー識別子とそのコードとの関連付けが維持されたままの例です。結果として、コードの不
正なエリアがコールされます (サンプル スクリプト フォルダの「brokenMenu.c」を参照)。
int main (int argc, char ** argv)
{
sn_uint32 item1;
sn_uint32 item2;
sn_uint32 item3;
sn_notify Notify;

AddMenuItem("To be deleted", &item1, “Self”);


AddMenuItem("Works fine", &item2, “Self”);
RemoveMenuItem(item1);
AddMenuItem("Fails to work", &item3, “Self”);
RequestNotification(NT_CUSTMENU);

while(1)
{
GetNotification(NT_CUSTMENU, &Notify);
if ((sn_uint32)Notify.pParam1 == item1)
printf("Wasn't I deleted?\n");
else if ((sn_uint32)Notify.pParam1 == item2)
printf("I work fine\n");
else if ((sn_uint32)Notify.pParam1 == item3)
printf("I'm never called!");
}
return 0;
}

メニュー項目の追加 – command view


メニュー項目は、Command View を使用して追加することもできます。これは通常、スタートアップ ス
クリプト autoexec.eic で、一部のメニュー項目のセットアップに使用します。Command View でメニュ
ー項目が追加された場合は、項目が選択された際の通知を使用できません。このため、その代わりにコー
ルバック関数を使用します。これは、Command View Script Engine が通知チェックを繰り返し実行しな
いため、別のコマンドを実行できることを意味します。これらのメニュー項目追加方法を区別するため、
Command View モードで追加された項目の先頭には「Command」という単語が追加されます
(「CommandAddMenuItem」など)。
メニュー項目を追加した場合は、固有の識別子が引数に返されます。逆にメニュー項目が削除された場
合、その識別子は、後に作成されるメニュー項目に割り当てられる場合もあります。このため、メニュー
項目を削除した際、そのメニュー項目の関連付けとその識別子を削除する場合は、注意が必要です。ま
た、メニュー項目を追加するビューを特定するための文字列も渡されます。最後に、追加したメニュー項
目が選択された際にコールする関数の名前を特定するための文字列が渡されます。この関数には、
「sn_uint32」タイプの 3 つの引数、メニュー ID、コールするオブジェクトのオブジェクト ID、ビューで
使用するユニット ID が必要になります。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 211 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

メモ:関数は関数ポインタではなく、文字列として渡されます。
void TestFunction(sn_uint32 uMenuID, sn_uint32 uCallingObj,
sn_uint 32 uUnit)
{
printf("Called by %u %u %u\n", uMenuID, uCallingObj, uUnit);
}

int main (int argc, char ** argv)


{
// uID is discarded in this example
sn_uint32 uID;
CommandAddMenuItem ("IM Test", &uID, "All", "TestFunction");
return 0;
}

タイプ表示の変更
ウォッチ、オート、ローカルの各ビューのデータ タイプの表示は、カスタマイズすることができ、カス
タムのタイプ クラスから特定のメンバを表示、またはベクター タイプの内積などの派生データを表示さ
せることが可能になります。
タイプの表示には、コールバック関数 (タイプ ハンドラ) およびフォーマット文字列を使用でき、single
タイプ用の複数の異なるハンドラを、ビューのコンテキスト メニューから登録することもできます。コ
ールバック関数は、デバッガ起動時に実行される autoexec.eic スクリプトで指定する必要があります。
以下は、タイプ表示ハンドラを登録するためのコマンドです。
RegisterTypeDisplayHandler(const char *)

渡される文字列で、ハンドラを指定します。
フォーマット文字列の指定は、以下の形式で行います。
Variable=[MenuName]FormatString


Vector =[VectorDisplay]X = <x, g> Y = <y, g> Z = <z, g>

タイプ ハンドラのコールバック関数は、以下の形式で指定します。
Variable:[MenuName]CallbackFunction


Vector :[MyExpansion]Callback

上記の両方の場合において、任意の [MenuName] では、メニューにおけるハンドラの表示方法を指定で


きます。名前を指定しない場合、ハンドラは「Unnamed」として表示されます。
フォーマット文字列の構文は、AutoExp.dat で使用されるものと同じです。フォーマット文字列のテキス
トは、そのままの状態で表示され、表示されるメンバにラベルを追加する際に使用できます。メンバ値を
表示させる場合は、以下のように不等号 (< および >) を使用します。
<member ,format>
以下の表は、指定できるフォーマットのタイプの詳細です。

文字 説明 例 表示

c 1 つの文字 0x0061 'a'

d 符号付きの 10 進整数 0xF000000F,d -15

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 212 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

e 符号付きの浮動小数点 (科学表記) 2./5,e 4.000000e-001

f 符号付きの浮動小数点 2./5.,f 0.400000

g e と f の省略形 2./5.,g 0.4

h d、i、o、u、x、X の short 接頭辞 15hx 0x000F

i 符号付きの 10 進整数 0xF0000000F,d -15

l d、i、o、u、x、X の long 接頭辞 15lx 0x0000000F

o 符号なしの 8 進整数 0x000F,o 17

s ヌル終端文字列 0x00123456,s "My string"

u 符号なしの 10 進整数 0x000F,u 15

x,X 16 進整数 15x 0x0000000F

コールバック関数は、以下の形式で使用します。
void Callback(sn_uint32 ProcessID, sn_uint32 ThreadIDWord0, sn_uint32
ThreadIDWord1, const char* pVariable, char * pOutput,
sn_uint32 uSize)
{
...
}

例に関しては"examples\DebuggerScripting\autoexec.eic" を参照してください。
上記の例では、展開されている変数 (タイプではない) の名前が pVariable に含まれており、pOutput は
表示される出力文字列、uSize は出力バッファのサイズとなっています。この方法では、タイプの表示方
法を非常に柔軟に指定できます。シンプルな例として、2D ベクターの X と Y のコンポーネントではな
く、その角度と大きさを表示することなどができます。

スクリプト サンプル
スクリプト サンプルは、ディレクトリ \examples\DebuggerScripting に収録されています。以下は、現
在使用可能なスクリプトの一覧です。

BasicExamples(a).c 多くの API 用の基本サンプルを収録。PS3 デバッガのスクリプトが始めて


の方は、必ず参照してください。

BasicExamples(b).c 多くの API 用の基本サンプルを収録。PS3 デバッガのスクリプトが始めて


の方は、必ず参照してください。

BrokenMenu.c メニューが目的どおり機能しないケースを紹介。このコードは、意図的に
不正に動作するようになっています。

DeadLockDetection.c 同期プリミティブを分析することにより、潜在的なスレッド デッドロック


を検出。

drawModes.c 各種の描画モードをデモ。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 213 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

dumpHeapArea.c 標準ライブラリの malloc で管理されるヒープ領域に関する情報をダンプ。

endianSwap.c サンプル データに対してエンディアン変換を実行。

Font.c フォント リストを取得し、サンプル テキストを画面に出力。

GDIParticleProfile.c 「01_ppu_particles SDK samples\tutorial」のサンプルのパフォーマンスを


視覚的にプロファイル。

Menu2.c メニューと PeekNotification を使用し、ブロックのない通知の出力をデ


モ。

MultiSPURS-job.c SPU 起動時から SPURS ジョブをデバッグする手動プロセス (現在では廃止)


を自動化。

MultiSPURS-task.c SPU 起動時から SPURS タスクをデバッグする手動プロセス (現在では廃止)


を自動化。

ParticleProfile.c 「01_ppu_particles SDK samples\tutorial」のサンプルのパフォーマンスを


プロファイル。

SPURS-Job.c CellSpursJobMain までを自動的に実行して SPURS ジョブのデバッグをシ


ンプル化。

SPURS-Task.c CellSpursMain までを自動的に実行して SPURS タスクのデバッグをシンプ


ル化。

StartStop.c PS3StartAllProcesses 関数と PS3StopAllProcesses 関数の正しい使用方法を


デモ。

StartStopBroken.c PS3StartAllProcesses 関数と PS3StopAllProcesses 関数の不正な使用方法を


デモ。このコードは、意図的に不正に動作するようになっています。

Sync1-CondVariable.c 条件変数同期プリミティブへのアクセス方法をデモ。

Sync2-EventQueue.c イベント キュー同期プリミティブへのアクセス方法をデモ。

Sync3-LWMutex.c 軽量ミューテックス同期プリミティブへのアクセス方法をデモ。

Sync4-Mutex.c ミューテックス同期プリミティブへのアクセス方法をデモ。

Sync5-RWlock.c リーダ/ライタ ロック同期プリミティブへのアクセス方法をデモ。

Sync6-Sema.c セマフォ同期プリミティブへのアクセス方法をデモ。

timer.c タイマー通知のみを実行。

TTYNotifications.c NT_TTY 通知から受信した TTY を解析。

autoexec.eic スタートアップ スクリプトのサンプル。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 214 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
デバッガ スクリプト

スクリプティングの制限
ProDGデバッガのスクリプティング サポートは、まだ開発初期の段階にあるため、その仕様は変更の対
象となっています。SN Systems は、できる限りデバッガ スクリプティング API の統制に継続して努めて
いきますが、ユーザーは今後のデバッガ アップデートを適用するために、デバッガ スクリプトに関する
マイナーな変更を求められる場合があることをご了承ください。
以下は、現行バージョンに適用され、現在知られている制限事項です。
• ビットフィールドはサポートされていません。したがって、ビットフィールドを有する構造は使用
できません。C でのビットフィールドの使用方法はコンパイラに依存するため、スクリプトが目的
のシステムズでの仕様に完全に一致するビットフィールドを構築することは期待できません。ただ
し、デバッガ式評価機能はビットフィールドをサポートしているので、整数にビットフィールドを
用いるターゲット式を評価したい場合、式評価機能にビットフィールドを含む式を提示するたけで
実行できます。
• スクリプト解析機能は、デバッガ総体と同様のスレッド コンテキストで実行されるので、ターゲッ
ト通信の同期化に伴う問題はありません。スクリプトがデバッガのフリーズの原因になることを回
避するため、スクリプトは、デバッガのアイドリング中にのみ実行されます。これは、実行する必
要のあるコードがスクリプト内にある場合、スクリプトが、ターゲット コードの実行に時々割り込
む必要があることを意味します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 215 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

17: 付録 A: スクリプティング API

基本的な typedefs

BOOL typedef int BOOL;


sn_int8 typedef signed char sn_int8;
sn_uint8 typedef unsigned char sn_uint8;
sn_int16 typedef signed short sn_int16;
sn_uint16 typedef unsigned short sn_uint16;
sn_int32 typedef signed int sn_int32;
sn_uint32 typedef unsigned int sn_uint32;
sn_int64 typedef struct { sn_int32 word[2]; } sn_int64;
sn_uint64 typedef struct { sn_uint32 word[2]; } sn_uint64;
sn_uint128 typedef struct { sn_uint32 word[4]; } sn_uint128;
sn_address typedef sn_uint64 sn_address;

標準 C 関数

Stdlib.h
char * _itoa(int n,char *str, int radix);
char * _ltoa(long n,char *str, int radix);
char * _ultoa(long n,char *str, int radix);
void * malloc(size_t n);
void * calloc(size_t x, size_t y);
void * realloc(void * ptr, size_t n);
void free(void *ptr);
int rand(void);
void srand(unsigned int seed);
double strtod(const char *str, char **endptr);
long strtol(const char *str, char **endptr,int base);
unsigned long strtoul(const char *str, char **endptr,int base);
int system(const char * str);
double atof(const char *str);
int atoi(const char *s);
long atol(const char *s);
char *getenv(const char *name);
int *putenv(const char *name);

Stdio.h
int puts(const char *s);
int rewind(FILE *fp);
int fgetpos(FILE *fp, fpos_t *pos);
int fsetpos(FILE *fp, fpos_t *pos);
int printf(const char *fmt, ...);
int sprintf(char *buf, const char * fmt, ...);
int fprintf(FILE * fp,const char *fmt, ...);
int vfprintf(FILE * fp,const char *fmt, va_list args);
int vsprintf(char * str,const char *fmt, va_list args);
long ftell(FILE *fp);
int ungetc(int c, FILE *fp);
char * gets(char *s);
int fgetc(FILE * fp);
int fputc(int c, FILE * fp);
int fputs(const char *s, FILE *fp);
char * fgets(char *s, int n, FILE *fp);
size_t fread(void *buf, size_t elsize, size_t nelems, FILE * fp);
size_t fwrite(const void *buf, size_t elsize, size_t nelems, FILE * fp);
FILE *freopen(const char *name, const char *mode, FILE *fp);
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 216 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

FILE *fopen(const char *name, const char *mode);


int fflush(FILE * fp);
int fclose(FILE * fp);
int setvbuf(FILE *fp, char *buf, int mode, size_t size);
char * tmpnam(char*s);
FILE * tmpfile(void);
int rename(const char *oldname, const char *newname);
int fseek(FILE *fp, long off, int origin);
void clearerr(FILE *fp);
void perror(const char *msg);

#define BUFSIZ 512


#define EOF –1
#define FILENAME_MAX 260
#define FOPEN_MAX 20
#define L_tmpnam 14
#define TMP_MAX 32767
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
#define _IOFBF 0
#define _IOLBF 64
#define _IONBF 4
#define putchar(x) fputc(x,stdout)

String.h
void *memcpy(void * dst, const void * src, size_t n);
void *memmove(void * dst, const void * src , size_t n);
char *strcpy(char * dst, const char * src);
char *strdup(const char * dst);
char *strncpy(char * dst, const char * src, size_t n);
char *strcat(char * s1, const char * s2);
char *strncat(char * s1, const char *s2, size_t n);
int memcmp(const void * s1, const void * s2, size_t n);
int strcmp(const char * s1, const char * s2);
int strcoll(const char * s1, const char * s2);
int strncmp(const char * s1, const char *s2, size_t n);
size_t strxfrm(char *dst, const char * src, size_t n);
void *memchr(const void *s, int c, size_t n);
char *strchr(const char *s, int c);
size_t strcspn(const char *s, const char *reject);
char *strpbrk(const char *s, const char *accept);
char *strrchr(const char *s, int c);
size_t strspn(const char *s, const char *accept);
char *strstr(const char *haystack, const char *needle);
char *strtok(char *s, const char *delim);
void *memset(void *s, int c, size_t n);
char *strerror(int n);
size_t strlen(const char *s);
char *strrev(const char * string);

Math.h
double acos(double a);
double asin(double a);
double atan(double a);
double atan2(double a, double b);
double cos(double a);
double sin(double a);
double tan(double a);
double cosh(double a);
double sinh(double a);
double tanh(double a);
double exp(double a);
double frexp(double a, int * b);
double ldexp(double a, int b);
double log(double a);
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 217 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

double log10(double a);


double modf(double a, double *b);
double pow(double a, double b);
double sqrt(double a);
double ceil(double a);
double fabs(double a);
double floor(double a);
double fmod(double a, double b);

typedef char *va_list;


typedef unsigned int size_t;
typedef struct { char dummy[32]; } FILE;
typedef unsigned int fpos_t;

#define CHAR_BIT 8
#define MB_LEN_MAX 2
#define UCHAR_MAX 255
#define USHRT_MAX 65535
#define UINT_MAX 4294967295
#define CHAR_MAX 127
#define SCHAR_MAX 127
#define SHRT_MAX 32767
#define INT_MAX 2147483647
#define CHAR_MIN (-CHAR_MAX-1)
#define SCHAR_MIN (-SCHAR_MAX-1)
#define SHRT_MIN (-SHRT_MAX-1)
#define INT_MIN (-INT_MAX-1)
#define LONG_MIN (-LONG_MAX-1)
#define LONG_MAX 2147483647
#define ULONG_MAX 4294967295

デバッガ スクリプティング API リファレンス

AddMenuItem

プロトタイプ sn_uint32 AddMenuItem(


const char * szLabel,
sn_uint32 * pMenuId,
const char * szViewType);

内容 この関数は、スクリプト ビューのポップアップ メニュー (右クリックで使用) に


メニュー項目を追加します。ユーザーは、項目のラベルとして表示されるテキス
トを指定できますが、グラフィック アイテムや分岐サブメニューなどのオプシ
ョンを指定することはできません。追加した項目を表示するポップアップ メニ
ューを指定することは可能です。この関数は、[Command] ウィンドウからはコ
ールできません。
このメニュー項目が選択された場合は、GetNotification と PeekNotification で
取得可能な通知が生成されます。この通知には、メニュー ID (pMenuId) に設定
された pParam1 の値が含まれ、pParam2 には、Calling Object ID と ユニット
ID が含まれます。これらの値は、HIWORD マクロと LOWORD マクロを使用
してアクセスでき、HIWORD ではユニット ID が、LOWORD では Calling
Object ID が渡されます。

パラメータ この関数のパラメータは以下のとおりです。

szLabel 入力: 追加するメニュー項目のメニューに表示される文字列。

pMenuId 出力: メニュー項目が追加されると、このパラメータは、そのメニュー項目に


対応した ID にセットされます。この値を、通知オブジェクトの pParam1 と比

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 218 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

較することにより、選択されたメニュー オブジェクトを特定することができま
す。

szViewType 入力: これは、このオプションが表示されるメニューを表します。以下は、使


用できるデフォルトの引数です。
"Self" このビューのみに追加
"All" すべてのビューに追加
"ScriptView" スクリプト ビューに追加
"AutosView" オート ビューに追加
"BreakpointView" ブレークポイント ビューに追加
"CallstackView" コールスタック ビューに追加
"DBGSourceView" ソース ビューに追加
"KernelView" カーネル ビューに追加
"LocalsView" ローカル ビューに追加
"MemoryView" メモリ ビューに追加
"RegisterView" レジスタ ビューに追加
"TTYView" TTY ビューに追加
"WatchView" ウォッチ ビューに追加
"WorkspaceView" ワークスペース ビューに追加

"DisasmView" 逆アセンブリ ビューに追加


"CommandScriptView" [Command] ビューに追加
"ProcessView" プロセス ビューに追加

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 RemoveMenuItem、RequestNotification、GetNotification、Peek Notification

BP_PARAM_INFO

構文 typedef struct{
sn_uint32 uUnitID;
sn_uint32 uProcessID;
sn_uint64 uThreadID;
sn_uint32 uPC; } BP_PARAM_INFO;

内容 この構造体は、NT_BREAK 通知の 2 つ目のパラメータとして返されます (「通知


の使用方法」を参照)。

参照事項 GetNotification

CancelNotification

プロトタイプ sn_int32 CancelNotification(


sn_uint32 eNotifyType);

内容 この関数は、指定した通知をキャンセルします。これにより、指定したイベント
が発生しても、GetNotification 関数に対して通知が出力されなくなります。こ
れは、イベントの発生を抑制するものではありませんが、通知は生成されなくな
ります。たとえばタイマー通知をキャンセルした場合も、タイマーから指定間隔
で出力される信号は停止しません。

パラメータ この関数のパラメータは以下のとおりです。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 219 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

eNotifyType 入力: キャンセルする通知タイプ。以下の通知が対象となります。


NT_ANY、NT_THREAD_STOP、NT_BREAK、NT_THREAD_RUN、
NT_TIMER、NT_KEYDOWN、NT_KEYUP、NT_CUSTMENU、NT_DEBUG、
NT_TTY

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。リクエストされていない通知


をキャンセルすると、エラーが発生します。

参照事項 RequestNotification、SelectNotification、GetNotification、PeekNotification

SelectNotification

プロトタイプ sn_int32 SelectNotification(


sn_uint32 eNotifyType);

内容 この関数は、指定した関数がリクエストされているかどうかをチェックします。
これにより、通知を同じ値に繰り返し設定する必要がなくなります。

パラメータ この関数のパラメータは以下のとおりです。

eNotifyType 入力: 選択する通知タイプ。以下の通知タイプが対象となります。


NT_ANY、NT_THREAD_STOP、NT_BREAK、NT_THREAD_RUN、
NT_TIMER、NT_KEYDOWN、NT_KEYUP、NT_CUSTMENU、NT_DEBUG、
NT_TTY

戻り値 True: 通知がリクエストされている場合に返されます。


False: 通知がリクエストされていない場合に返されます。

参照事項 RequestNotification、CancelNotification、GetNotification、PeekNotification

CommandAddMenuItem

プロトタイプ sn_uint32 CommandAddMenuItem(


const char * szLabel,
sn_uint32 * pMenuId,
const char * szViewType,
const char * szFunctionName);

内容 この関数は、スクリプト ビューのポップアップ メニュー (右クリックで使用) に


メニュー項目を追加します。ユーザーは、項目のラベルとして表示されるテキス
トを指定できますが、グラフィック アイテムや分岐サブメニューなどのオプシ
ョンを指定することはできません。追加した項目を表示するポップアップ メニ
ューを指定することは可能です。これは、関数の [Command] モード版 のた
め、コールバック関数を指定する必要もあります。

パラメータ この関数のパラメータは以下のとおりです。

szLabel 入力: 追加するメニュー項目のメニューに表示される文字列。

pMenuId 出力: メニュー項目が追加されると、このパラメータは、そのメニュー項目に


対応した ID にセットされます。この値を、通知オブジェクトの pParam1 と比
較することにより、選択されたメニュー オブジェクトを特定することができま
す。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 220 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

szViewType 入力: これは、このオプションが表示されるメニューを表します。以下は、使


用できるデフォルトの引数です。
“Self” このビューのみに追加
”All” すべてのビューに追加
”ScriptView” スクリプト ビューに追加
”AutosView” オート ビューに追加
”BreakpointView” ブレークポイント ビューに追加
”CallstackView” コールスタック ビューに追加
”DBGSourceView” ソース ビューに追加
”KernelView” カーネル ビューに追加
”LocalsView” ローカル ビューに追加
”MemoryView” メモリ ビューに追加
”RegisterView” レジスタ ビューに追加
”TTYView” TTY ビューに追加
”WatchView” ウォッチ ビューに追加
”WorkspaceView” ワークスペース ビューに追加

”DisasmView” 逆アセンブリ ビューに追加


”CommandScriptView” Command script ビューに追加

入力: このメニュー項目が選択された際にコールされる関数の名前。この関数
szFunctionName は、メニュー ID と Calling Object ID をそれぞれ持つ 2 つの sn_uint32 変数を使
用します。

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。

参照事項 CommandRemoveMenuItem

CommandRemoveMenuItem

プロトタイプ sn_uint32 CommandRemoveMenuItem(


sn_uint32 uMenuId);

内容 この関数は、CommandAddMenuItem で追加されたメニュー項目を削除しま
す。ここでは、削除対象のメニュー項目を表す 1 つの引数が渡されます。この関
数は、スクリプトが最後まで到達して終了する場合にコールされます。スクリプ
トが外部から中断された場合、メニュー項目は自動的に削除されます。デバッガ
に最初から存在するメニュー項目 ([kill script] など) を削除することはできませ
ん。
メニュー項目を削除した場合、関連付けられていたメニュー ID は、別の新しい
メニュー項目で使用可能になります。このため、メニュー項目を何度も追加/削
除する場合は、関連のない新しいメニューが選択された際に、古い関数がコール
されないようにする必要があります。
スクリプト ビューで、追加していないメニュー項目を削除すると、エラーが発
生します。これは、スクリプトがメニュー項目を削除し、そのメニュー項目に依
存する別のスクリプトをブレークしてしまうことを回避するためのものです。

パラメータ この関数のパラメータは以下のとおりです。

uMenuId 入力: 削除するカスタムのメニュー項目。

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 221 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

参照事項 CommandAddMenuItem

EndianSwap_2

プロトタイプ sn_uint16 EndianSwap_2(


sn_uint16 uData);

内容 この関数は、提供されたデータ (16 ビット値) に対してエンディアン変換を実行


します。ここでは、データのバイト順が逆転します。たとえば、以下の 16 進値
に対して EndianSwap_2 を実行すると、
ABCD
結果は以下のようになります。
CDAB

パラメータ この関数のパラメータは以下のとおりです。

uData 入力: エンディアン変換を実行する対象データ。

戻り値 uData をエンディアン変換した値。

参照事項 EndianSwap_4、EndianSwapBuffer_4、EndianSwapBuffer_2

EndianSwap_4

プロトタイプ sn_uint32 EndianSwap_4(


sn_uint32 uData);

内容 この関数は、提供されたデータ (32 ビット値) に対してエンディアン変換を実行


します。ここでは、データのバイト順が逆転します。たとえば、以下の 16 進値
に対して EndianSwap_4 を実行すると、
ABCD1234
結果は以下のようになります。
3412CDAB

パラメータ この関数のパラメータは以下のとおりです。

uData 入力: エンディアン変換を実行する対象データ。

戻り値 uData をエンディアン変換した値。

参照事項 EndianSwap_2、EndianSwapBuffer_4、EndianSwapBuffer_2

EndianSwapBuffer_2

プロトタイプ sn_uint32 EndianSwapBuffer_2(


void * pData,
sn_uint32 uLength);

内容 この関数は、複数のデータに対して EndianSwap_2 と同じエンディアン変換を


実行します。ここでは、各 2 バイトが 1 つの 16 ビット整数として処理および変
換されます。たとえば、以下の 16 進値は、
ABCD1234
DEF18726
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 222 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

2A82E7FB
以下のように変換されます。
CDAB3412
F1DE2687
822AFBE7

パラメータ この関数のパラメータは以下のとおりです。

pData 入力/出力: 符号なしの 16 ビット整数をリスト入力し、エンディアン変換され


たリストが返されます。

uLength 入力: リストのサイズ (バイト)。これは、リスト内の 16 ビット整数の数の 2 倍


と同じサイズになります。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 EndianSwap_4、EndianSwap_2、EndianSwapBuffer_4

EndianSwapBuffer_4

プロトタイプ sn_uint32 EndianSwapBuffer_4(


void * pData,
sn_uint32 uLength);

内容 この関数は、複数のデータに対して EndianSwap_4 と同じエンディアン変換を


実行します。ここでは、各 4 バイトが 1 つの 32 ビット整数として処理および変
換されます。たとえば、以下の 16 進値は、
ABCD1234
DEF18726
2A82E7FB
以下のように変換されます。
3412CDAB
2687F1DE
FBE7822A

パラメータ この関数のパラメータは以下のとおりです。

pData 入力/出力: 符号なしの 32 ビット整数をリスト入力し、エンディアン変換された


リストが返されます。

uLength 入力: リストのサイズ (バイト)。これは、リスト内の 32 ビット整数の数の 4 倍


と同じサイズになります。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 EndianSwap_4、EndianSwap_2、EndianSwapBuffer_2

ExitDebugger

プロトタイプ void ExitDebugger(


sn_int32 error);

内容 この関数は、デバッガを終了して「error」を返します。ここでは、デバッガの

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 223 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

表示のみではなく、デバッガ全体が終了することに注意してください。

パラメータ この関数のパラメータは以下のとおりです。

error 入力: 終了するデバッガから返される値。

戻り値 なし

FileSelectionDialog

プロトタイプ sn_int32 FileSelectionDialog(


char * pFilePath;
char * pFileName);

内容 この関数は、ユーザーがファイルを選択できる、[ファイルの選択] ダイアログボ
ックスを開きます。2 つの引数は、選択されたファイルへのパスとファイル名を
含む出力文字列です。

パラメータ この関数のパラメータは以下のとおりです。

pFilePath 出力: 選択されたファイルのパス。

pFileName 出力: 選択されたファイルの名前。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

GetInputLine

プロトタイプ sn_int32 GetInputLine(


char* pBuf,
sn_uint32 uBufSize,
sn_uint32* puNumCharsWritten);

内容 この関数は、スクリプト ビューで入力された行情報を取得します。

パラメータ この関数のパラメータは以下のとおりです。

pBuf 出力: 入力情報を保存するバッファ。

uBufSize 入力: pBuf のサイズ。

puNumCharsWritten 出力: バッファに書き込まれる文字数。

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。

GetLastError

プロトタイプ sn_int32 GetLastError(void);

内容 この関数は、スクリプトで発生した最後のエラーを返します。これは、
SN_FAILED マクロおよび SN_SUCCEEDED マクロと同時に使用します。
例:

if (SN_FAILED(PS3ThreadStart(uProcessID, uThreadID)))

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 224 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

if (GetLastError()==SN_E_THREAD_START_FAILED)
{
printf("Error: Last command failed!\n");
}
}

パラメータ なし

戻り値 発生した最後のエラーの番号。以下は、戻り値のリストです。
SN_S_OK エラーなし
SN_E_NOT_IMPL 未対応
SN_E_BUSY デバイスが使用中のため応答不可能
SN_E_COMMS_ERR 通信エラー
SN_E_LOAD_FAILED ロード失敗

SN_E_OUT_OF_MEM メモリ不足エラー
SN_E_BAD_PARAM 上記のエラー コードの対象以外の不正な
パラメータが渡された
SN_E_PARAM_NO_TERM パラメータが終端処理されていない
SN_E_DRAW_FAILED 描画失敗
SN_E_GRAPHICS_NOT_INIT グラフィックが未初期化
(GraphicsSetWindowSize をコールして初期化)
SN_E_GRAPHICS_ERROR グラフィックに関するエラー
SN_E_DRAW_FAILED 描画コマンド失敗
SN_E_BINARY_LOAD_FAILED バイナリ ファイルのロード失敗
SN_E_BINARY_SAVE_FAILED バイナリ ファイルの保存失敗
SN_E_BREAKPOINT_ADD_FAILED
ブレークポイント追加失敗
SN_E_BREAKPOINT_REMOVE_FAILED
ブレークポイント削除失敗

SN_E_THREAD_START_FAILED
スレッド開始失敗
SN_E_THREAD_STOP_FAILED
スレッド停止失敗
SN_E_STEP_FAILED ステップ コマンド失敗
SN_E_RUN_TO_ADDR_FAILED アドレス実行コマンド失敗
SN_E_EVAL_EXPR_FAILED 表現の評価失敗
SN_E_INFO_LOOKUP_FAILED 情報の参照失敗 (LineToAddress など).
SN_E_FLUSH_CACHE_FAILED キャッシュのフラッシュ失敗
SN_E_ADD_MENU_ERROR メニュー項目の追加失敗
SN_E_REMOVE_MENU_ERROR メニュー項目の削除失敗
SN_E_BAD_NOTIFICATION 不明または不正な通知が使用された
SN_E_TIMER_ERROR タイマーのセットアップ失敗
SN_E_NO_EXE_UNIT 指定されたスレッド ID / プロセス IDの
実行ユニットが見つからない
SN_E_PROC_KILL_FAILED プロセス「Kill」コマンド失敗
SN_E_OUT_OF_BOUNDS 出力バッファが小さすぎる

参照事項 GetLastErrorString

GetLastErrorString
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 225 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

プロトタイプ const char * GetLastErrorString(void);

内容 スクリプトで発生した最後のエラー メッセージを返します。これは、
SN_FAILED マクロおよび SN_SUCCEEDED マクロと同時に使用します。
例:

if (SN_FAILED(PS3GetModuleList(uProcessID, &NumModules, pModu


leIDs)))
{
printf(“Error: %s\n”, GetLastErrorString());
return 0;
}

パラメータ なし

戻り値 最後のエラーの文字列値

参照事項 GetLastError

GetNotification

プロトタイプ sn_int32 GetNotification(


sn_uint32 eNotifyType,
sn_notify * pNotify);

内容 この関数は、通知キューから次の通知を取得する際に使用します。キューが空の
場合は、戻り値が発生するまでブロックします。これは、スクリプトが特定イベ
ントを待機して実行継続を保留している場合に便利です。たとえばスクリプト
が、コードのセクションを毎秒 1 回実行する場合は、タイマーがセットされ、タ
イマー通知を受けるまで GetNotification を使用して実行が保留されます。
GetNotification が通知を受けると、通知キューから削除されます。

パラメータ この関数のパラメータは以下のとおりです。

eNotifyType 入力: 指定した場合は、渡されたその通知タイプのみが返されます。以下の通


知が対象となります。
NT_ANY、NT_THREAD_STOP、NT_BREAK、NT_THREAD_RUN、
NT_TIMER、NT_KEYDOWN、NT_KEYUP、NT_CUSTMENU、NT_DEBUG、
NT_TTY
デフォルトでは、この引数として 0 を渡した場合、NT_ANY と同等になりま
す。

pNotify 出力: 返される通知オブジェクトには、通知タイプに関する情報、およびこの


通知によって返されたパラメータが含まれます。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 RequestNotification、CancelNotification、CheckNotificatoin、PeekNotification

GetObjectData

プロトタイプ sn_int32 GetObjectData(


sn_uint32 uObjectID,
sn_uint32 uCommandID,

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 226 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

void * pBuffer,
sn_uint32 uSize);

内容 この関数は、オブジェクトに関する情報を取得する場合に使用します。現在この
オブジェクトは、常にビューになっています。uObjectID は通常、メニューのコ
ールバック関数/通知によって取得されます。たとえばメモリ ビューでは、カス
タム メニュー項目のオプションが選択された場合、このビューで、現在のカー
ソル位置のアドレスを取得する関数がトリガされます。目的のオブジェクトが、
指定したコマンドに対応していない場合は、エラーを表す 0 が返されます。

パラメータ この関数のパラメータは以下のとおりです。

uObjectID 入力: 問い合わせるオブジェクトの固有の識別子。

uCommandID 入力: コールされるコマンドの ID。以下は、現在使用できるコマンドです。


GVD_ADDR_AT_CURSOR:
これは、メモリ ビュー、ソース ビュー、逆アセンブリ ビューに対応していま
す。現在のカーソル位置の 64 ビットのアドレスが返されます。
GVD_PROCESS
[オート]、[コールスタック]、[ソース]、[逆アセンブリ]、[メモリ]、[ローカル]、
[ウォッチ] の各ビューで対応。32 ビットのプロセス ID が返されます。
GVD_THREAD
[オート]、[コールスタック]、[ソース]、[逆アセンブリ]、[メモリ]、[ローカル]、
[ウォッチ] の各ビューで対応。64 ビットのスレッド ID が返されます。

pBuffer 出力: これは、クエリの結果がコピーされる、割り当てられたメモリのバッフ


ァです。これには、コールバックされたコマンドに対して正しいサイズが割り当
てられますが、サイズが異なる場合は、エラーが返されます。

uSize 入力: これは pBuffer と同じサイズですが、指定したバッファが正しいサイズ


であることをチェックする際に使用します。

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。

参照事項 GetNotification

GraphicsClearWindow

プロトタイプ sn_int32 GraphicsClearWindow(void);

内容 グラフィック ウィンドウをクリアします。ウィンドウは背景色のみになりま
す。

パラメータ なし

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 GraphicsSetBackgroundColor

GraphicsDrawEllipse

プロトタイプ sn_int32 GraphicsDrawEllipse(


sn_int32 x0,
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 227 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

sn_int32 y0,
sn_int32 x1,
sn_int32 y1);

内容 この関数は、(x0, y0) と (x1, y1) を対極コーナーとした四角形に接触する楕円形


を描画します。楕円形は、SetForegroundColor に対する前回のコールで指定さ
れた色で描画されます。これを含むすべての描画関数では、(0, 0) がグラフィッ
ク ビューの左上コーナーになります。

パラメータ この関数のパラメータは以下のとおりです。

x0 入力: 接触する四角形の最初の隅の X 座標。

y0 入力: 接触する四角形の最初の隅の Y 座標。

x1 入力: 接触する四角形の対極にある隅の X 座標。

y1 入力: 接触する四角形の対極にある隅の Y 座標。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 GraphicsDrawLine、GraphicsDrawPixel、GraphicsDrawRectangle、
GraphicsDrawText、GraphicsDrawPolygon

GraphicsDrawLine

プロトタイプ sn_int32 GraphicsDrawLine(


sn_int32 x0,
sn_int32 y0,
sn_int32 x1,
sn_int32 y1);

内容 この関数は、SetForegroundColor に対する前回のコールで指定された色で、(x0,
y0) と (x1, y1) の 2 ポイント間に線を描画します。これを含むすべての描画関数
では、(0, 0) がグラフィック ビューの左上コーナーになります。

パラメータ この関数のパラメータは以下のとおりです。

x0 入力: 開始ポイントの X 座標。

y0 入力: 開始ポイントの Y 座標。

x1 入力: 終了ポイントの X 座標。

y1 入力: 終了ポイントの Y 座標。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 GraphicsDrawPixel、GraphicsDrawRectangle、GraphicsDrawEllipse、
GraphicsDrawText、GraphicsDrawPolygon

GraphicsDrawPixel

プロトタイプ sn_int32 GraphicsDrawPixel(


sn_int32 x,

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 228 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

sn_int32 y); y);

内容 この関数は、SetForegroundColor に対する前回のコールで指定された色で、画
面上に 1 つのピクセルを描画します。これを含むすべての描画関数では、(0, 0)
がグラフィック ビューの左上コーナーになります。

パラメータ この関数のパラメータは以下のとおりです。

x 入力: 描画する X 座標。

y 入力: 描画する Y 座標。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 GraphicsDrawLine、GraphicsDrawRectangle、GraphicsDrawEllipse、
GraphicsDrawText、GraphicsDrawPolygon

GraphicsDrawPolygon

プロトタイプ sn_int32 GraphicsDrawPolygon(


sn_point *pPoints,
sn_uint32 uCount);

内容 この機能は、pPoints で指定されたポイントで構成されるポリゴンを描画しま
す。sn_point 構造体には、「x」と「y」という sn_int32 タイプの変数が 2 つあ
り、この変数は、2D グラフィック ビューでのポイントの指定に使用します。ポ
リゴンは、GraphicsSetForegroundColor に対する前回のコールで指定された色
で描画され、座標システムでは (0, 0) が左上コーナーとなります。

パラメータ この関数のパラメータは以下のとおりです。

pPoints 入力: ポリゴンを構成するポイントのリスト。

uCount 入力: ポイント リスト内のポイントの数。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 GraphicsDrawLine、GraphicsDrawPixel、GraphicsDrawRectangle、
GraphicsDrawText、GraphicsDrawEllipse

GraphicsDrawRectangle

プロトタイプ sn_int32 GraphicsDrawRectangle(


sn_int32 x0,
sn_int32 y0,
sn_int32 x1,
sn_int32 y1);

内容 この関数は、(x0, y0) と (x1, y1) を対極コーナーとした四角形を描画します。四


角形は、SetForegroundColor に対する前回のコールで指定された色で描画され
ます。これを含むすべての描画関数では、(0, 0) がグラフィック ビューの左上コ
ーナーになります。

パラメータ この関数のパラメータは以下のとおりです。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 229 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

x0 入力: 四角形の最初の隅の X 座標。

y0 入力: 四角形の最初の隅の Y 座標。

x1 入力: 四角形の対極にある隅の X 座標。

y1 入力: 四角形の対極にある隅の Y 座標。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 GraphicsDrawLine、GraphicsDrawPixel、GraphicsDrawEllipse、
GraphicsDrawText、GraphicsDrawPolygon

GraphicsDrawText

プロトタイプ sn_int32 GraphicsDrawText(


sn_int32 x,
sn_int32 y,
const char * pszText);

内容 この関数は、SetForegroundColor に対する前回のコールで指定された色、およ
び GraphicsSetFont に対する前回のコールで指定されたフォントで、画面上にテ
キストを描画します。テキスト境界ボックスの左上コーナー (x, y) が (0, 0) の場
合は、グラフィック ビューの左上コーナーになります。

パラメータ この関数のパラメータは以下のとおりです。

x 入力: テキスト境界ボックスの左上隅の X 座標。

y 入力: テキスト境界ボックスの左上隅の Y 座標。

pszText 入力: 画面に書き込むテキスト。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 GraphicsDrawLine、GraphicsDrawPixel、GraphicsDrawRectangle、
GraphicsDrawText、GraphicsDrawPolygon、GraphicsSetFont

GraphicsGetFontList

プロトタイプ sn_int32 GraphicsGetFontList(


char * pBuffer);

内容 この関数は、コンピュータで使用可能なフォントをチェックする際に使用しま
す。通常この関数は、2 回コールされます。最初のコールでは、pBuffer が
NULL にセットされ、フォント リストの文字列サイズが戻り値として返されま
す。これによりプログラマーは、結果を格納するための十分なバッファを割り当
てることができます。2 回目のコールでは、このバッファが渡されます。結果リ
ストは「\0」で終わる文字列で構成され、「\0\0」はリストの最後を表しま
す。

パラメータ この関数のパラメータは以下のとおりです。

pBuffer 出力: フォント リストを格納するバッファ。NULL が渡された場合、戻り値は


© SCEI ProDG Debugger for PlayStation®3 v470.1
- 230 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

フォント リストのサイズ (バイト) と同じになります。

戻り値 pBuffer が NULL 以外の場合は、成功時はゼロ、失敗時はゼロ未満が返されま


す。pBuffer が NULL の場合は、フォント リストのサイズ (バイト) が返されま
す。

参照事項 GraphicsSetFont

GraphicsGetWindowSize

プロトタイプ sn_int32 GraphicsGetWindowSize(


sn_uint32 * pWidth,
sn_uint32 * pHeight);

内容 現在のウィンドウ サイズ (ピクセル) を取得します。

パラメータ この関数のパラメータは以下のとおりです。

pWidth 出力: グラフィック ウィンドウの現在の横サイズ (ピクセル) を取得します。

pHeight 出力: グラフィック ウィンドウの現在の縦サイズ (ピクセル) を取得します。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 SNLoadBin

GraphicsSetBackgroundColor

プロトタイプ sn_int32 GraphicsSetBackgroundColor(


sn_uint8 red,
sn_uint8 green,
sn_uint8 blue);

内容 使用する背景の色を設定します。オブジェクトが描画されないエリアは、この色
で表示されます。

パラメータ この関数のパラメータは以下のとおりです。

red 入力: 赤の値 (0-255)

green 入力: 緑の値 (0-255)

blue 入力: 青の値 (0-255)

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 GraphicsSetForegroundColor

GraphicsSetDrawMode

プロトタイプ sn_int32 GraphicsSetDrawMode(


sn_uint32 uFlags,
sn_uint32 uMode);

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 231 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

内容 スクリプト ビューの描画モードを設定します。ここでメインとなるモードはテ
キストとグラフィック (DF_TEXT と DF_GRAPHICS) ですが、補足フラグを使用
して表示内容をウィンドウ サイズに合わせる (DF_GRAPHICSSTRETCH) ことも
できます。このフラグを指定する場合は、同時に ORing で通常のグラフィック
フラグを指定する必要があります。
このモードは、テキストとグラフィックの組み合わせを指定するもので、その両
方が使用される場合にのみ適用されます。

パラメータ この関数のパラメータは以下のとおりです。

uFlags 入力: 描画モードを指定するフラグ。


DF_TEXT テキスト モード
DF_GRAPHICS グラフィック モード
DF_GRAPHICSSTRETCH グラフィック モードと組み合わせてのみ使用。
グラフィックを、スクリプト ビューのサイズに合わせます。

これらのフラグは、ORed と併用して、上記の描画モードの組み合わせを指定す
ることもできます。

uMode 入力: テキストとグラフィックの組み合わせ方法を指定します。以下は、使用


できるフラグです。
DM_SRC、SM_SRC_OR_DST、DM_SRC_AND_DST、DM_SRC_XOR_DST、
DM_SRC_AND_NOT_DST、DM_NOT_SRC、
SM_NOT_SRC_AND_NOT_DST、DM_NOT_SRC_OR_DST、DM_NOT_DST
これらのモードに関しては、サンプル スクリプト drawModes.c を参照してくだ
さい。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

GraphicsSetFont

プロトタイプ sn_int32 GraphicsSetFont(


const char * pszName,
sn_uint32 uSize);

内容 表示テキスト出力に使用されるフォントを設定します。GraphicsDrawText に対
するコールは表示テキストですが、printf は表示テキストではありません。

パラメータ この関数のパラメータは以下のとおりです。

pszName 入力: 使用するフォントの名前。

uSize 入力: 出力時のフォント サイズ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 GraphicsGetFontList、GraphicsDrawText

GraphicsSetForegroundColor

プロトタイプ sn_int32 GraphicsSetForegroundColor(


sn_uint8 red,
sn_uint8 green,
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 232 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

sn_uint8 blue);

内容 使用する前景色を設定します。描画されるオブジェクト (ピクセル、線、四角
形、楕円形、テキスト、ポリゴン) は、すべてこの色で表示されます。この色
は、各オブジェクトに対していつでも設定することもできます。

パラメータ この関数のパラメータは以下のとおりです。

red 入力: 赤の値 (0-255)

green 入力: 緑の値 (0-255)

blue 入力: 青の値 (0-255)

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 GraphicsSetBackgroundColor、GraphicsDrawPixel、GraphicsDrawLine、
GraphicsDrawRectangle、GraphicsDrawEllipse、GraphicsDrawText、
GraphicsDrawPolygon

GraphicsSetWindowSize

プロトタイプ sn_int32 GraphicsSetWindowSize(


sn_uint32 uWidth,
sn_uint32 uHeight);

内容 入力された縦横サイズ (ピクセル) に、グラフィック ウィンドウのサイズをセッ


トします。描画モードが、ウィンドウのサイズに合わせてグラフィック表示する
ように設定されている場合は、ウィンドウ全体が表示エリアとなりますが、解像
度は [uWidth x uHeight] と同じになります。

パラメータ この関数のパラメータは以下のとおりです。

pWidth 入力: 現在のグラフィック ウィンドウの横サイズ (ピクセル)。

pHeight 入力: 現在のグラフィック ウィンドウの縦サイズ (ピクセル)。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 GraphicsGetWindowSize、GraphicsSetDrawMode

GraphicsUpdate

プロトタイプ sn_int32 GraphicsUpdate(void);

内容 この関数は、バッファを前に切り替え、その内容を表示します。現在の表示内容
を更新する必要がある場合は、GraphicsUpdate がコールされます。描画コマン
ドに対するすべてのコールは、後ろのバッファに適用されるため、コールされる
までその結果は表示されません。

パラメータ なし

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 233 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

参照事項 GraphicsDrawLine, GraphicsDrawPixel, GraphicsDrawRectangle,


GraphicsDrawText, GraphicsDrawEllipse, GraphicsDrawPolygon.

PeekNotification

プロトタイプ sn_int32 PeekNotification(


sn_uint32 eNotifyType,
sn_notify * pNotify);

内容 この関数は、通知キューの最初の通知をチェックして pNotify で返します。


GetNotification とは異なり、通知はキューから削除されません。また、キュー
が空の場合でもブロックしません。

パラメータ この関数のパラメータは以下のとおりです。

eNotifyType 入力: 指定した場合は、渡されたその通知タイプのみが返されます。以下は、こ


の対象となる通知です。
NT_ANY、NT_THREAD_STOP、NT_BREAK、NT_THREAD_RUN、
NT_TIMER、NT_KEYDOWN、NT_KEYUP、NT_CUSTMENU、NT_DEBUG、
NT_TTY
デフォルトでは、この引数として 0 を渡した場合、NT_ANY と同等になりま
す。

pNotify 出力: 返される通知オブジェクトには、通知タイプに関する情報、およびこの通


知によって返されたパラメータが含まれます。

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。

参照事項 RequestNotification、CancelNotification、CheckNotification、GetNotification

PS3AddBreakPoint

プロトタイプ sn_int32 PS3AddBreakPoint(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
sn_address address,
sn_uint32 uScriptID);

内容 この関数は、コードの指定アドレスにブレークポイントを追加します。このブレ
ークポイントは、通常のブレークポイントと同様に処理されるため、手動で、ま
たは UnitRemoveBreakPoint あるいは UnitRemoveAllBreakPoints コマンドを使
用して、後で削除することができます。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

uScriptID 入力: ブレークポイントと特定の ID を関連付けます。これは、ブレークポイン


トビューに表示され、NT_BREAK 通知の pParam1 から読み込むことが可能で
す。

address 入力: ブレークポイントを追加するアドレス。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 234 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。この関数は、指定したアドレス
にブレークポイントが既に存在する場合、または指定したアドレスが無効な場所
の場合にエラーとなります。

参照事項 PS3RemoveBreakPoint, PS3RemoveAllBreakPoints, PS3GetBreakPoints

PS3AddHWBreakPoint

プロトタイプ sn_int32 PS3AddHWBreakPoint(


sn_address address,
BOOL bOnRead,
BOOL bOnWrite);

内容 ターゲット ハードウェア ブレークポイントを設定します。

パラメータ この関数のパラメータは以下のとおりです。

address 入力: 追加するハードウェア ブレークポイントのアドレス。

bOnRead 読み込み時のブレークを設定。

bOnWrite 書き込み時のブレークを設定。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3AddressToLabel

プロトタイプ sn_int32 PS3AddressToLabel(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
sn_address address,
char * pLabel,
sn_int32 * pLen);

内容 この関数は、メモリ内の指定アドレスのラベルを取得します。この関数は、
PS3AddressToLine と同様に使用しますが、実行されるプログラムのより論理的
な情報が返されます。たとえばこの情報は、どの関数がコールされたかを確認す
る場合に便利です。指定アドレスにラベルがない場合は、空の文字列が返されま
す。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

address 入力: 参照するアドレス。

pLabel 出力: メモリ内のこのアドレスに関連付けられたラベル。

pLen 出力: pLabel の長さ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3AddressToLine
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 235 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

プロトタイプ sn_int32 PS3AddressToLine(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
sn_address address,
char * pName,
sn_uint32* pNameLen,
sn_uint32 * pLine);

内容 指定したアドレスの行と存在するファイルを判定します。この関数は、スクリプ
トで行のアドレスが明確になっている (レジスタをチェックするなどの方法で)
一方、その詳細が不明な場合に便利です。実行中のスクリプトが大量のファイル
を出力する必要がある場合は、命令のメモリ アドレスより、行番号とファイル
の場所を使用した出力方法がより効率的になります。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

address 入力: 参照するメモリのアドレス。

pName 出力: この行のあるファイル名。これを NULL ポインタとしてパスすることに


より、必要な長さが確定します。

pNameLen 出力: pName 文字列の長さ。

pLine 出力: このアドレスの行番号。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。この関数は、指定されたアド


レスが無効な場合エラーになります。

参照事項 PS3LineToAddress, PS3AddressToLabel

PS3EvaluateExpression

プロトタイプ sn_int32 PS3EvaluateExpression(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
sn_val * pResult,
const char * pszExpression);

内容 この関数では、指定したスレッドのコンテキスト内の式の評価に、デバッガの式
評価機能が使用されます。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

pResult 出力: 表現の評価結果。

pszExpression 入力: 評価する式。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 236 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 SN_VAL

PS3FlushMemoryCache

プロトタイプ sn_int32 PS3FlushMemoryCache(


sn_uint32 uProcessID,
sn_uint64 uThreadID);

内容 指定したスレッドのローカルのメモリ キャッシュがクリアされ、強制的に更新
されます。ローカルに保持されたターゲット メモリのコピーは、スレッドが一
時停止した場合にのみ更新されるため、この機能は便利になります。また、ター
ゲットへの過負担を防止することもできます。ターゲットの現在のメモリ情報が
必要な場合は、このコマンドを使用して内容を強制的に更新してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetBreakPoints

プロトタイプ sn_int32 PS3GetBreakPoints(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
sn_address* pAddress,
sn_uint32* pNumBP);

内容 指定したコンテキストのブレークポイント アドレスに関するレポートを出力し
ます。pAddress は、検出された各ブレークポイントのアドレスを保持できるサ
イズである必要があります。ブレークポイントの数を確定するには、pAddress
を NULL としてパスする必要があります。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

pAddress 出力: ブレークポイント アドレスに含まれる sn_address タイプの配列。

pNumBP 出力: 検出されたブレークポイントの数。

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。pNumBP が NULL の場合、こ


の関数ではエラーが発生します。

参照事項 PS3AddBreakPoint, PS3RemoveAllBreakPoints, PS3RemoveBreakPoint

PS3GetConditionalVariableInfo

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 237 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

プロトタイプ sn_int32 PS3GetConditionalVariableInfo(


sn_uint32 uProcessID,
sn_uint32 uCondVarID,
SNPS3_CONDITIONAL_INFO* pInfo,
sn_uint64* pThreadInfo,
sn_uint32* puBufferSize);

内容 特定の条件変数に関する情報を取得します。使用例については、Sync1-
CondVariable.c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID。

uCondVarID 入力: 条件変数の ID。

pInfo 出力: リクエストされた ID の SNPS3_CONDITIONAL_INFO 構造体。

pThreadInfo 出力: 待機スレッド ID のバッファ。

puBufferSize 出力: pThreadInfo割り当てへのバッファ サイズ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetConditionalVariableList

プロトタイプ sn_int32 PS3GetConditionalVariableList(


sn_uint32 uProcessID,
sn_uint32* puCount,
sn_uint32* pBuffer);

内容 指定されたプロセスに対する全条件変数 ID のリストを取得します。使用例につ
いては、Sync1-CondVariable.c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

puCount 出力: プロセス内で検出された条件変数の数。

pBuffer 出力: 条件変数 ID を保持するバッファ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetCoredumpFilename

プロトタイプ sn_int32 PS3GetCoredumpFilename(


char *pFilename,
sn_int32 uMaxLength);

内容 コア ダンプ ファイルがファイルサーバーのルートに対して保存されている場
合、この関数は完全パスとファイル名を指定のバッファにコピーします
(uMaxLength 文字まで)。

パラメータ この関数のパラメータは以下のとおりです。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 238 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

pFilename 出力: ファイル名を受信するバッファ。

uMaxLength ファイル名バッファのサイズ。これは最大文字数 (ヌル終端文字を含む) を示す


もので、ファイル名バッファにコピーできます。

戻り値 ファイル名がコピーされると非ゼロが返されます。ファイル名が利用できない
など、保存されたコア ダンプ ファイルがない場合、ゼロが返されます。

PS3GetEventQueueInfo

プロトタイプ sn_int32 PS3GetEventQueueInfo(


sn_uint32 uProcessID,
sn_uint32 uEventQueueID,
SNPS3_EVENT_QUEUE_INFO* pInfo,
sn_uint64* pThreadInfo,
sn_uint32* puBufferSize,
SNPS3_SYS_EVENT* pEventQueueEntries,
sn_uint32* puEQBufferSize);

内容 イベント キューに関する情報を取得します。使用例については、Sync2-
EventQueue.cを参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: スレッド ID

uEventQueueID 入力: 条件変数の ID。

pInfo 出力: リクエストされた ID の SNPS3_EVENT_QUEUE_INFO 構造体。

pThreadInfo 出力: 待機スレッド ID のバッファ。

puBufferSize 出力: pThreadInfo 割り当てへのバッファ サイズ。

pEventQueue 出力: SNPS3_SYS_EVENTs のバッファ。


Entries

puEQBufferSize 出力: pEventQueueEntries 割り当てへのバッファ サイズ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetEventQueueList

プロトタイプ sn_int32 PS3GetEventQueueList(


sn_uint32 uProcessID,
sn_uint32* puCount,
sn_uint32* pBuffer);

内容 指定されたプロセスに対する全イベント キュー ID のリストを取得します。使用


例については、Sync2-EventQueue.c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 239 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

puCount 出力: プロセスで検出されたイベント キューの数。

pBuffer 出力: Event Queue ID を保持するバッファ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetLightWeightMutexInfo

プロトタイプ sn_int32 PS3GetLightWeightMutexInfo(


sn_uint32 uProcessID,
sn_uint32 uLWMutexID,
SNPS3_LWMUTEX_INFO* pInfo,
sn_uint64* pThreadInfo,
sn_uint32* puBufferSize);

内容 特定の Light Weight Mutex に関する情報を取得します。使用例については、


Sync3-LWMutex.c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uLWMutexID 入力: Light Weight Mutex の ID。

pInfo 出力: リクエストされた ID の SNPS3_LWMUTEX_INFO 構造体。

pThreadInfo 出力: 待機スレッド ID のバッファ。

puBufferSize 出力: pThreadInfo 割り当てへのバッファ サイズ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetLightWeightMutexList

プロトタイプ sn_int32 PS3GetLightWeightMutexList(


sn_uint32 uProcessID,
sn_uint32* puCount,
sn_uint32* pBuffer);

内容 指定されたプロセスに対し、すべての Light Weight Mutex ID のリストを取得し


ます。使用例については、Sync3-LWMutex.c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

puCount 出力 : プロセスで検出された Light Weight Mutex の数。

pBuffer 出力 : Light Weight Mutex ID を保持するバッファ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetLoadedModuleFilename

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 240 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

プロトタイプ sn_int32 PS3GetLoadedModuleFilename(


char *pFilename, sn_uint32 uMaxLength);

内容 現在のデバッグ セッション中、ターゲット上にロードする最後の SELF モジュ


ールのファイル名を取得します。

パラメータ この関数のパラメータは以下のとおりです。

pFilename 出力: ファイル名を受信するバッファ。

uMaxLength 入力: ファイル名バッファのサイズ。これは最大文字数 (ヌル終端文字を含む)


を示すもので、ファイル名バッファにコピーできます。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。リクエストされていない通知


をキャンセルすると、エラーが発生します。

PS3GetMemory

プロトタイプ sn_int32 PS3GetMemory(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
void * pBuffer,
sn_address address,
sn_uint32 uCount);

内容 この関数は、ターゲットのメモリ エリアをリクエストし、用意されたバッファ
にそれをコピーします。これは、定期的にチェックされるデータのアドレスが既
に判明している場合に便利です。PS3EvaluateExpression を繰り返しコールする
代わりにこの関数を使用することにより、変数を毎回特定する必要がなくなるた
め、時間の節約になります。
詳細は、BasicExamples(a).c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

pBuffer 出力: 指定したメモリ位置のデータを受け取る、サイズが uCount の割り当てら


れたバッファ。

address 入力: 取得するメモリ エリアのアドレス。

uCount 入力: 取得するデータの量 (バイト)。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3SetMemory, PS3EvaluateExpression

PS3GetModuleInfo

プロトタイプ sn_int32 PS3GetModuleInfo(


sn_uint32 uProcessID,
sn_uint32 uModuleID,
SNSPS3MODULEINFO* pModuleInfo,
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 241 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

sn_uint32* pBufferSize
SNPS3PRXSEGMENT* pSegments);

内容 特定モジュール、およびそれに含まれるモジュール セグメントの変数に関する
情報を取得する場合に使用します。セグメント情報で必要となるバッファを確保
するには、pModuleInfo を NULL としてパスし、次に以下のように割り当てを
行います。
pModuleInfo =
(SNPS3_MODULE_INFO*)malloc(sizeof(SNPS3_MODULE_INFO));
pModuleInfo->Segments = (SNPS3PRXSEGMENT*)malloc(pBufferSize);
詳細は、BasicExamples(b).c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uModuleID 入力: モジュール ID

pModuleInfo 出力: モジュールの SNSPS3MODULEINFO

pBufferSize 出力: PRX セグメント バッファのサイズ

pSegments 出力: SNPS3PRXSEGMENT 情報を受信するバッファへのポインタ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetModuleList

プロトタイプ sn_int32 PS3GetModuleList(


sn_uint32 uProcessID,
sn_uint32* pNumModules,
sn_uint32* pModuleIDs);

内容 モジュール ID のリストおよびプロセスに含まれるモジュールの数が出力されま
す。pModuleID で必要となるバッファを確保するには、NULL としてパスし、
pNumModules で返された値を使用してバッファを割り当てます。
詳細は、BasicExamples(b).c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

pNumModules 出力: プロセス内のモジュールの数

pModuleIDs 出力: プロセスのモジュール ID のリスト

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetMutexInfo

プロトタイプ sn_int32 PS3GetMutexInfo(


sn_uint32 uProcessID,
sn_uint32 uMutexID,
SNPS3_MUTEX_INFO* pInfo,

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 242 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

sn_uint64* pThreadInfo,
sn_uint32* puBufferSize);

内容 特定の Mutex に関する情報を取得します。使用例については、Sync4-Mutex.c


を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uMutexID 入力: Mutex の ID

pInfo 出力: リクエストされた ID の SNPS3_MUTEX_INFO 構造体。

pThreadInfo 出力: 待機スレッド ID のバッファ。

puBufferSize 出力: pThreadInfo 割り当てへのバッファ サイズ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetMutexList

プロトタイプ sn_int32 PS3GetMutexList(


sn_uint32 uProcessID,
sn_uint32* puCount,
sn_uint32* pBuffer);

内容 指定されたプロセスに対し、すべての Mutex ID のリストを取得します。使用例


については、Sync4-Mutex.c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

puCount 出力: プロセスで検出された Mutex の数

pBuffer 出力: Mutex ID を保持するバッファ

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetPPUThreadCount

プロトタイプ sn_int32 PS3GetPPUThreadCount(


sn_uint32 uProcessID,
sn_uint32 *puThreadCount);

内容 プロセス内に存在する PPU スレッド数を返します。

パラメータ この関数のパラメータは以下のとおりです。

uProcess ID 入力:プロセス ID。

puThreadCount 出力: PPU スレッドの数。

戻り値 成功時はゼロが、失敗時はゼロ未満が返されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 243 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

PS3GetPPUThreadID

プロトタイプ sn_int32 PS3GetPPUThreadID(


sn_uint32 uProcessID,
sn_uint32 uThreadIndex,
sn_uint64 *puThreadID);

内容 プロセス内で指定されたインデックスにあるスレッドの ID を返します。
-1 がインデックスに対して返された場合、アクティブなスレッドの ID (プロセ
ス ビューで太字で表示されているもの) が返されます。

パラメータ この関数のパラメータは以下のとおりです。

uProcess ID 入力:プロセス ID です。

uThreadIndex 入力:プロセス内のスレッドのインデックスです。アクティブなスレッドを取得
するときは -1 を渡します。

puThreadID 出力:スレッド ID です。

戻り値 成功時はゼロが、失敗時はゼロ未満が返されます。

PS3GetProcessID

プロトタイプ sn_int32 PS3GetProcessID(


sn_uint32 *puProcessID);

内容 プロセス ID を返します。

パラメータ この関数のパラメータは以下のとおりです。

puProcessID 出力:プロセス ID です。

戻り値 成功時はゼロが、失敗時はゼロ未満が返されます。

PS3GetProcessInfo

プロトタイプ sn_int32 PS3GetProcessInfo(


sn_uint32 uProcessID,
SNPS3_PROCESS_INFO* pProcessInfo,
sn_uint32* pBufferSize,
sn_uint64* pThreadIDs);

内容 SNPS3_PROCESS_INFO およびプロセス内に含まれるスレッド ID のリストを取


得するために使用されます。使用例については、BasicExamples(a).c を参照して
ください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

pProcessInfo 出力: プロセス情報を保持するバッファ

pBufferSize 出力: pThreadIDs バッファ サイズ

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 244 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

pThreadIDs 出力: スレッド ID へのポインタ

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetRawSPUInfo

プロトタイプ sn_int32 PS3GetRawSPUInfo(


sn_uint32 uProcessID,
sn_uint64 uRawSPUID,
SNPS3_RAW_SPU_INFO* pRawSPUInfo,
sn_uint32* pBufferSize);

内容 uRawSPUID で指定した raw SPU に関する情報を出力します。必要となるバッ


ファを確保するには、uRawSPUID を NULL としてパスします。これにより、
ファイル名と名前文字列に対する変数の長さが確保されます。
詳細は、BasicExamples(a).c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uRawSPUID 入力: 返される情報の対象となる raw SPU ID

pRawSPUInfo 出力: 情報構造体に対するポインタ (および名前文字列を取得するために割り当


てられるメモリ)

pBufferSize 出力: pRawSPUInfo で必要となるバッファの合計サイズ

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetReadWriteInfo

プロトタイプ sn_int32 PS3GetReadWriteInfo(


sn_uint32 uProcessID,
sn_uint32 uRWLockID,
SNPS3_RWLOCK_INFO* pInfo,
sn_uint64* pThreadInfo,
sn_uint32* puBufferSize);

内容 特定のリーダ/ライタ ロックに関する情報を取得します。使用例については、
Sync5-RWlock.c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uRWLockID 入力: リーダ/ライタ ロックの ID。

pInfo 出力: リクエストされた ID の SNPS3_RWLOCK_INFO 構造体。

pThreadInfo 出力: 待機スレッド IDのバッファ。

puBufferSize 出力: pThreadInfo 割り当てへのバッファ サイズ。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 245 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetReadWriteList

プロトタイプ sn_int32 PS3GetReadWriteList(


sn_uint32 uProcessID,
sn_uint32* puCount,
sn_uint32* pBuffer);

内容 指定されたプロセスの全リーダ/ライタ ロック IDのリストを取得します。使用


例については、Sync5-RWlock.c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

puCount 出力: プロセスで検出されたリーダ/ライタ ロック ID の数。

pBuffer 出力: リーダ/ライタ ロック ID を保持するバッファ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetSemaphoreInfo

プロトタイプ sn_int32 PS3GetSemaphoreInfo(


sn_uint32 uProcessID,
sn_uint32 uSemaID,
SNPS3_SEMAPHORE_INFO* pInfo,
sn_uint64* pThreadInfo,
sn_uint32* puBufferSize);

内容 特定のセマフォに関する情報を取得します。使用例については、Sync6-Sema.c
を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uSemaID 入力: セマフォの ID。

pInfo 出力: リクエストされた ID の SNPS3_SEMAPHORE_INFO 構造体。

pThreadInfo 出力: 待機スレッド ID のバッファ。

puBufferSize 出力: pThreadInfo 割り当てへのバッファ サイズ。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetSemaphoreList

プロトタイプ sn_int32 PS3GetSemaphoreList(


sn_uint32 uProcessID,
sn_uint32* puCount,
sn_uint32* pBuffer);

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 246 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

内容 指定されたプロセスの全セマフォ ID のリストを取得します。使用例について
は、Sync6-Sema.c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

puCount 出力: プロセスで検出されたセマフォの数

pBuffer 出力: セマフォ ID を保持するバッファ

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetSPUThreadGroupInfo

プロトタイプ sn_int32 PS3GetModuleList(


sn_uint32 uProcessID,
sn_uint64 uThrdGrpID,
SNSPS3_SPU_THREADGROUP_INFO* pThrdGrpInfo,
sn_uint32* pBufferSize);

内容 uThrdGrpID で指定したスレッド グループの情報を取得します。必要なバッフ


ァを確保するには、pThrdGrpInfo を NULL としてパスします。これにより、以
下で表示されるグループ名の変数の長さが確保されます。
printf("\n\tName:%s", ((char*) pThrdGrpInfo +
sizeof(SNPS3_SPU_THREADGROUP_INFO)));
詳細は、BasicExamples(a).c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThrdGrpID 入力: 情報を取得するスレッド グループのID

pThrdGrpInfo 出力: 情報構造体に対するポインタ (および名前文字列を取得するために割り当


てられるメモリ)

pBufferSize 出力: pThrdGrpInfo で必要なバッファの合計サイズ

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetThreadInfo

プロトタイプ sn_int32 PS3GetThreadInfo(


sn_uint32 ProcessID,
sn_uint64 uThreadID,
void* pThreadInfo,
sn_uint32* pBufferSize;)

内容 uThreadID で指定したスレッドの情報を取得します。必要なバッファを確保す
るには、pThreadInfo を NULL としてパスします。これにより、名前文字列の
変数の長さが確保されます。スレッド ID が SPU スレッドのものか PPU のもの
かが判明している場合は、PS3GetProcessInfo を最初にコールし、適切な情報構
造体が使用されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 247 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

詳細は、BasicExamples(a).c の「GetPPUThreadInfo」関数および
「GetSPUThreadInfo」関数を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: 情報を取得するスレッドの ID

pThreadInfo 出力: 情報構造体に対するポインタ (および名前文字列を取得するために割り当


てられるメモリ)

pBufferSize 出力: pThreadInfo で必要なバッファの合計サイズ

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3GetThreadList

プロトタイプ sn_int32 PS3GetThreadList(


sn_uint32 uProcessID,
sn_uint32* pNumPPUThrds,
sn_uint64* pPPUThrdIDs,
sn_uint32* pNumSPUThrds,
sn_uint64* pSPUThrdIDs);

内容 プロセスに含まれる PPU と SPU のスレッド ID のリスト、および各スレッドの


数が返されます。pPPUThrdIDs と pSPUThrdIDs で必要なバッファ サイズを確
保するには、これらを NULL としてパスし、pNumPPUThrds と
pNumSPUThrds で返された値をそれぞれ使用してバッファを割り当てます。
詳細は、BasicExamples(b).c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

出力: プロセス内の PPU スレッドの数


pNumPPUThrds

pPPUThrdIDs 出力: PPU スレッド ID

出力: プロセス内の SPU スレッドの数


pNumSPUThrds

pSPUThrdIDs 出力: SPU スレッド ID

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3LineToAddress

プロトタイプ sn_int32 PS3LineToAddress(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
sn_address * pAddress,
char * pName,
sn_uint32 uLine);

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 248 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

内容 指定したファイルと行のメモリ アドレスを参照します。これにより、その行番
号に関する情報メモリの場所とファイルの場所が検出されます。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

pAddress 出力: 参照対象の指定行/ファイルのメモリ内のアドレス

pName 入力: この行のあるファイル名

uLine 入力: 参照する行番号

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。この関数は、指定した行番号


やファイル名が無効な場合エラーになります。

参照事項 PS3AddressToLine, PS3AddressToLabel

PS3LoadBin

プロトタイプ sn_int32 PS3LoadBin(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
char * pszFilename,
sn_address address);

内容 この関数は、バイナリ ファイルの内容を、ターゲット上のメモリに直接ロード
します。この関数では、ファイル全体がロードされるため、サイズ値は渡されま
せん。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

pszFilename 入力: メモリにロードするファイルの名前

address 入力: ファイルのロード先のアドレス

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3SaveBin

PS3LoadSymbols

プロトタイプ sn_int32 PS3LoadSymbols(


const char * pszElfFileName);

内容 この関数は、指定された ELF ファイルからシンボルをロードします。

パラメータ この関数のパラメータは以下のとおりです。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 249 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

入力: ELF ファイルの名前。入力されたファイル名は、現在の作業ディレクト


pszElfFilenNam リの完全パスまたは相対パスを使用します。
e

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3PrintStaticAnalysis

プロトタイプ sn_int32 PS3PrintStaticAnalysis(


FILE* fp);

内容 この関数は、静的な分析データをタブ区切り形式で指定ファイルに出力しま
す。

パラメータ この関数のパラメータは以下のとおりです。

fp 入力: 書き込み先のファイル。

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。

PS3ProcessLoad

プロトタイプ sn_int32 PS3ProcessLoad(


const char* pszFileName,
const char* pszCmdLine,
sn_uint32 uPriority,
sn_uint32* pProcessID,
sn_uint64* pThreadID);

内容 ここで使用するファイル名には、現在の作業ディレクトリの完全パスまたは相対
パスを使用します。
詳細は、BasicExamples(b).c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

pszFileName 入力: ロードする ELF のファイル名

pszCmdLine 入力: コマンドライン パラメータ

uPriority 入力: ロードのプロセス優先度

pProcessID 出力: プロセス ID

pThreadID 出力: スレッド ID

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

PS3ProcessStart

プロトタイプ sn_int32 PS3ProcessStart(


sn_uint32 uProcessID);

内容 現在の位置からプロセスの実行を再開します。これが返された場合は、プロセス
が実行していることを意味します。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 250 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3ThreadStart, PS3StartAllProcesses, PS3ThreadRunToAddress,


PS3ThreadIsRunning

PS3ProcessStop

プロトタイプ sn_int32 PS3ProcessStop(


sn_uint32 uProcessID);

内容 プロセスの実行を停止します。これは、現在のアドレスですべてのプロセス ス
レッドがブレークポイントをヒットしたように機能します。停止した位置から
は、PS3ProcessStart コマンドで実行を再開できます。PS3ProcessStop コマンド
が返された場合でも、すべてのスレッドが実際に停止したとは限りません。スク
リプトで完全停止が必要な場合は、スレッド停止をチェックする通知を使用して
ください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3ThreadStop, PS3StopAllProcesses , PS3ThreadIsRunning

PS3RemoveAllBreakPoints

プロトタイプ sn_int32 PS3RemoveAllBreakPoints(


sn_uint32 uProcessID,
sn_uint64 uThreadID);

内容 設定されているすべてのブレークポイントを削除します。PS3AddBreakPoint で
追加したブレークポイントと同様に、手動で追加したブレークポイントも、この
関数の対象となります。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3AddBreakPoint, PS3RemoveBreakPoint, PS3GetBreakPoints

PS3RemoveBreakPoint

プロトタイプ sn_int32 PS3RemoveBreakPoint(


sn_uint32 uProcessID,
sn_uint64 uThreadID,

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 251 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

sn_address address);

内容 指定した場所のブレークポイントを削除します。PS3AddBreakPoint で追加した
ブレークポイントと同様に、手動で追加したブレークポイントも、この関数の対
象となります。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

address 入力: ブレークポイントを削除するアドレス。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。この関数は、指定した場所に


ブレークポイントが存在しない場合、エラーとなります。

参照事項 PS3AddBreakPoint, PS3RemoveAllBreakPoints, PS3GetBreakPoints

PS3SaveBin

プロトタイプ sn_int32 PS3SaveBin(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
char * pszFilename,
sn_address address,
sn_uint32 uCount);

内容 この関数は、メモリ エリアをバイナリ ファイルに保存します。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

pszFilename 入力: メモリをコピーする先のファイル名

address 入力: データを取得するアドレス

uCount 入力: 保存するメモリ ブロックのサイズ (バイト)

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3LoadBin

PS3SetMemory

プロトタイプ sn_int32 PS3SetMemory(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
void * pBuffer,
sn_address address,
sn_uint32 uCount);

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 252 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

内容 この関数は、ターゲット上のメモリ エリアを設定します。
PS3EvaluateExpression は変数の設定にも使用できますが、その値が何度も変化
する場合は、いったんアドレスを取得した後にこの関数を使用してデータを設定
すると時間を短縮できます。
詳細は、BasicExamples(a).c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

pBuffer 入力: メモリに書き込むデータを含む、サイズが uCount の割り当て済みバッ


ファ

address 入力: 設定するメモリ エリアのアドレス

uCount 入力: 設定するメモリの量 (バイト)

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3GetMemory, PS3EvaluateExpression

PS3StartAllProcesses

プロトタイプ sn_int32 PS3StartAllProcesses(void);

内容 すべてのユーザー プロセスが、現在の位置から実行を再開します。これが返さ
れた場合は、プロセスが実行していることを意味します。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3ThreadStart, PS3StartAllProcesses, PS3ThreadRunToAddress,


PS3ThreadIsRunning

PS3StopAllProcesses

プロトタイプ sn_int32 PS3StopAllProcesses(void);

内容 すべてのプロセスの実行を停止します。これは、現在のアドレスですべてのプロ
セス スレッドがブレークポイントをヒットしたように機能します。停止した位
置からは、PS3StopAllProcesses コマンドで実行を再開できます。
PS3StopAllProcesses コマンドが返された場合でも、すべてのスレッドが実際に
停止したとは限りません。スクリプトで完全停止が必要な場合は、スレッド停止
をチェックする通知を使用してください。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3ThreadStop, PS3ProcessStop , PS3ThreadIsRunning

PS3ThreadGetCallStack

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 253 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

プロトタイプ sn_int32 PS3ThreadGetCallStack(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
SNPS3_CALLSTACK_INFO* pCallStack,
sn_uint32* pNumLevels);

内容 指定したスレッドの各コールスタック レベルにおける
SNPS3_CALLSTACK_INFO が返されます。コールスタックの数を確定するに
は、pCallStack を NULL としてパスし、次に pNumLevels を使用して
pCallStack のメモリを十分に確保します。
詳細は、BasicExamples(b).c を参照してください。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

pCallStack 出力: 現在のコールスタックにおける SNPS3_CALLSTACK_INFO 構造体の配


pNumLevels 出力: 現在のコールスタックのレベルの数

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。

PS3ThreadIsRunning

プロトタイプ sn_int32 PS3ThreadIsRunning(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
BOOL* bIsRuning);

内容 スレッドが実行中か停止中かを判定します。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

bIsRunning 出力: 実行中の場合は TRUE、停止中の場合は FALSE

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3ThreadStart, PS3ThreadStop.

PS3ThreadRunToAddress

プロトタイプ sn_int32 PS3ThreadRunToAddress(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
sn_address address);

内容 指定したアドレスまでスレッドの実行を継続します。指定したアドレスに到達し
た場合は、ブレークポイントに到達した場合と同様に処理されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 254 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

PS3ThreadStart に対するコールでは、この位置から実行が再開されます。
PS3ThreadRunToAddress をコールしてもスクリプト コードの実行はブロックさ
れません。実行をブロックする必要がある場合は、通知機能を使用して
NT_THREAD_STOP 通知を登録してください。その後、現在のアドレスは、指
定したアドレスと比較することにより、到達したかどうかをチェックすることが
できます。これにより、指定アドレスに到達しない場合のタイムアウト通知を設
定することもできます。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

address 入力: コードが到達した際に停止するアドレス

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3ThreadStart, PS3ThreadRunToAddress, PS3ThreadIsRunning

PS3ThreadStart

プロトタイプ sn_int32 PS3ThreadStart(


sn_uint32 uProcessID,
sn_uint64 uThreadID);

内容 現在の位置からスレッドの実行が再開します。これが返された場合は、スレッド
が実行していることを意味します。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3ProcessStart, PS3StartAllProcesses, PS3ThreadRunToAddress,


PS3ThreadIsRunning

PS3ThreadStep

プロトタイプ sn_int32 PS3ThreadStep(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
sn_uint32 uFlags);

内容 この関数は、スレッドが一時停止している場合のみ利用できます。このコマンド
をコールすると、スレッドがコマンド単位でステップ実行します。関数に到達す
ると、その関数もステップ実行されます。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 255 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

uThreadID 入力: スレッド ID

uFlags 入力: 使用するステップ モード (以下から選択)


SM_DISASSEMBLY 逆アセンブリ命令をステップ実行
SM_SOURCE ソース命令をステップ実行

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3ThreadRunToAddress, PS3ThreadsRunning, PS3ThreadStepOver,


PS3ThreadStepOut

PS3ThreadStepOut

プロトタイプ sn_int32 PS3ThreadStepOut(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
sn_uint32 uFlags);

内容 この関数は、スレッドが一時停止している場合のみ利用できます。このコマンド
をコールすると、スレッドが一時停止している関数からステップ アウトしま
す。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

uFlags 入力: 使用するステップ モード (以下から選択)


SM_DISASSEMBLY 逆アセンブリ命令をステップ実行
SM_SOURCE ソース命令をステップ実行

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3ThreadAddBreakPoint, PS3ThreadRunToAddress, PS3ThreadIsRunning,


PS3ThreadStep, PS3ThreadStepOver

PS3ThreadStepOver

プロトタイプ sn_int32 PS3ThreadStepOver(


sn_uint32 uProcessID,
sn_uint64 uThreadID,
sn_uint32 uFlags);

内容 この関数は、スレッドが一時停止している場合のみ利用できます。このコマンド
をコールすると、コマンド単位のステップ実行が開始します。関数に到達する
と、その関数のコンテンツは実行しますが、ステップ実行はしません。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 256 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

uFlags 入力: 使用するステップ モード (以下から選択)


SM_DISASSEMBLY 逆アセンブリ命令をステップ実行
SM_SOURCE ソース命令をステップ実行

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3ThreadAddBreakPoint, PS3ThreadRunToAddress, PS3ThreadIsRunning,


PS3ThreadStep, PS3ThreadStepOut

PS3ThreadStop

プロトタイプ sn_int32 PS3ThreadStop(


sn_uint32 uProcessID,
sn_uint64 uThreadID);

内容 ターゲット デバイス上のスレッドの実行を停止します。これは、現在のアドレ
スでスレッドがブレークポイントをヒットしたように機能します。停止した位置
からは、PS3ThreadStart コマンドで実行を再開できます。PS3ThreadStop コマ
ンドが返された場合でも、スレッドが実際に停止したとは限りません。スクリプ
トで完全停止が必要な場合は、スレッド停止をチェックする通知を使用してくだ
さい。

パラメータ この関数のパラメータは以下のとおりです。

uProcessID 入力: プロセス ID

uThreadID 入力: スレッド ID

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 PS3ProcessStop, PS3StopAllProcesses , PS3ThreadIsRunning

PS3TriggerCoreDump

プロトタイプ sn_int32 PS3TriggerCoreDump(void);

内容 ターゲット上でコア ダンプをトリガーします。

パラメータ なし。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。リクエストされていない通知


をキャンセルすると、エラーが発生します。

PS3UpdateKernelInfo

プロトタイプ sn_int32 PS3UpdateKernelInfo(void);

内容 この関数は、スクリプティング エンジンで使用可能なカーネル同期基本命令情
報を更新するために使用されます。これは、カーネル List/Info 関数をコールす
る前に実行する必要があります。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 257 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

PS3UpdateTargetInfo

プロトタイプ sn_int32 PS3UpdateTargetInfo(void);

内容 この関数は、スクリプティング エンジンで使用可能なプロセス情報を強制的に
更新するために使用されます。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

RegisterTypeDisplayHandler

プロトタイプ void RegisterTypeDisplayHandler(


char * pszFormat);

内容 この関数は、カスタムのタイプ表示ハンドラ (Type Display Handler) の登録に


使用します。登録したハンドラは、ウォッチ、ローカル、オートの各ウィンドウ
でタイプを表示する際に使用されます。現在は、ハンドラで展開文字列またはコ
ールバック関数を使用できます。その時点でのイミディエイト モードのスクリ
プトは、コールバック コードの実行に使用でき、スクリプト (コールバックと文
字列展開の両方) が閉じると、すべてのハンドラが登録解除されます。

パラメータ この関数のパラメータは以下のとおりです。

pszFormat 入力: この文字列は、表示されるタイプ、およびそれが展開される方法を示し


ます。この文字列の形式に関する詳細は、「タイプ表示の変更」を参照してくだ
さい。

戻り値 なし

RemoveMenuItem

プロトタイプ sn_uint32 RemoveMenuItem(


sn_uint32 uMenuId);

内容 この関数は、AddMenuItem を使用して追加したメニュー項目を削除します。こ
こでは、削除対象のメニュー項目を表す 1 つの引数が渡されます。この関数は、
スクリプトが最後まで到達して終了する場合にコールされます。スクリプトが外
部から中断された場合、メニュー項目は自動的に削除されます。デバッガに最初
から存在するメニュー項目 ([kill script] など) を削除することはできません。こ
の関数は、[Command] ウィンドウからはコールできません。
メニュー項目を削除した場合、関連付けられていたメニュー ID は、別の新しい
メニュー項目で使用可能になります。このため、メニュー項目を何度も追加/削
除する場合は、関連のない新しいメニューが選択された際に、古い関数がコール
されないようにする必要があります。
スクリプト ビューで、追加していないメニュー項目を削除すると、エラーが発
生します。これは、スクリプトがメニュー項目を削除し、そのメニュー項目に依
存する別のスクリプトをブレークしてしまうことを回避するためのものです。

パラメータ この関数のパラメータは以下のとおりです。

uMenuId 入力: 削除するカスタムのメニュー項目。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 258 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

参照事項 AddMenuItem、RequestNotification、GetNotification、Peek Notification

RequestNotification

プロトタイプ sn_int32 RequestNotification(


sn_uint32 eNotifyType);

内容 この関数では、特定タイプの通知がコールされた際に GetNotification に渡され


るようにリクエストします。このコマンドを使用するとプログラムは、キー押
下、プログラム開始/停止コール、タイマー イベントなど、複数のイベントの通
知を出力できるようになります。

パラメータ この関数のパラメータは以下のとおりです。

eNotifyType 入力: 通知を出力する通知タイプ。以下の通知が対象となります。


NT_ANY、NT_THREAD_STOP、NT_BREAK、NT_THREAD_RUN、
NT_TIMER、NT_KEYDOWN、NT_KEYUP、NT_CUSTMENU、NT_DEBUG、
NT_TTY

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。既にリクエストされている通知
をリクエストした場合はエラーが発生します。

参照事項 CancelNotification、CheckNotification、GetNotification、PeekNotification

ScriptCloseNamedPipe

プロトタイプ sn_int32 ScriptCloseNamedPipe(


void* hPipe
sn_dword* pErrorCode);

内容 この関数は、Windows CloseHandle() 関数へのラッパーを提供します。

パラメータ この関数の hPipe パラメータは、Windows CloseHandle() 関数に渡されます。


さらに以下のパラメータもあります:

pErrorCode 出力:GetLastError() で取得された Windows エラー コード。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

ScriptCloseAllOpenNamedPipes

プロトタイプ sn_int32 ScriptCloseAllOpenNamedPipes(void);

内容 ScriptCreateFile() または ScriptCreateNamedPipe() によってスクリプト ビュー


で開かれた、すべての指定パイプ処理を閉じます。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

ScriptConnectNamedPipe

プロトタイプ sn_int32 ScriptConnectNamedPipe(


void* hPipe
sn_dword* pErrorCode);

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 259 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

内容 この関数は、Windows ConnectNamedPipe() 関数へのラッパーを提供します。


lpOverlapped は NULL にセットされます。

パラメータ この関数の hPipe パラメータは、Windows ConnectNamedPipe() 関数に渡され


ます。さらに以下のパラメータもあります:

pErrorCode 出力:GetLastError() で取得された Windows エラー コード。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

ScriptCreateFile

プロトタイプ sn_int32 ScriptCreateFile(


char* pszName,
sn_dword dwDesiredAccess,
sn_dword dwCreationDisposition,
void** pNamePipe,
sn_dword* pErrorCode);

内容 この関数は、Windows CreateFile() 関数へのラッパーを提供します。


dwShareMode は 0 にセットされます。 lpSecurityAttributes は NULL にセット
されます。 dwFlagsAndAttributes は 0 にセットされます。 hTemplateFile は 0
にセットされます。

パラメータ この関数のパラメータは、Windows CreateFile() 関数に渡されます。さらに以下


のパラメータもあります:

dwDesired 以下の定義は、dwDesiredAccess パラメータとして使用できます。


Access #define GENERIC_READ (0x80000000L)
#define GENERIC_WRITE (0x40000000L)
#define FILE_CREATE_PIPE_INSTANCE (0x0004)
メモ:GENERIC_READ と GENERIC_WRITE ステートは共に、スクリプテ
ィング エンジンによって自動的に設定されるため、パイプ処理の待機ステ
ータスを確認でき、PIPE_NOWAIT に変更することもできます。

dwCreate 以下の定義は、dwCreateDisposition パラメータとして使用できます。


Disposition #define CREATE_NEW (1)
#define CREATE_ALWAYS (2)
#define OPEN_EXISTING (3)
#define OPEN_ALWAYS (4)
#define TRUNCATE_EXISTING (5)

pErrorCode 出力:GetLastError() で取得された Windows エラー コード。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

ScriptCreateNamedPipe

プロトタイプ sn_int32 ScriptCreateNamedPipe(


char* pszName,
sn_dword dwOpenMode,
sn_dword dwPipeMode,
sn_dword dwMaxInstances,
sn_dword dwOutBufferSize,

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 260 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

sn_dword dwInBufferSize,
sn_dword dwDefaultTimeOut,
void** phPipe,
sn_dword* pErrorCode);

内容 この関数は、Windows CreateNamedPipe() 関数へのラッパーを提供します。


lpSecurityAttributes は NULL にセットされます。

パラメータ この関数のパラメータは、Windows CreateNamedPipe() 関数に渡されます。さ


らに以下のパラメータもあります:

dwOpenMode 以下の定義は、dwOpenMode パラメータとして使用できます。


#define PIPE_ACCESS_INBOUND (1)
#define PIPE_ACCESS_OUTBOUND (2)
#define PIPE_ACCESS_DUPLEX (3)
#define FILE_FLAG_FIRST_PIPE_INSTANCE (0x00080000)
#define FILE_FLAG_WRITE_THROUGH (0x80000000)

dwPipeMode 以下の定義は、dwPipeMode パラメータとして使用できます。


#define PIPE_NOWAIT (1)
#define PIPE_READMODE_BYTE (0)
#define PIPE_READMODE_MESSAGE (2)
#define PIPE_TYPE_BYTE (0)
#define PIPE_TYPE_MESSAGE (4)
メモ:読み込みや書込みにおけるストールがデバッガ UI のハングアップ原
因となるため、デバッガ スクリプティングで、PIPE_NOWAIT が設定され
る必要があることに十分注意してください。このため NOWAIT ステートは
、渡されるか否かに関係なく、ScriptCreateNamedPipe() へのコールにおい
て設定されます。

phPipe 出力:指定されたパイプ処理へのポインタ。

pErrorCode 出力:GetLastError() で取得された Windows エラー コード。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

ScriptDisconnectNamedPipe

プロトタイプ sn_int32 ScriptDisconnectNamedPipe(


void* hPipe
sn_dword* pErrorCode);

内容 この関数は、Windows DisconnectNamedPipe() 関数へのラッパーを提供しま


す。

パラメータ この関数の hPipe パラメータは、Windows DisconnectNamedPipe() 関数に渡さ


れます。さらに以下のパラメータもあります:

pErrorCode 出力:GetLastError() で取得された Windows エラー コード。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

ScriptExecute

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 261 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

プロトタイプ sn_int32 ScriptExecute(


char* pszOperation,
char* pszCommand,
char* pszParams,
char* pszDirectory,
sn_int32 nShowCommand);

内容 以下を実行します。
ShellExecute(NULL, "open", pszCommand, pParams, "", SW_SHOW);
これは、各種の目的に使用することができます。たとえば、ターゲットの予期し
ない停止の後に、解析した TTY 出力を含む電子メールを自動的に送信すること
や、Tuner の実行などへの利用が可能です。
SN_FAILED マクロおよび GetLastErrorString() を使うと、ScriptExecute の結果
をテストしてエラー文字列が特定できます。

パラメータ この関数のパラメータは、Windows ShellExecute() 関数に渡されます。さらに


以下のパラメータもあります:

以下の定義は、nShowCommand パラメータとして使用することのできるもので
nShowComman す。
d #define SW_HIDE (0)
#define SW_SHOWNORMAL (1)
#define SW_NORMAL (1)
#define SW_SHOWMINIMIZED (2)
#define SW_SHOWMAXIMIZED (3)
#define SW_MAXIMIZE (3)
#define SW_SHOWNOACTIVATE (4)
#define SW_SHOW (5)
#define SW_MINIMIZE (6)
#define SW_SHOWMINNOACTIVE (7)
#define SW_SHOWNA (8)
#define SW_RESTORE (9)
#define SW_SHOWDEFAULT (10)
#define SW_FORCEMINIMIZE (11)
#define SW_MAX (11)

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

ScriptReadFile

プロトタイプ sn_int32 ScriptReadFile(


void* hPipe,
void* pBuffer,
sn_dword nNumberOfBytesToRead,
sn_dword* pNumberOfBytesRead,
sn_dword* pErrorCode);

内容 この関数は、Windows ReadFile() 関数へのラッパーを提供します。


lpOverlapped は NULL にセットされます。

パラメータ この関数のパラメータは、Windows ReadFile() 関数に渡されます。さらに以下


のパラメータもあります:

pErrorCode 出力:GetLastError() で取得された Windows エラー コード。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 262 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

ScriptWriteFile

プロトタイプ sn_int32 ScriptWriteFile(


void* hPipe,
void* pBuffer,
sn_dword nNumberOfBytesToWrite,
sn_dword* pNumberOfBytesWritten,
sn_dword* pErrorCode);

内容 この関数は、Windows WriteFile() 関数へのラッパーを提供します。


lpOverlapped は NULL にセットされます。

パラメータ この関数のパラメータは、Windows WriteFile() 関数に渡されます。さらに以下


のパラメータもあります:

pErrorCode 出力:GetLastError() で取得された Windows エラー コード。

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。

SetDisplayHandlerTimeout

プロトタイプ sn_int32 SetDisplayHandlerTimeout (sn_uint32 uTimeout);

内容 autoexec.eic スクリプトに対してこの関数を使うと、タイプ ディスプレイ コー


ルバックのタイムアウト期間が変更できます。
タイムアウトは数千ものスクリプト操作で測定されており、デフォルトは 1000
です。

パラメータ この関数のパラメータは以下のとおりです。

uTimeout 入力:タイプ ディスプレイ コールバックのタイムアウト期間。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

SetTimerInterval

プロトタイプ sn_int32 SetTimerInterval(sn_uint32 uInterval);

内容 この関数は、タイマー通知の出力頻度の設定に使用します。その後、
GetNotification が取得できるように、通知をリクエストする必要があります。

パラメータ この関数のパラメータは以下のとおりです。

uInterval 入力: 各通知の間の時間。

戻り値 成功時 はゼロ、失敗時 はゼロ未満が返されます。

参照事項 RequestNotification、CancelNotification、GetNotification

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 263 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

sn_notify

構文 typedef struct {
sn_uint32 eNotifyType,
void *pParam1,
void *pParam2 } sn_notify;

内容 GetNotification からタイプを戻します。

メンバ eNotifyType には、以下のいずれかの値を使用できます。


NT_ANY, NT_THREAD_STOP, NT_BREAK, NT_THREAD_RUN, NT_TIMER,
NT_KEYDOWN, NT_KEYUP, NT_CUSTMENU, NT_DEBUG, NT_TTY
pParam1、pParam2 は、通知タイプに依存します。詳細は、「通知の使用方法」
を参照してください。

参照事項 GetNotification

SN_VAL

構文 typedef enum {
snval_none,
snval_int8,
snval_uint8,
snval_int16,
snval_uint16,
snval_int32,
snval_uint32,
snval_int64,
snval_uint64,
snval_int128,
snval_uint128,
snval_f32,
snval_f64,
snval_address } sn_valtype;
typedef union {
sn_int8 i8;
sn_uint8 u8;
sn_int16 i16;
sn_uint16 u16;
sn_int32 i32;
sn_uint32 u32;
sn_int64 i64;
sn_uint64 u64;
sn_int128 i128;
sn_uint128 u128;
sn_f32 f32;
sn_f64 f64;
sn_address Address;} sn_data;
typedef struct {
sn_valtype type;
sn_data val; } sn_val;

内容 SN_VAL タイプは、PS3EvaluateExpression からの出力パラメータで、これには


式評価結果に関連するタイプとデータが含まれます。

参照事項 PS3EvaluateExpression

SNPS3_CALLSTACK_INFO

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 264 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

構文 typedef struct{
char pszReturnType[32];
char pszProtoType[128];
sn_uint64 uAddress; } SNPS3_CALLSTACK_INFO;

内容 この構造体には、コールスタックのエントリを定義するパラメータが含まれま
す。これは、特定スレッドのコールスタックに関する情報を取得する際に
SNPS3ThreadCallStackInfo 関数で使用します。

参照事項 SNPS3ThreadCallStackInfo

SNPS3_COND_ATTR

構文 typedef struct SNPS3_COND_ATTR {


sn_uint32 uAttrPshared;
sn_uint64 uKey;
sn_uint32 uFlags;
char aName[8];} SNPS3_COND_ATTR;

SNPS3_CONDITIONAL_INFO

構文 typedef struct SNPS3_CONDITIONAL_INFO{


sn_uint32 uCondID;
SNPS3_COND_ATTR Attribute;
sn_uint32 uMutexID;
sn_uint32 uWaitThreadsNum;
sn_uint32 uWaitAllThreadsNum;
sn_uint64* pWaitThreadIDs;} SNPS3_CONDITIONAL_INFO;

SNPS3_EVENT_QUEUE_ATTR

構文 typedef struct SNPS3_EVENT_QUEUE_ATTR {


sn_uint32 uAttrProtocol;
sn_uint32 uType;
char aName[8];} SNPS3_EVENT_QUEUE_ATTR;

SNPS3_EVENT_QUEUE_INFO

構文 typedef struct SNPS3_EVENT_QUEUE_INFO{


sn_uint32 uEventQueueID;
SNPS3_EVENT_QUEUE_ATTR Attribute;
sn_uint64 uKey;
sn_uint32 uQueueSize;
sn_uint32 uWaitThreadsNum;
sn_uint32 uWaitAllThreadsNum;
sn_uint32 uReadableEqueueNum;
sn_uint32 uReadableAllEqueueNum;
sn_uint64* pWaitThreadIDs;
SNPS3_SYS_EVENT* pEventQueueEntries; } SNPS3_EVENT_QUEUE_INFO;

SNPS3_LWMUTEX_ATTR

構文 typedef struct SNPS3_LWMUTEX_ATTR{


sn_uint32 uAttrProtocol;
sn_uint32 uAttrRecursive;
char aName[8];} SNPS3_LWMUTEX_ATTR;

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 265 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

SNPS3_LWMUTEX_INFO

構文 typedef struct SNPS3_LWMUTEX_INFO{


sn_uint32 uLWMutexID;
SNPS3_LWMUTEX_ATTR Attribute;
sn_uint64 uOwnerThreadID;
sn_uint32 uLockCounter;
sn_uint32 uWaitThreadsNum;
sn_uint32 uWaitAllThreadsNum;
sn_uint64* pWaitThreadIDs;} SNPS3_LWMUTEX_INFO;

SNPS3_MODULE_INFO

構文 typedef struct SNPS3MODULEINFO_HDR {


char aName[30];
char aVersion[2];
sn_uint32 uAttribute;
sn_uint32 uStartEntry;
sn_uint32 uStopEntry;
char aElfName[512];
sn_uint32 uNumSegments; } SNPS3MODULEINFO_HDR;
typedef struct {
sn_uint64 uBase;
sn_uint64 uFileSize;
sn_uint64 uMemSize;
sn_uint64 uIndex;
sn_uint64 uElfType; } SNPS3PRXSEGMENT;
typedef struct{
SNPS3MODULEINFO_HDR Hdr;
SNPS3PRXSEGMENT Segments[]; } SNPS3_MODULE_INFO;

内容 この構造体には、モジュールを定義するパラメータが含まれます。これは、特定
プロセスの特定モジュールに関する情報を取得する際に SNPS3GetModuleInfo 関
数で使用します。

参照事項 SNPS3GetModuleInfo, SNPS3GetModuleList

SNPS3_MUTEX_ATTR

構文 typedef struct SNPS3_MUTEX_ATTR{


sn_uint32 uAttrProtocol;
sn_uint32 uAttrRecursive;
sn_uint32 uAttrPshared;
sn_uint32 uAttrAdaptive;
sn_uint64 uKey;
sn_uint32 uFlags; char aName[8];} SNPS3_MUTEX_ATTR;

SNPS3_MUTEX_INFO

構文 typedef struct SNPS3_MUTEX_INFO{


sn_uint32 uMutexID;
SNPS3_MUTEX_ATTR Attribute;
sn_uint64 uOwnerThreadID;
sn_uint32 uLockCounter;
sn_uint32 uCondRefCounter;
sn_uint32 uCondID;
sn_uint32 uWaitThreadsNum;
sn_uint32 uWaitAllThreadsNum;
sn_uint64* pWaitThreadIDs;} SNPS3_MUTEX_INFO;

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 266 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

SNPS3_PPU_THREAD_INFO

構文 typedef struct{
sn_uint64 uThreadID;
sn_uint32 uPriority;
sn_uint32 uState;
sn_uint64 uStackAddress;
sn_uint64 uStackSize;
sn_uint32 uThreadNameLen; } SNPS3_PPU_THREAD_INFO;
// uState は、以下のいずれかとなります。
PPU_STATE_IDLE
PPU_STATE_EXECUTABLE
PPU_STATE_EXECUTING
PPU_STATE_SLEEPING
PPU_STATE_SUSPENDED
PPU_STATE_STOPPED_BUSY
PPU_STATE_STOPPED

内容 この構造体には、PPU スレッドを定義するパラメータが含まれます。これは、特
定のプロセスに関する情報を取得する際に SNPS3ThreadInfo 関数で使用しま
す。

メンバ sn_uint64 uThreadID – スレッド ID


sn_uint32 uPriority - 現在の優先度
sn_uint32 uState - 現在のステータス (上記を参照)
sn_uint64 uStackAddress - スタックの開始アドレス
sn_uint64 uStackSize - スタックのサイズ (バイト)
sn_uint32 uThreadNameLen – スレッド名の長さ (ヌル終端文字を含む)

参照事項 SNPS3ThreadInfo

SNPS3_PROCESS_INFO

構文 typedef struct{
sn_uint32 uStatus;
sn_uint32 uNumPPUThreads;
sn_uint32 uNumSPUThreads;
sn_uint32 uParentProcessID;
sn_uint64 uMaxMemorySize;
char szPath[512];} SNPS3PROCESSINFO_HDR;
// uStatus は、以下のいずれかとなります。
PS_STATE_CREATING
PS_STATE_READY
PS_STATE_EXITED
PS_STATE_UNKNOWN
typedef struct{
SNPS3PROCESSINFO_HDR Hdr;
UINT64 ThreadIDs[]; } SNPS3_PROCESS_INFO;

内容 この構造体には、プロセスを定義するパラメータが含まれます。これは、特定の
プロセスに関する情報を取得する際に SNPS3ProcessInfo 関数で使用します。

参照事項 SNPS3ProcessInfo

SNPS3_RAW_SPU_INFO

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 267 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

構文 typedef struct{
sn_uint32 uParentID;
sn_uint32 uNameLen;
sn_uint32 uFileNameLen;
sn_uint32 uID;
sn_address aLastPC; } SNPS3_RAW_SPU_INFO;

内容 この構造体には、raw SPU を定義するパラメータが含まれます。これは、特定の


raw SPU に関する情報を取得する際に SNPS3GetRawSPUInfo 関数で使用しま
す。

参照事項 SNPS3GetRawSPUInfo

SNPS3_RWLOCK_ATTR

構文 typedef struct SNPS3_RWLOCK_ATTR{


sn_uint32 uAttrProtocol;
sn_uint32 uAttrPshared;
sn_uint64 uKey;
sn_uint32 uFlags;
char aName[8];} SNPS3_RWLOCK_ATTR;

SNPS3_RWLOCK_INFO

構文 typedef struct SNPS3_RWLOCK_INFO{


sn_uint32 uRWLockID;
SNPS3_RWLOCK_ATTR Attribute;
sn_uint64 uOwnerThreadID;
sn_uint32 uRwaitThreadsNum;
sn_uint32 uRwaitAllThreadsNum;
sn_uint32 uWwaitThreadsNum;
sn_uint32 uWaitAllThreadsNum;
sn_uint64* pWaitThreadIDs;} SNPS3_RWLOCK_INFO;

SNPS3_SEMAPHORE_ATTR

構文 typedef struct SNPS3_SEMAPHORE_ATTR{


sn_uint32 uAttrProtocol;
sn_uint32 uAttrPshared;
sn_uint64 uKey;
sn_uint32 uFlags;
char aName[8];} SNPS3_SEMAPHORE_ATTR;

SNPS3_SEMAPHORE_INFO

構文 typedef struct SNPS3_SEMAPHORE_INFO{


sn_uint32 uSemaphoreID;
SNPS3_SEMAPHORE_ATTR Attribute;
sn_uint32 uMaxVal;
sn_uint32 uCurVal;
sn_uint32 uWaitThreadsNum;
sn_uint32 uWaitAllThreadsNum;
sn_uint64* pWaitThreadIDs;} SNPS3_SEMAPHORE_INFO;

SNPS3_SPU_THREAD_INFO

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 268 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

構文 typedef struct {
sn_uint64 uThreadGroupID;
sn_uint32 uThreadID;
sn_uint32 uFileNameLen;
sn_uint32 uThreadNameLen; } SNPS3_SPU_THREAD_INFO;

内容 この構造体には、SPU スレッド プロセスを定義するパラメータが含まれます。


これは、特定のスレッドに関する情報を取得する際に SNPS3ThreadInfo 関数で
使用します。

メンバ sn_uint64 uThreadGroupID – このスレッドが属する SPU スレッド グループ


sn_uint32 uThreadID - スレッド ID
sn_uint32 uFileNameLen – ファイル名の長さ (ヌル終端文字を含む)
sn_uint32 uThreadNameLen - スレッド名の長さ (ヌル終端文字を含む)

参照事項 SNPS3ThreadInfo

SNPS3_SYS_EVENT

構文 typedef struct SNPS3_SYS_EVENT {


sn_uint64 uSource;
sn_uint64 uData1;
sn_uint64 uData2;
sn_uint64 uData3;} SNPS3_SYS_EVENT;;

SNPS3_THREADGROUP_INFO

構文 typedef struct {
sn_uint64 uThreadGroupID;
sn_uint32 uState;
sn_uint32 uPriority;
sn_uint32 uNumThreads;
sn_uint32 uThreadGroupNameLen; } SNPS3_SPU_THREADGROUP_INFO;
// uState は、以下のいずれかとなります。
SPU_STATE_NOT_CONFIGURED
SPU_STATE_CONFIGURED
SPU_STATE_READY
SPU_STATE_WAITING
SPU_STATE_SUSPENDED
SPU_STATE_WAITING_SUSPENDED
SPU_STATE_RUNNING
SPU_STATE_STOPPED

内容 この構造体には、プロセスを定義する情報が含まれます。これは、特定のスレッ
ド グループに関する情報を取得する際に SNPS3GetSPUThreadGroupInfo 関数で
使用します。

メンバ sn_uint64 uThreadGroupID - SPU スレッド グループの ID


sn_uint32 uState – スレッド グループのステータス (上記を参照)
sn_uint32 uPriority - スレッド グループ優先度
sn_uint32 uNumThreads – スレッド グループ内の SPU スレッド数
sn_uint32 uThreadGroupNameLen - スレッド名の長さ (ヌル終端文字を含む)

参照事項 SNPS3GetSPUThreadGroupInfo

同期基本命令属性 #定義
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 269 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

//uAttrProtocol の定義

#define ATTR_SYNC_FIFO 0x00001


#define ATTR_SYNC_PRIORITY 0x00002
#define ATTR_SYNC_PRIORITY_INHERIT 0x00003

//uAttrRecursive の値

#define ATTR_SYNC_RECURSIVE 0x00010


#define ATTR_SYNC_NOT_RECURSIVE 0x00020

//uAttrPshared の値

#define ATTR_SYNC_NOT_PROCESS_SHARED 0x00200

//uAttrAdaptive の値

#define ATTR_SYNC_ADAPTIVE 0x01000


#define ATTR_SYNC_NOT_ADAPTIVE 0x02000

//uFlags の値

#define ATTR_SYNC_NEWLY_CREATED 0x00001


#define ATTR_SYNC_NOT_CREATE 0x00002
#define ATTR_SYNC_NOT_CARE 0x00003

TextClear

プロトタイプ sn_int32 TextClear(void);

内容 テキスト ウィンドウのすべてのテキストをクリアし、バッファの最初 (画面の左


上コーナー) にカーソルを移動します。

パラメータ なし

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。

TextSetBufferSize

プロトタイプ int TextSetBufferSize(sn_uint32 uBufferSize);

内容 テキスト バッファを指定されたサイズ (バイト) にセットします。この関数は、


一画面に表示するテキストの量を制限する場合に使用することができます。この
バッファの最小サイズは 64KB ですが、これ未満に設定しても 64KB にセットさ
れます。

パラメータ この関数のパラメータは以下のとおりです。

uBufferSize 入力: バッファに設定するサイズ (バイト)。

戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。

TTY_PARAM_INFO

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 270 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API

構文 typedef struct{
char ChannelName[32];
sn_uint32 uLen; } TTY_PARAM_INFO;

内容 この構造体は、NT_TTY 通知の 2 つ目のパラメータとして返されます (「通知の


使用方法」を参照)。

参照事項 GetNotification

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 271 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 B: 正規表現シンタックス

18: 付録 B: 正規表現シンタックス

基本シンタックス
以下の表は、デバッガの正規表現パーサーで理解されるメタ文字をリストしたものです。

式 意味

. 任意の 1 文字に一致する。

[charset] 文字集合 charset に属する任意の文字に一致する。たとえば、[abc] は "a"、"b"、"c"


のうち任意の文字に一致します。

[^charset] 文字集合 charset に適用される論理 NOT。文字セットに属する文字以外の任意の文


字に一致します。たとえば、[^abc] は、"a"、"b"、"c" 以外のすべての文字に一致し
ます。

^[charset] 文字集合 charset に属する任意の文字で始まる入力に一致する。たとえば、^[abc]


は、"a"、"b"、"c" のいずれかで始まる入力にのみ一致します。

- 文字集合の範囲。たとえば、[A-Z] は文字セット "A" ~ "Z" に属する任意の文字に


一致します。

? 前の式が省略可能。たとえば、[a-z][a-z]? は、"a" と "ab" のどちらにも一致しま


す。最長一致となります。下記の表現 ?? を参照。

+ 前の式を 1 回以上繰り返し可能。たとえば、[0-9]+ は、"1"、"12"、"999" などに一


致します。最長一致となります。下記の式 +? を参照。

* 前の式を 0 回以上繰り返し可能。たとえば、[0-9]* は、""、"1"、"12"、"999" などに


一致します。最長一致となります。たとえば、入力が "_123_456_" の場合には、式
_.*_ は、"_123_456_" に一致します。下記の式 *? を参照。

?? ? と同様ですが、最短一致となります。

+? + と同様ですが、最短一致となります。

*? * と同様ですが、最短一致となります。たとえば、入力が "_123_456_" の場合に


は、式 _.*?_ は "_123_" に一致します。

(expr) 式グループ演算子。たとえば、式 (\d+,)*\d+ は、"1"、"1,000"、"1,000,000" に一致


します。

{expr} 一致グループ。この一致グループ式 expr で一致した入力を、後で出てくる式で参


照できるようにするために使用されます。下記の \num を参照。

$ 入力の終わり。たとえば、[0-9]$ は、入力の終わりの数字に一致します。

| 2 つの式に対して適用される論理 OR 演算子。たとえば、 P|pS|s3 は "PS3" と


"ps3" のどちらにも一致します。

! 次の式に対して適用される論理 NOT 演算子。たとえば、 a!b は、その次に "b" が

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 272 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 B: 正規表現シンタックス

来ない "a" です。

\char エスケープ文字。つまり、char が文字どおり解釈されます。ここで、char は基本正


規表現シンタックスで使用されているメタ文字の 1 つです。たとえば、\+ は、文
字 "+" を意味します。
エスケープ文字は、正規表現略語を示すために使用されることもあります (「省略
形」を参照)。

\num 現在の式の num 番目の一致グループ (ゼロから数える) に一致。たとえば、


<{.*}>.*</\0> は、<body>text</body> に一致します。

省略形
正規表現パーサーでは、"\char" の形式をとる省略形も扱うことができます。ここで、char として考え
られる値は以下のリストのとおりです。

省略形 意味

\a 英数字: ([a-zA-Z0-9])

\b 空白: ([ \\t])

\c 英字: ([a-zA-Z])

\d 10進数字: ([0-9])

\h 16進数字: ([0-9a-fA-F])

\n 改行: (\r|(\r?\n))

\q 引用符付き文字列: (\"[^\"]*\")|(\'[^\']*\')

\w ワード: ([a-zA-Z]+)

\z 整数: ([0-9]+)

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 273 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 C: libsn.a

19: 付録 C: libsn.a

libsn.a API
以下の API 関数は、libsn.a 経由で利用できます。
int snIsDebuggerPresent (void);
デバッガが実行中であるかどうかを、ゲーム コード内部から検出します。「デバッガが実行中であるか
どうかの検出」を参照してください。
void snRawSPULockHandler (void);
インタラプト ステータス レジスタへの安全かつ排他的なアクセスを許可するため、raw SPU インタラプ
ト ハンドラをロックします。
void snRawSPUUnlockHandler (void);
インタラプト ステータス レジスタへの安全かつ排他的なアクセスを許可するため、raw SPU インタラプ
ト ハンドラのロックを解除します。
void snRawSPUNotifyCreation (unsigned int uID);
raw SPU が作成済みであることを、デバッガに通知します。uID は sys_raw_spu_create() へのコールか
ら戻される識別子です。
void snRawSPUNotifyDestruction (unsigned int uID);
raw SPU が破棄済みであることを、デバッガに通知します。uID は sys_raw_spu_create() へのコールか
ら戻される識別子です。
void snRawSPUNotifyElfLoad (unsigned int uID, unsigned int uEntry, const char *pFileName);
ELF ファイルが raw SPU にロード済みであることを、デバッガに通知します。uID は
sys_raw_spu_create() へのコールから戻される識別子です。uEntry は raw SPU ELF のエントリ ポイント
です。pFileName は既にロードされている ELF のファイル名です。
void snRawSPUNotifyElfLoadAbs (unsigned int uID, unsigned int uEntry, const char *pFileName);
ELF ファイルが絶対アドレスで raw SPU にロード済みであることを、デバッガに通知します。uID は、
sys_raw_spu_create() へのコールから戻される識別子です。uEntry は raw SPU ELF のエントリ ポイント
です。pFileName は、既にロードされている ELF のファイル名です。
void snRawSPUNotifySPUStopped (unsigned int uID);
raw SPU が停止していることを、デバッガに通知します (例外またはブレークポイントに起因)。uID は
sys_raw_spu_create() へのコールから戻される識別子です。
void snRawSPUNotifySPUStarted (unsigned int uID);
raw SPU がすでに開始されていることを、デバッガに通知します。uID は sys_raw_spu_create() へのコ
ールから戻される識別子です。
void snAddPPUPrxSearchPath(const char *pPath);
デバッガでフォルダ内の PRX ファイルが検出できるように、プログラムで PPU PRX 検索パスへのディ
レクトリを追加します。
固定フォルダ位置を使用するプロジェクトの場合、これにより、手作業での PRX 検索パス設定に依存す
ることなく、集中的にこれらを設定できるようになります。
void snAddSPUElfSearchPath(const char *pPath);
デバッガでフォルダ内の SPU ELF ファイルが検出できるように、プログラムで SPU ELF 検索パスへのデ
ィレクトリを追加します (このためロード時に ELF のシンボルが自動的にロードされます)。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 274 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 C: libsn.a

固定フォルダ位置を使用するプロジェクトの場合、これにより、手作業でのSPU 検索パス設定に依存す
ることなく、集中的にこれらを設定できるようになります。

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 275 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 D: Debugger キーボード ショートカット

20: 付録 D: Debugger キーボード ショートカット

アプリケーション

移動 F5

ステップ イン F11

ステップ アウト Shift+F11

ステップ オーバー F10

停止 Shift+F5

実行ファイルのロード Alt+F3

リセット&リロード Alt+F2

次のユニットにサイクル Ctrl+Alt+U

[ユニットの変更] ダイアログ Ctrl+Shift+U

次のユニットにサイクル (全ビュー) Ctrl+Alt+A

[ユニットの変更 (全ビュー)] ダイアログ Ctrl+Shift+A

テキストをクリップボードにコピー Ctrl+C

クリップボードからテキストを貼り付け Ctrl+V

表示形式のサイクル Ctrl+H

フォーカスを下に移動 Alt+下矢印

フォーカスを左に移動 Alt+左矢印

フォーカスを右に移動 Alt+右矢印

フォーカスを上に移動 Alt+上矢印

ブレークポイントの同期 Ctrl+Alt+F3

ビューの更新 Shift+数字キー*

すべてを削除 Shift+Delete

ブレークポイント ビュー

追加 Ctrl+B

すべて削除 Ctrl+Shift+F9

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 276 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 D: Debugger キーボード ショートカット

削除 Delete

有効化 Ctrl+F9

ソースに移動 Ctrl+G

ブレークポイントのプロパティ Alt+Enter

コマンド ビュー

すべて選択 Ctrl+A

クリア Ctrl+L

式ビュー (オート、ローカル、ウォッチ)

逆アセンブリ オートの表示 Ctrl+D

グリッド ライン Ctrl+G

スタティックの切り替え Ctrl+S

アドレス列の表示 Ctrl+A

基数のサイクル TAB

ウォッチ インデックスのインクリメント イコール記号 (=)

ウォッチ インデックスのデクリメント マイナス記号 (-)

ページ単位でウォッチ インデックスをイ Ctrl+イコール記号 (=)


ンクリメント

ページ単位でウォッチ インデックスをデ Ctrl+マイナス記号 (-)


クリメント

式の値をインクリメント ピリオド

式の値をデクリメント コンマ

カーネル ビュー

更新 Ctrl+Enter

メモリ ビュー

新しい値の入力 Enter

タイプ Ctrl+スペース キー

サイズ スペース キー

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 277 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 D: Debugger キーボード ショートカット

アドレスに移動 Ctrl+G

ポインタに追従 Shift+G

ポインタに追従を取り消し Ctrl+Shift+G

アドレスにロック Ctrl+L

バイト順を逆転 Ctrl+R

メモリを値でフィル Ctrl+F

プロセス ビュー

グリッド ライン Ctrl+G

更新 Ctrl+Enter

レジスタ ビュー

サイクル形式 Ctrl+H

スクリプト ビュー

すべて選択 Ctrl+A

クリア Ctrl+L

貼り付け Ctrl+V

TTY ビュー

検索 Ctrl+F

次を検索 F3

次の選択を検索 Ctrl+F3

前を検索 Shift+F3

すべて選択 Ctrl+A

クリア Ctrl+L

行に移動 Ctrl+G

EUC-JP モード Ctrl+J

ワークスペース ビュー

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 278 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 D: Debugger キーボード ショートカット

アイテムの検索 Ctrl+F

次を検索 F3

ファイル プロパティ Ctrl+P

追加 (P) Insert

削除 (P) Delete

ロード (P) Alt+L

シンボルのロード (P) Ctrl+Shift+L

アクティブにセット (P) Enter

プロパティ (P) Alt+Enter

名前の変更 (P) F2

モジュールのファイル名を変更する (P) Shift+F

ファイルを開く (F) Ctrl+O

ファイルをエディタで開く(F) Ctrl+E

定義に移動 (B) Ctrl+G

実行 (B) Ctrl+R

ブレークポイントの追加 (B) Ctrl+B

ウォッチに追加 (B) Ctrl+W

ソース ビューと逆アセンブリ ビュー

ファイルをエディタで開く Ctrl+E

ソース ファイルを開く Ctrl+O

ブレークポイントの切り替え F9

グローバル ブレークポイントの切り替え Ctrl+F9


(SPU)

ブレークポイントのプロパティ Ctrl+B

すべてのブレークポイントを削除 Ctrl+Shift+F9

ブックマークの切り替え Ctrl+F2

次のブックマーク F2

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 279 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 D: Debugger キーボード ショートカット

前のブックマーク Shift+F2

ブックマークをクリア Ctrl+Shift+F2

ソースに移動 (S) Shift+COMMA

PC に移動 TAB

アドレスに移動 Ctrl+G

モジュールに移動 Alt+G

カーソルまで実行 Ctrl+F10

ブランチまで実行 (D) Ctrl+F11

カーソル位置に PC をセット Ctrl+Shift+F10

ポインタに追従 (D) Shift+G

ポインタに追従を取り消し (D) Ctrl+Shift+G

数式にロック (D) Ctrl+L

ロック数式をセット (D) Ctrl+Shift+L

コードのバイト数を表示 (D) Ctrl+W

レジスタの色 (D) Ctrl+R

PC 注釈を表示 (D) Ctrl+M

アドレスを NOP にセット (D) Delete

ソースのステップを強制(D) Ctrl+Q

ソース コードを表示(D) Ctrl+S

ステッピング モードの変更 SPACEBAR

EUC-JP/ShiftJIS モード Ctrl+J/Alt+J

すべて選択 Ctrl+A

検索 Ctrl+F

次を検索 F3

前を検索 Shift+F3

選択を検索 Ctrl+F3

前の選択を検索 Ctrl+Shift+F3

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 280 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 D: Debugger キーボード ショートカット

ファイルの更新 (S) Ctrl+Enter

全ファイルの更新 Ctrl+Shift+Enter

関数の参照 Alt+B

ファイル ブラウザ Shift+Alt+O

次のファイル Ctrl+マイナス記号 (-)

前のファイル Ctrl+イコール記号 (=)

ファイルを閉じる Shift+F4

ソース/ヘッダーファイルの切り替え Alt+O

関数の開始点に移動 Ctrl+Alt+UP

関数の終了点に移動 Ctrl+Alt+DOWN

ウォッチ ビュー

変数を参照 Alt+B

ウォッチを追加 Insert

ウォッチを削除 Delete

すべてのウォッチの削除 Shift+Delete

選択したウォッチ項目の名前を編集 Enter

選択したウォッチ項目の最初の読み取り Ctrl+Enter
専用フィールドにカーソルを置く

選択したウォッチ項目の値を編集 Enter

編集モードでコラムを順次切り替える TAB

親に移動 Ctrl+[

省略型表現式 Ctrl+]

キー:
• S = ソース ビューのみ
• D = 逆アセンブリ ビューのみ
• P = プロジェクト ビューのタブのみ
• F = ファイル ビューのタブのみ
• B = ブラウズ ビューのタブのみ

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 281 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
インデックス

21: インデックス
[ウィンドウ] メニュー, 25 Math.h, 228
[ツール] メニュー, 24 OML (オブジェクト モジュール ローディング) 用
[デバッグ] メニュー, 23 にマップ ファイルを使用する, 71
[ファイル] メニュー, 21 PC の要件, 11
[ブレークポイントのプロパティ] ダイアログ, 137 PC 周辺の変数を表示, 159
[ヘルプ] メニュー, 25 PeekNotification, 245
[ユニットの変更 (グローバル)] および [ユニット PPU, 127
の変更 (全ビュー)] サブメニュー, 29 PPU スレッド, 178
[ユニットの変更] サブメニュー, 28 PPU デバッギング設定, 57
[ロード] サブメニュー, 22 PRX のデバッグ, 81
[保存] サブメニュー, 23 PS3 設定, 57
[逆アセンブリ] ビューのショートカット メニュー PS3AddBreakPoint, 246
, 119 PS3AddHWBreakPoint, 246
AddMenuItem, 229 PS3AddressToLabel, 247
Array ステートメント, 106 PS3AddressToLine, 247
autoexec.eic を使用する, 217 PS3EvaluateExpression, 248
BP_PARAM_INFO, 230 PS3FlushMemoryCache, 248
CancelNotification, 230 PS3GetBreakPoints, 249
CommandAddMenuItem, 231 PS3GetConditionalVariableInfo, 249
CommandRemoveMenuItem, 232 PS3GetConditionalVariableList, 250
ELF デバッグ情報でのソース ファイルのリスト表 PS3GetEventQueueInfo, 250
示, 109 PS3GetEventQueueList, 251
EndianSwap_2, 233 PS3GetLightWeightMutexInfo, 251
EndianSwap_4, 233 PS3GetLightWeightMutexList, 252
EndianSwapBuffer_2, 234 PS3GetMemory, 253
EndianSwapBuffer_4, 234 PS3GetModuleInfo, 253
ExitDebugger, 235 PS3GetModuleList, 254
FileSelectionDialog, 235 PS3GetMutexInfo, 254
GDI 関数, 219 PS3GetMutexList, 255
GetInputLine, 235 PS3GetProcessInfo, 256
GetLastError, 236 PS3GetRawSPUInfo, 257
GetLastErrorString, 237 PS3GetReadWriteInfo, 257
GetNotification, 237 PS3GetReadWriteList, 258
GetObjectData, 238 PS3GetSemaphoreInfo, 258
GraphicsClearWindow, 239 PS3GetSemaphoreList, 258
GraphicsDrawEllipse, 239 PS3GetSPUThreadGroupInfo, 259
GraphicsDrawLine, 239 PS3GetThreadInfo, 259
GraphicsDrawPixel, 240 PS3GetThreadList, 260
GraphicsDrawPolygon, 240 PS3LineToAddress, 260
GraphicsDrawRectangle, 241 PS3LoadBin, 261
GraphicsDrawText, 241 PS3LoadSymbols, 262
GraphicsGetFontList, 242 PS3PrintStaticAnalysis, 262
GraphicsGetWindowSize, 242 PS3ProcessLoad, 262
GraphicsSetBackgroundColor, 242 PS3ProcessStart, 263
GraphicsSetDrawMode, 243 PS3ProcessStop, 263
GraphicsSetFont, 244 PS3RemoveAllBreakPoints, 263
GraphicsSetForegroundColor, 244 PS3RemoveBreakPoint, 264
GraphicsSetWindowSize, 244 PS3SaveBin, 264
GraphicsUpdate, 245 PS3SetMemory, 264
libsn.a API, 286 PS3StartAllProcesses, 265
List ステートメント, 107 PS3StopAllProcesses, 265

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 282 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
インデックス

PS3ThreadGetCallStack, 266 SPU デバッギング, 207


PS3ThreadIsRunning, 266 SPU デバッギング設定, 58
PS3ThreadRunToAddress, 267 SPU ビューからのグローバル ブレークポイントの
PS3ThreadStart, 267 追加および削除, 139
PS3ThreadStep, 267 SPU 書き込み可能セクション, 213
PS3ThreadStepOut, 268 SPU 設定の持続, 213
PS3ThreadStepOver, 268 SPURS デバッグへの対応, 210
PS3ThreadStop, 269 SPURS モジュールのデバッグ, 210
PS3UpdateKernelInfo, 270 SPURS モジュールのビルド, 210
PS3UpdateTargetInfo, 270 SPURS モジュールの各インスタンスをデバッグ,
raw SPU モジュールのビルド, 207 212
RegisterTypeDisplayHandler, 270 SPUモジュールのアンロード, 209
RemoveMenuItem, 270 SPUモジュールのデバッグ, 208
RequestNotification, 271 SPUモジュールのロードと実行, 208
ScriptCloseAllOpenNamedPipes, 272 SPU検索パス, 207
ScriptCloseNamedPipe, 271 Stdio.h, 227
ScriptConnectNamedPipe, 272 Stdlib.h, 227
ScriptCreateFile, 272 String.h, 228
ScriptCreateNamedPipe, 273 Switch ステートメント, 107
ScriptDisconnectNamedPipe, 274 TextClear, 283
ScriptExecute, 274 TextSetBufferSize, 283
ScriptReadFile, 275 Tree ステートメント, 107
ScriptWriteFile, 275 TTY チャンネルのプロパティ, 172
SelectNotification, 231 TTY チャンネルの管理, 176
SELF サポート, 82 TTY ビュー, 170
SetDisplayHandlerTimeout, 275 TTY ビューのショートカット メニュー, 171
SetTimerInterval, 276 TTY 出力のフィルタリング, 174
SimpleExample1, 76 TTY 出力の閲覧, 170
SN Systems 関数, 218 TTY 情報の表示, 170
sn_notify, 276 TTY_PARAM_INFO, 283
SN_VAL, 276 VSI 設定, 44
SNCube, 77 Windows エクスプローラからのファイルのドラッグ
SNPS3_CALLSTACK_INFO, 277 &ドロップ, 20
SNPS3_COND_ATTR, 277 アドレスの入力, 100
SNPS3_CONDITIONAL_INFO, 277 アプリケーションの中止, 70
SNPS3_EVENT_QUEUE_ATTR, 278 アプリケーションの再起動, 70
SNPS3_EVENT_QUEUE_INFO, 278 アプリケーションの起動, 70
SNPS3_LWMUTEX_ATTR, 278 イベント キュー, 186
SNPS3_LWMUTEX_INFO, 278 イベント フラグ, 192
SNPS3_MODULE_INFO, 278 イミディエイト モードのステートメント, 216
SNPS3_MUTEX_ATTR, 279 インストールの注意, 215
SNPS3_MUTEX_INFO, 279 インライン関数, 81
SNPS3_PPU_THREAD_INFO, 279 ウォッチ ビュー, 161
SNPS3_PROCESS_INFO, 280 ウォッチ ビューで 128ビット レジスタを表示,
SNPS3_RAW_SPU_INFO, 280 164
SNPS3_RWLOCK_ATTR, 280 ウォッチ ビューのショートカット メニュー, 161
SNPS3_RWLOCK_INFO, 280 ウォッチ変数の追加, 163
SNPS3_SEMAPHORE_ATTR, 281 オート ビュー, 159
SNPS3_SEMAPHORE_INFO, 281 オート ビューのショートカット メニュー, 160
SNPS3_SPU_THREAD_INFO, 281 オートコンプリート設定, 37
SNPS3_SYS_EVENT, 281 オブジェクト モジュール ローディングのチュート
SNPS3_THREADGROUP_INFO, 281 リアル, 76
SPU, 129 オブジェクト モジュールのロード, 70
SPU raw/スレッド モジュール, 207 オブジェクト モジュールの置換 (デバッガから),
SPU スレッド グループのデバッグ, 209 72

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 283 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
インデックス

オブジェクト モジュールの置換 (外部アプリケー ターゲットのモジュールへの関連付け, 89


ションから), 73 ターゲットへの接続, 63
オブジェクト モジュールの自動ロード, 75 ターゲット変数に新しい値を割り当てる, 219
カーネル ビュー, 177 タイプ表示の変更, 223
カーネル ビューのショートカット メニュー, 193 ツールバー, 26
カーネル情報の表示, 177 テキストの検出, 125
キーボードの設定, 34 デバイスからのロード, 67
クラス/構造体の式から親への変更, 164 デバイスからのロード時にシンボルを読み込む, 69
クリップボード設定, 38 デバッガ スクリプティング API リファレンス,
グローバル ブレークポイントの復元, 140 229
ゲームのビルドおよびロード, 62 デバッガ スクリプト, 214
ゲームの実行, 70 デバッガ スクリプトとは, 214
コア ダンプ ファイルのロード, 80 デバッガ ビューの更新, 18
コールスタック ビュー, 168 デバッガ ビュー間でのデータ コピー, 20
コールスタック ビューのショートカット メニュー デバッガ ビュー間でのデータ移動, 18
, 169 デバッガが実行中であるかどうかの検出, 27
コールスタックの閲覧, 168 デバッガで ELF ファイルをロード, 71
コールスタック情報の表示, 168 デバッガのカスタマイズ, 28
システム要件, 11 デバッガのコマンドラインの具体例, 16
ショートカット メニュー, 26 デバッガのコマンドライン構文, 13
ショートカット メニューからスクリプト ダイアロ デバッガのビュー分割バーの移動, 30
グを実行する, 217 デバッガの概観, 17
スクリプティングの制限, 226 デバッガの起動, 13
スクリプト サンプル, 225 デバッガ構成の保存, 61
スクリプト ビュー, 215 デバッグ用ビルド, 62
スクリプト ビューのショートカット メニュー, ドラッグ&ドロップとソース ビュー, 19
216 ドラッグ&ドロップのタイプ, 18
スクリプトの使用方法, 215 トラブルシューティング, 215
スクリプトの読み込みと実行, 217 トレースポイント, 140
ステータス バー, 27 トレースポイントの削除, 143
ステップ制御, 53 トレースポイントの追加, 142
ステップ制御で無視する関数を指定, 94 ハードウェア ブレークポイント, 144
ステップ制御フォルダの設定, 93 ハードウェア ブレークポイントの設定, 144
すべてのデバッガ ビューの更新, 18 パイプライン アナライザ, 127
スレッド SPU モジュールのビルド, 208 はじめに, 10
スレッド デッドロック検出, 180 パスのマッピング, 47
スレッド特有のブレークポイント, 139 ビットフィールド指定子, 104
スレッド特有のブレークポイントの設定, 139 ビュータイプの変更, 28
セマフォ, 180 ビューのユニットを変更, 28
ソース コードのコンパイル (raw モード SPU サポ ビューの削除, 18
ート), 62 ビューの生成, 18
ソース ビュー, 110 ビューをサブビューに分割, 30
ソース ビューのショートカット メニュー, 113 ビュー内でのコラムの表示/非表示の切り替え, 20
ソースおよび逆アセンブリの閲覧, 108 ファイバ コンテキストの使用, 204
ソースと逆アセンブリを同時に閲覧, 124 ファイバ スケジューラでファイバを使用, 201
ソースと逆アセンブリ内の検索, 124 ファイバ ユーティリティ ライブラリの使用, 205
ソースの閲覧, 108 ファイバのデバッグ, 205
ソースビューでのホバー評価, 102 ファイバ情報, 201
ソースファイルの配置, 108 ファイル ビュー, 96
ソース設定, 41 ファイルの関連付けを利用したデバッガの起動, 16
その他の要件, 12 フォーマット指定子, 104
ターゲット メモリをバイナリ ファイルからロード フォントと色設定, 45
する, 153 ブックマークの使用, 125
ターゲット メモリをバイナリ ファイルに保存する ブレークポイント ビュー, 134
, 153

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 284 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
インデックス

ブレークポイント ビューのショートカット メニュ レジスタの色分け, 123


ー, 136 レジスタの閲覧・変更, 154
ブレークポイント ビューのツールバー, 136 ローカル ビュー, 158
ブレークポイントおよびステッピング, 132 ローカル ビューとウォッチ ビューでの配列の使用
ブレークポイントの種類, 134 , 166
ブレークポイントの設定・閲覧, 132 ローカル ビューのショートカット メニュー, 159
プレビュー ブロック, 105 ローカル変数とウォッチ変数の閲覧, 158
フローティング&ドッキング ビュー, 30 ローカル変数の閲覧, 158
プログラムのブラウズ, 84 ワークスペース ビューの使用, 84
プログラムを 1 ステップずつ実行, 133 ワークスペースビューのオプション, 85
プログラムを 1 ステップずつ実行する, 133 ワークスペース設定, 39
プログラム実行の中止, 132 互換性, 11
プロジェクト ビュー, 86 付録 A: スクリプティング API, 227
プロジェクトに保存されたスクリプト, 217 付録 B: 正規表現シンタックス, 284
プロジェクトのオプション, 46 付録 C: libsn.a, 286
プロジェクトの使用, 84 付録 D: Debugger キーボード ショートカット,
プロジェクト設定, 46 288
プロセス, 177 仮想メモリ領域, 187
プロセス ビュー, 194 使用可能なライブラリ関数, 218
プロセス ビューのオプション, 200 値でメモリをフィルする, 151
プロセス ビューのショートカット メニュー, 196 制限, 74
プロセス ビューのツールバー, 199 制限と警告, 11
プロセス情報の表示, 194 参照ビュー, 97
ボタン エディタ, 34 同期基本命令属性 #定義, 282
ミューテックス, 182 名称のデマングル, 98
メニュー コマンドのカスタマイズ, 33 命令のヘルプ, 117
メニュー バー, 21 埋め込み SPU 内のブレークポイント ― グローバ
メニュー、ツールバー、ステータス バー, 21 ル ブレークポイント, 139
メニューとツールバーのカスタマイズ, 31 基本シンタックス, 284
メニュー項目の追加 – command view, 223 基本的な typedefs, 227
メニュー項目の追加 - 標準モード, 221 変数のモニタリング, 160
メモリ アクセス トラップ (MAT), 144 変数の自動展開, 103
メモリ コンテナ, 191 変数ブラウザを使用したウォッチの追加, 163
メモリ ビュー, 148 子ブロック, 105
メモリ ビューのショートカット メニュー, 150 安全なロード ポイントの選択, 73
メモリ ビューをポインタ アドレスにロックする, 実行ファイルの読み込みと実行, 65
154 実行可能ファイルのリロード, 69
メモリとレジスタの閲覧・変更, 148 実行可能ファイルのロード, 65
メモリの閲覧・変更, 148 履歴設定, 40
メモリを変更・選択する, 149 式, 99
モジュール, 189 式チップ, 111
モジュールに対して検索パスを設定, 91 式のビルド, 101
モジュールのプロパティ, 87 式の使用, 99
モジュールのリセット パラメータの設定, 90 式の評価, 102, 218
モジュールの追加, 87 式内の名称検索順序, 102
モジュールへのパス マッピングの設定, 92 式評価機能でのコンテキスト指定子オペレータ,
ユーザー インターフェイス, 13 102
ユーザー定義の配列サイズ – ウォッチ ビューのみ 必須条件, 71
, 166 操作手順: SPURS モジュールを最初からデバッグす
ユーザー定義レジスタ テンプレート, 156 る, 211
ユニットにビューをロック, 29 数式の入力, 99
よく発生する問題, 75 書式指定子を使用して変数を表示, 165
リセット オプション, 60 条件ステートメント, 106
レジスタ ビュー, 154 条件付きブレークポイント, 138
レジスタ ビューのショートカット メニュー, 155 条件付きブレークポイントの設定, 138

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 285 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
インデックス

条件変数, 184 複数ユーザーによる 1 台のターゲット上でのデバ


検索ディレクトリ, 49 ッグ, 64
標準 C ライブラリ関数, 218 詳細なスクリプティング, 219
標準 C 関数, 227 読み書きロック, 185
正規表現, 126 軽量ミューテックス, 183
現行関数をステップアウトする, 133 軽量条件変数, 187
環境設定, 34 逆アセンブリ サブメニュー, 122
異なる場所にビルトインされているコードの閲覧, 逆アセンブリ ビュー, 116
112 逆アセンブリの閲覧, 116
相対ベース ディレクトリの設定, 69 逆アセンブリをファイルに保存, 123
省略形, 285 通知の使用方法, 220
自動展開の構文, 103 配列のインデックスのスクロール – ウォッチ ビュ
表現の短縮, 164 ーとローカル ビュー, 166
表示サブメニュー, 116, 123 関数の参照, 98
表示の設定, 36

© SCEI ProDG Debugger for PlayStation®3 v470.1


- 286 -

You might also like