Professional Documents
Culture Documents
ProDG PS3 Debugger-J PDF
ProDG PS3 Debugger-J PDF
Index
SN Systems Limited
バージョン470.1
2015年1月27日
目次
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
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)
2: ユーザー インターフェイス
この章では、デバッガの起動方法やビューの変更方法、および使用可能なコマンドについて説明します。
この章には、以下のセクションがあります。
• デバッガの起動
• デバッガの概観
• デバッガ ビューの更新
• デバッガ ビュー間でのデータ移動
• メニュー、ツールバー、ステータス バー
デバッガの起動
ProDG デバッガは、コマンドライン、または Windows のショートカットから起動します。Windows の
ショートカットを使用して起動する場合は、ショートカットのプロパティで、必要に応じてデバッガへの
コマンドライン パラメータと、デバッガの実行ディレクトリを設定する必要があります。
ProDG Visual Studio Integration をインストールしてある場合は、デバッガを Microsoft Visual Studio の
ツールバーボタンから起動することもできます。
デバッガの起動時に Target Manager が実行されていない場合、Target Manager は自動的に起動します
(パス上にあることが条件)。
作業ディレクトリは、デバッガのコマンドラインに入ったときの現行ディレクトリ (または、Windowsシ
ョートカット プロパティ ダイアログの作業フォルダ フィールドで指定したディレクトリ) です。
ここでは、Windows のショートカット用の作業ディレクトリを設定します。設定しない場合、デバッガ
の設定ファイルが現在のディレクトリに応じた別の場所に保存されます。デバッガの設定に関する詳細
は、「デバッガ構成の保存」を参照してください。
デバッガのコマンドライン構文
デバッガのコマンドライン構文は以下のとおりです。
ps3debugger <switches> <file> <app_params>
<switches> デバッガのオプションを指定する省略可能なスイッチ。
SELFファイルを指定したにもかかわらず、ターゲットにダウンロードしなかった場合は、シンボルのみ
がロードされます。このモードは、クラッシュしたターゲットの事後デバッグを行う場合に適していま
す。
有効なスイッチは以下のとおりです。
-da デバッガが終了したとき、ターゲットを切断した状態にします。デフォルト
設定では、デバッガ起動時の状態にターゲットが維持されます。
-e 記号情報に加えてファイルの実行可能部分をダウンロードします。
-exit コマンドラインの解析後、デバッガの終了を指定します。
-m デバッガの複数インスタンスの実行を可能にします。
-mimplicit –m の振る舞いを拡張します。このスイッチは、デフォルトではデバッガの
新しいインスタンスを起動するためのその後の読み込みを強制します。「プ
ロジェクトのオプション」を参照してください。
-md2 デバッガがクラッシュしなければならないという予想外の状況が発生したと
きに、フル メモリ ダンプ ファイルの出力を有効にします。
-nd デバッガ終了時に、ターゲットの接続を解除しないようにします。デフォル
ト設定では、デバッガ起動時の状態にターゲットが維持されます。
-r 実行可能ファイルのダウンロード前にターゲットをリセットします。
-runexit ターゲット上で実行されているプロセスが終了したらデバッガを閉じるよう
指定します。
-s –mimplicit オプションに関わらず、単一インスタンスの読み込みを強制しま
す。既存のデバッガ インスタンスがある場合は、コマンド ライン上で渡さ
れます。
-u コア ダンプを強制的に有効にします。
-x ターゲットにプログラムがロードされた後、このスイッチによってプログラ
ムが実行され、main() で停止します。このスイッチを使用しない場合、プロ
グラムはロード後にエントリ ポイントで停止します。
デバッガのコマンドラインの具体例
コマンドラインの一例を以下に示します。
ps3debugger -e -r -pc:/cygwin balloon.self
ファイルの関連付けを利用したデバッガの起動
サポートされているファイルをダブルクリックすると、デバッガを起動できます。現在サポートされてい
るファイル拡張子は、'SNT'、'SNTPROJ' および 'SNPROJ' です。
ファイルの関連付けによるデバッガの起動のサポートは、SNLauncher によって行われています。
SNLauncher は、ある特定の種類の SN Systems のファイルを、対応する SN Systems のアプリケーショ
ンで開くためのアプリケーションです。
SN Systems の一部のファイル拡張子は、デバッガと Tuner の PS3 バージョンと PSP バージョンの両方で
サポートされています。SNLauncher は、ファイル拡張子を確認し、ファイルを読み取り、どのアプリケ
ーションで開くかを決定します。SNLauncher はバックグラウンドで実行されるため、ユーザーの目には
見えません。なお、SNLauncher は SN Systems のインストーラによりインストールされるため、
SNLauncher アプリケーションを明示的に実行する必要はありません。
SNLauncher の実行ファイルはどのフォルダに移動しても構いません。そのような場合には、
SNLauncher をダブルクリックして、インストールしなおしてください。再インストールを行うと、サポ
ートされているファイル拡張子が、SNLauncher の実行可能ファイルのインスタンスと再度関連付けられ
ます。
デバッガの概観
ターゲットの状態は、各種ビューに表示されます。
詳細は、「ビューの生成」および「ビューの削除」を参照してください。
デバッガの主要機能には、メニュー オプション「メニュー バー」を参照)、ツールバー ボタン(「ツール
バー」を参照)、およびショートカット キー (ビューの説明を参照) を使ってアクセスできます。
ビューの配置は、各デバッグ セッション終了時にデバッガ構成ファイルに保存されます (「デバッガ構成
の保存」を参照)。
ビューの生成
新しいデバッグ ビューはいつでも生成できます。ビューは、[ウィンドウ ] メニューの [新しいビュー] コ
マンド (「[ウィンドウ] メニュー」を参照) または、ビュー ツールバーのボタンから開くことができま
す。
各ビュー タイプには、マウスの右クリックでアクセスできる固有のショートカット メニューがありま
す。詳細は、「ショートカット メニュー」を参照してください。
デフォルトでは、アプリケーションがターゲット上で実行を中断するたびに、デバッガ ビューが現在の
情報に更新されます。この他にも、いくつかの更新オプションを設定できます。詳細は、「すべてのデバ
ッガ ビューの更新」を参照してください。
ビューは、ドッキング機能を使用して整理できます。「フローティング&ドッキング ビュー」」を参照し
てください。
ビューの削除
ビューを削除する場合は、タイトル バーの「閉じる」ボタンをクリックします。
デバッガ ビューの更新
デフォルトでは、すべてのデバッガのビューは、ターゲットが動作を中止すると更新されます。ビューは
すべて、強制的に更新することができます。
すべてのデバッガ ビューの更新
デバッガ ビュー間でのデータ移動
ドラッグ&ドロップのタイプ
ドラッグ&ドロップは、異なるビュー間の移動を円滑に行うために実装されています。たとえば、特定の
関数にブレークポイントを追加したいが、正確な関数名またはスペルが思い出せない場合、ワークスペー
ス ビューを参照し、関数を検索できます。そして関数名をブレークポイントビューに「ドラッグ」後、
「ドロップ」します。これによって関数のアドレスにブレークポイントが追加されます。
ドラッグ&ドロップ作業の結果は、データをドラッグまたはドロップするビューによって異なります。起
こりうる組み合わせの表を以下に示します。
ドラッグ先
ワークスペース ロード
ファイル
マウスがデータをドラッグしている間は、マウスはデータがドラッグ中であることを示す表示に変わりま
す。
ドラッグ&ドロップとソース ビュー
ソース ビューから情報をドラッグするには、テキスト選択を行ないます。その後、選択したデータ上で
マウス ボタンを押して、通常どおりのドラッグ操作を行ないます。選択が複数行におよぶ場合は、最初
の行のみが「ドロップ」されます。
たとえば、コード内の「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 つ以上のファイルがソース ビューにドラッグされると、ドロップしたそれぞれのソース ファイル
に新しいタグが作られます。
• デバッガのその他の部分にファイルをドラッグした場合、ファイルごとに新しいソース ビューが開
きます。
ビュー内でのコラムの表示/非表示の切り替え
タブ形式でデータを表示するビュー ([ウォッチ]、[ローカル]、[オート]、[コールスタック]、[ブレークポ
イント] および [プロセス] の各ビュー) を使うと、個々のカラムの表示/非表示を切り替えることができま
す。表示の切り替えを行うときは、これらのビューのヘッダーを右クリックします。それぞれのカラムの
メニュー項目を含むコンテキスト メニューが表示されます。現在表示されているカラムのとなりにはチ
ェックマークが表示されます。これらのメニュー項目のいずれかを選択すると、状態が切り替えられ、カ
ラムが表示/非表示になります。
メニュー、ツールバー、ステータス バー
メニュー バー
デフォルトのデバッガ メニューバーには、[ファイル]、[デバッグ]、[ツール]、[ウィンドウ]、[ヘルプ] の
各オプションがあります。詳細は以下のとおりです。メニューバーの設定についての詳細は、「メニュー
とツールバーのカスタマイズ」を参照してください。
[ファイル] メニュー
新規プロジェクト 新しい空のプロジェクトを作成します。新プロジェクトの設定にはワーク
プロジェクトを閉じる プロジェクトを閉じます。
モジュールの追加 プロジェクトに実行可能ファイルを追加できます。
モジュールの モジュールのプロパティを表示します。「モジュールのプロパティ」を参
プロパティ 照。
終了 デバッガを終了します。
[ロード] サブメニュー
プロジェクト プロジェクトをデバッガにロードします。ダイアログを使用して、SN
Systems プロジェクト (.snproj) ファイルを選択し、デバッガにロードしま
す。
シンボル シンボルとデバッグ情報のみをロードします。表示されるダイアログ ボッ
クスを使うと、ファイル名が指定できます。ここからシンボルとデバッグ
情報が読み込まれます。
ソース (現在このオプションは使用不可)
オブジェクト 現在のプログラムがビルドされてから修正が加えられたオブジェクト ファ
ファイル: オート イルを自動的に読み込みます。「オブジェクト モジュールの自動ロード」
を参照。
Autoexp.dat 自動展開定義ファイルをロードします。「変数の自動展開」を参照。
[保存] サブメニュー
プロジェクトを保存 プロジェクトを保存します。
プロジェクトを別名で プロジェクトを別名で保存します。
保存
[デバッグ] メニュー
実行 現在アクティブなビューに関連するスレッドを開始します。
メモ:現在のビューに関連するスレッドがない場合は、[実行]、[停止]
、[ステップ]、[制限ステップ イン]、[ステップ オーバー]、[ステップ ア
ウト] オプションにより、アクティブな PPU スレッドが制御されますが
、現在アクティブなビューがプロセス ビューである場合、これらのオプ
ションは無効化されます。
停止 現在アクティブなビューに関連するスレッドを停止します。
[ツール] メニュー
オプション デバッガのカスタマイズを行います。「メニューとツールバーのカスタマイ
ズ」を参照。
[ウィンドウ] メニュー
新規ビュー デバッガで新しいウィンドウを作成するときに使用します。
横に分割 現在のビューを横方向に分割するときに使用します。
縦に分割 現在のビューを縦方向に分割するときに使用します。
新しいタブ 現在のビューに新しいタブを追加するときに使用します。
アイコンを整理 すべての最小化されたウィンドウを整列します。
すべて閉じる 開いているすべてのウィンドウを閉じます。
横方向/縦方向の分割、または新しいタブの追加を行うとき、追加される新しいビューは、現在のビュー
にすることも、利用可能なビューのリストから選択することもできます。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 23 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ユーザー インターフェイス
メニューの下部にデバッガが現在開いているウィンドウのリストが表示されます。
[ヘルプ] メニュー
バージョン情報 バージョン情報が表示されます。
ツールバー
[デバッガ] ツールバーには 4 つのオプションがあります。ツールバーの任意の部分を右クリックすると、
以下のようなツールバーのショートカット メニューが表示されます。
ツールバー横の印は、そのツールバーが表示されていることを示します。
[ウィンドウ] メニューの一部のコマンドは、以下の [ビュー] ツールバー、
ショートカット メニュー
各ビューには、ショートカット メニューがあり、ビュー上を右クリックすると表示されます。
ショートカット メニューには、各ビュー タイプ用のコマンドが含まれています。頻繁に使用するコマン
ドはキーボードのショートカットからアクセスすることもできます。
メニューのフォーマットはさまざまですが、すべてのビュー タイプに共通するメニュー アイテムもあり
ます。
ビューの切り替え このサブメニューを使用すると、現在のビューのタイプを別のビュータイ
プに変更できます。
横に分割 選択したビューを横分割表示します。
縦に分割 選択したビューを縦分割表示します。
新しいタブ 選択されたビューで新しいタブを作成します。
コピー ビューで選択した項目をクリップボードにコピーします。選択されたテキ
ストはクリップボードよりメモ帳などのアプリケーションへ、またビュー
全体のビットマップ イメージはペイントなどのアプリケーションへ、それ
ぞれ貼り付け可能です。
ステータス バー
デバッガ ウィンドウの下部にはステータス バーがあります。
ステータス バーは、現在の [ステッピング モード] を、フォーカスを持つビューの [ソース] または [逆ア
センブリ] のいずれかで表示します。
デバッガが実行中であるかどうかの検出
デバッガが現在実行中であるかどうかを、ゲーム コード内から自動的に検出する関数が役立つ場合もあ
ります。これを実行するには以下を呼び出します。
int snIsDebuggerPresent();
3: デバッガのカスタマイズ
この章では、ビューのレイアウト変更方法、メニューやツールバー コマンドのカスタマイズ方法、各種
項目の設定方法について説明します。
この章には、以下のセクションがあります。
• ビュー タイプの変更
• ビューをサブビューに分割
• フローティング&ドッキング ビュー
• メニューとツール バーのカスタマイズ
• 環境設定
• プロジェクト設定
• PS3 設定
• デバッガ構成の保存
ビュータイプの変更
表示中のビュータイプは、ビューのショートカット メニューの [ 表示変更 ] コマンドを使用して変更でき
ます。
ビューのユニットを変更
マルチプロセッサ (-unit) 開発ハードウェアの場合、以下のいずれかの方法で、別のユニットに関連する
情報を表示するように切り替えることができます。
• ビューの任意の場所を右クリックしてショートカット メニューを表示し、このビューのみについて
ユニットを変更する [ユニットの変更] を選択、または選択したウィンドウの全ビューについてユニ
ットを変更する [ユニットの変更 (全ビュー)] を選択します。詳細は、「ショートカット メニュー」
を参照してください。
• ウィンドウのタイトル バーで [ユニットの変更 (全ビュー)] ツールバー ボタンをクリックします。
[ユニットの変更] サブメニュー
確認できるようになります。
次のユニットに ビューを次に有効なユニットに切り替えます。
サイクル
ユニットにビューをロック
[ユニットにロック] 切り替え機能を含む [ユニットの変更] メニューを使うと、ビューをある特定のユニ
ットに限定して、自動表示変更機能によって表示内容が変更されないようにロックすることができます。
ユニットにビューをロックするには、次の手順に従います。
(1) ロックしたいビューを選択します。
(2) 右クリックしてそのビューのショートカット メニューを呼び出し、[ユニットの変更] をクリックし
てから [ユニットにロック] をクリックします (Ctrl+Shift+Alt+L)。
ビューをサブビューに分割
既存ビューを分割するには、次の手順に従います。
(1) 分割したいビューを選択します。
(2) 右クリックでビューのショートカット メニューを表示し、[横に分割] または [縦に分割] を選択する
か、デバッガのツールバーから、[横に分割] または[縦に分割] ツールバー ボタンをクリックしま
す。
(3) ビューが横方向、または縦方向に分割され、新しくできたビューに、最初に選択したビューと同じ
ビュー タイプが割り当てられます。
(4) ここで、ショートカット メニューの [ビューの切り替え] オプションを使用して、新しく作成された
ビュー部分の中で必要なビューを示す必要があります。
デバッガのビュー分割バーの移動
分割ビューの分割バーは、移動してそれぞれのビューの配置スペースの割合を変えることができます。4
分割しているビューの交差部分の分割バーを移動したい方向に動かして、4 分割ビューの表示割合を一度
に変更することもできます。
フローティング&ドッキング ビュー
各ビューは、「フローティング モード」と「ドッキング モード」に切り替えることができます。
フローティング モードでは、デバッガのメイン ウィンドウ内でビューを移動させることができ、画面外
(別のモニタなど) に表示させることもできます。フローティング モードのウィンドウは、常に別のビュ
ーの手前に表示されます。
ドッキング モードでは、デバッガのメイン ウィンドウの左右にビューが固定されます。ビューのサイズ
を変更することはできますが、移動することはできません。
ビューをフローティング モードにするには、次の手順に従います。
(1) フローティングにしたいビューのタイトル バー内にあるフローティング ウィンドウ アイコン (左か
ら2 つ目) をクリックします。
メニューとツールバーのカスタマイズ
このセクションでは、メニュー コマンドのテキストやメニュー アイコンの画像を含め、メニューとツー
ルバーのカスタマイズ方法を説明します。既存のメニュー コマンドは、移動することができ、新しいメ
ニューを作成することも可能です。
メニューやツールバーをカスタマイズするには、次の手順に従います。
(1) メニュー バーまたはツールバーを右クリックし、[カスタマイズ] を選択します。
メニュー コマンドのカスタマイズ
[ユーザー設定] ダイアログ ボックスが開いている状態で、ツールバー上の既存メニューを右クリック
し、プロパティを表示します。
削除 メニューからコマンドを削除する。
プロパティ名 コマンド名を編集する。
既定のスタイル コマンドをデフォルト形式で表示する。
テキストのみ コマンドのテキストのみを表示する。
イメージとテキストを表示 コマンドのアイコンとテキストを表示する。
グループの始まり 選択したコマンドの上に線を追加する。
ボタン エディタ
図 アイコンのビットマップ。
色の設定 16 色の基本パレット。クリックしてカーソルの色を決定する。
消去 消しゴム ツール。
移動 アイコン全体を上下左右に移動する。
プレビュー アイコンのプレビュー。
ツール ペン、塗りつぶし、色の選択、線、四角形、楕円、すべてクリア、およびアイコ
ンをディスクからインポートするための参照オプションが用意されているツール
ボックス。
環境設定
キーボードの設定
デバッガでは、キーボード設定を再利用可能な「キーボード マップ」として保存できます。たとえば、
デバッガのデフォルト キーボード設定の代わりに Microsoft の Visual Studio のキーボード マッピングを
使用したいような場合があります。このような場合には、システムのデフォルト マッピング (ProDG デ
バッガ) の代わりに任意のマッピングにショートカット コマンドを再定義できます。その後、オプション
ダイアログのドロップダウン リストボックスから [キーボード マッピング スキーム] を選択することで代
わりのキーボードと切り替えができます。このセクションでは、デバッガのキーボード設定のカスタマイ
ズおよびそれをキーボード マップとして保存する方法を説明します。
デバッガのキーボード設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで [オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側にあるメニューから、[キーボード] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
別名で保存 現在のキーボード設定を他の名前で保存します。新スキーム名入力ダイアログ
に適応するキーボード マップ (Visual Studio など) が表示されます。
説明 選択したショートカット コマンドについての簡単な説明を表示します。
表示の設定
デバッガの表示設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[表示] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
浮動小数点設定
SMART = フィールドの長さから、浮動小数点の数値の表示方法を推測。
ENG = 10^3 の倍数に最も近い値で表現 (例:0.1 は「100e-03」と表現) する以外は
SCI と同じ。
SCI = 科学的表記 (例:「<S1>#.######e<S2>##」の場合、<S1> は仮数、<S2> は指
数)。
NO_EXP = 浮動小数点を完全に表示 (フィールドの長さが十分な場合)。
デフォルトの基数表示
自動保存設定
ロード時に保存/ 実行ファイルがターゲットにロードされるたびに設定を保存します。
リセットとリロード
保存間隔 n 分毎に設定を保存します。
オートコンプリート設定
このセクションでは、デバッガでの自動入力を制御するための各種設定について説明します。
デバッガのオートコンプリート設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[オートコンプリート] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
このオプションを選択解除すると、この「ベストな推測」機能がオフになり
ます。一致するシンボルのリストは表示されますが、入力中のデータには何
も追加されません。
選択がプリセットさ このオプションを選択すると、オートコンプリート機能では、履歴キャッシ
れていない場合のみ ュ内の以前入力されたアイテムに対するマッチングを行わず、またドロップ
履歴を表示する ダウン リストにもこれらを含みません。
履歴のみを対象とし このオプションを選択すると、シンボル検索が実行されないため、get 式ダ
比較する イアログに入力されたテキスト ([アドレスに移動] など) に対しては、以前に
入力されたテキストのみが適用されます。
クリップボード設定
切り取り&貼り付け操作で使用されるクリップボードの形式をカスタマイズするには、次の手順に従いま
す。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[クリップボード] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
テキストのみ テキスト情報のみをクリップボードに追加します。
画像のみ 画像情報のみをクリップボードに追加します。
ワークスペース設定
ワークスペース ビューの設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[ワークスペース] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
存在しない チェックマークをオンにした場合、見つからないファイルは薄い色で表示されま
ファイルを表示 す。チェックマークをオフにした場合、見つからないファイルはツリーに追加さ
れません。
履歴設定
ダイアログ履歴設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[履歴] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
履歴の最大エントリ数 各履歴リストに可能なエントリの数を指定します。最大値は50です。
メモ:履歴の設定変更はデバッガが再度ロードされるまで有効になりません。
ソース設定
このセクションでは、ソースおよび逆アセンブリ ビューにそれぞれ特有の設定をカスタマイズする方法
を説明します。新しいソースおよび逆アセンブリ ビューの設定変更はビューごとにその設定が変更され
るまで有効です。
ソース ビューと逆アセンブリ ビューの設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[ソース] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
ソース ビューのデフォルト
外部エディタ
列のオフセット カスタム外部エディタの列位置にオフセットを追加します。
行のオフセット カスタム外部エディタの行位置にオフセットを追加します。
タブ サイズ
逆アセンブリのデフォルト
レジスタを色分け 異なるカラーのレジスタを表示します。
する
ステップ
VSI 設定
このダイアログでは、SELF ファイルのロード時に Visual Studio からソース ファイルをインポートする
かどうかを指定できます。
VSI 設定をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで [オプション] をクリックして[オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[VSI] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
フォントと色設定
このセクションでは、個別ビューおよびウィンドウ グループでフォントと色をカスタマイズする方法を
説明します。たとえば、ソース ビューの構文の配色を設定します。
フォントと色をカスタマイズするには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[フォントと色] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
ペインのリセット (現在このオプションは使用不可)
フォント 選択した項目の表示フォントを選びます。
太字 チェックされている場合、フォントは太字で表示されます。
プロジェクト設定
プロジェクトのオプション
プロジェクトのオプションを設定するには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[プロジェクトのオプション] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
開始時に前の 起動時に最も最近使用したプロジェクトをリロードします。チェックされて
プロジェクトを いない場合は、プロジェクト ファイルはロードされません。
リロード
ターゲットを チェックされている場合、プロジェクトの各モジュールに異なるターゲット
モジュールに の関連付けができます。チェックされていない場合、すべてのモジュールは
関連付ける 同じターゲットを使用します。
スイッチ時にプロジ 切り替え前にプロジェクトを保存するまたは破棄するかを決める、または実
ェクトを保存 行前にプロンプトを表示するかを決定します。
ターゲットのサイレ ターゲットを自動切り替えするかどうか、または実行前にプロンプトを表示
ントスイッチを許可 するかを決定します。
パスのマッピング
デバッガでファイルが見つからない場合は、ファイル パスの最初の部分がユーザー指定のパスに変更さ
れます。このセクションでは、このユーザー指定のパスを設定する方法を説明します。
別のファイル パスを設定するには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[パス マッピング] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
検索ディレクトリ
検索パス ディレクトリを設定するには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[検索ディレクトリ] オプション グループを選択します。
[オプション] ダイアログが表示されます。
例:
メインの 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] エントリに追加します。
ステップ制御
デバッガの「制限ステップ」機能では、シングル ステップ実行中に関数コールを無視するための方法が 2
種類提供されます。
フォルダ レベルでの制御
フォルダのリストを指定することにより、該当フォルダ内に存在するソース ファイルのすべてが「制限
ステップイン」の処理中に無視され、代わりにステップ オーバー処理が実行されます。
制限ステップ コマンドで使用されるフォルダ リストを設定するには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから[ステップ制御] オプション グループを選択します。
[オプション] ダイアログが表示されます。
[ディレクトリ] セクションの参照ボタンを使用し、目的の検索パスを指定します。
(3) [サブディレクトリの追加] ツールバー ボタンは、選択したディレクトリのサブディレクトリを一括
ですべて追加します。既に追加されているパス (反転表示されている) を選択し、[サブディレクトリ
の追加] アイコンをクリックします。[サブディレクトリの追加] ダイアログが表示されます。
プライオリティ フィールドでは、ルールが評価される順番が示されるだけでなく、ルールに対する例外
も定義できます - プライオリティ値が大きいほど、優先度が高くなります。これらの値は任意的なもの
であり、ルール間の比較のみに使用されます。
ステップ実行修飾子では、正規表現に適合する関数にステップ インするか、しないかが指定されます。
リスト内の各ルールは、チェックボックスによって制御されます。無効に設定/無視するルールのチェッ
クボックスをオフにすると、ステップ実行処理の際にこれらが無効となります。
例
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::」で始まる関数は、最初
のルールに関わらず、ステップ インされることが指定されます。
正規表現ルールは、グローバルおよび/またはモジュール限定ベースで定義でき、それぞれ [オプション]
ダイアログまたは [モジュールのプロパティ] ダイアログで設定できます。
[オプション] ダイアログと [モジュールのプロパティ] ダイアログにある [式の追加] ツールバー ボタンで
は、「ステップ インしない」ルール リストに正規表現が追加できます。
[新しいステップ コントロール表現] ダイアログでは、[プライオリティ]、[正規表現]、[ステップ インす
る/ステップ インなし] ルールが設定できます。
[正規表現] フィールドのとなりにあるボタンをクリックすると、一般的な正規表現コマンドが表示されま
す。このリストからアイテムを選択すると、式制御内の現在のカーソル位置にコマンドが追加されます。
正規表現の構文を確認後 [OK] をクリックしてダイアログを閉じると、ステップ制御ルール リストに新し
い式が追加されます。
制限ステップ コマンドで無視される関数のリストを指定するには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[ステップ制御] オプション グループを選択します。
[オプション] ダイアログが表示されます。
[実行制御]
PS3 設定
PPU デバッギング設定
PPU デバッギング設定を行うには、次の手順に従います。
(1) [ツール] メニューで、[オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[PPU デバッギング] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
PPU オプション
実行 生成後直ちに、PPU プロセスの実行を開始します。この設定は、main() で停
止するデフォルト設定より優先されます。
コールスタック
ファイバ
SPU デバッギング設定
SPU デバッギング設定を行うには、次の手順に従います。
(1) [ツール] メニューで [オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[SPU デバッギング] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
SPU オプション
実行 SPU にロードされた実行可能モジュールを、ファイルがロードされると
同時に実行開始します。この設定は、main() で停止するデフォルト設定
より優先されます。
リセット オプション
リセット オプションを設定するには、次の手順に従います。
(1) [ツール] メニューで [オプション] をクリックして [オプション] ダイアログを呼び出します。
(2) 左側のメニューから、[リセット パラメータ] オプション グループを選択します。
(3) [オプション] ダイアログが表示されます。
デバッガ構成の保存
ウィンドウの位置と設定はすべて、デバッガ構成ファイル (PS3DebuggerConfig.xml) に自動的に保存さ
れます。
デバッガの起動時、以下のディレクトリからデバッガ設定ファイルが検索され、設定が復元されます。
(1) 現在の実行ディレクトリ、または
(2) デバッガの実行ファイル (PS3Debugger.exe) があるディレクトリ
デバッガ構成ファイルが見つからなかった場合は、組み込みのデフォルト設定で開きます。
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 バージョンを選択します。
詳細は、「付録 C: libsn.a」を参照してください。
ターゲットへの接続
コマンドライン オプションを使用して、ELF を自動的にロードした状態でデバッガを起動できます (シン
ボルのみ、シンボル+実行可能ファイルおよびオプションでまずターゲットをリセットするなど)。
以下のいずれかの方法で Target Manager を使用すると、任意の数のターゲットと通信できます。
(1) デフォルトの方法でデバッガを開始すると、Target Manager は自動で起動され、設定したターゲッ
トをリスト表示する (デバッガのコマンドライン オプションによって異なる) ダイアログを表示しま
す。[デバッグ] メニューの [ターゲットの選択] オプションを使用して、デバッガ使用中に作業中の
ターゲットを変更できます。「ターゲットへの接続」参照。
ターゲットをTarget Managerで選択していない場合は別に起動し、ターゲットを設定する必要があ
ります。
(2) ターゲットを特定のモジュールに関連付けることもできます。デフォルトのモジュールをロードし
たとき、内部メモリに保存されたターゲットが接続されます。異なるターゲットに関連付けられた
モジュールをロードしたときは、ダイアログが表示され、ターゲット接続の変更を実行または無視
することができます。このダイアログには、ダイアログを再表示しないようにする [常に適用] チェ
ックボックスがあります。
変更を無視する場合、デバッガは既存の接続を使用しますが、その後もダイアログは表示されま
す。「ターゲットのモジュールへの関連付け」参照。
ターゲットへの接続
既存のデバッガ セッション中に、デバッガが接続されているターゲットを変更できます。
ターゲットに接続するには、次の手順に従います。
(1) [ツール] メニューで [ターゲットの選択] をクリックし、[ターゲットの選択] ダイアログを表示しま
す。
メモ: 接続中のターゲットを変更した際、以前のターゲットに接続されたままである可能性がありま
す。Target Managerでターゲットの接続ステータスを確認し、必要なくなったセッションは接続解除
してください。
複数ユーザーによる 1 台のターゲット上でのデバッグ
デバッグを行う場合は、1 台のターゲットに 1 人のユーザーのみが接続できます。デバッガが接続を試行
しているターゲットに既に他のユーザーが接続している場合は、ダイアログ ボックスにターゲット セッ
ションが表示され、このダイアログ ボックスで別のセッションを選択することになります。
Target Manager では、ターゲットに接続しているユーザーの ID を確認できます。『ProDG Target
Manager ユーザーガイド』』を参照してください。 別のユーザーが接続しているターゲットを使用する
場合は、そのユーザーに直接問い合わせてください。
実行ファイルの読み込みと実行
ターゲット上の実行可能ファイルは、デバッガから直接ロード、実行することが可能です。コマンドライ
ン上で実行可能ファイルを指定していない場合、デバッガを起動して実行可能ファイルをロード、 実行
できます。あるいは新たにビルドされたアプリケーションをロードする場合は、ターゲットを交換した後
にロード、実行できます。
実行可能ファイルのロード
ターゲットに新しい実行可能ファイルをロードするには、次の手順に従います。
(1) [ファイル] メニューで [ロード] をポイントした後、[実行ファイル] をクリックして [実行ファイルの
ロード] ダイアログを表示します。
デバイスからロード ファイルの通常のダウンロード設定をオーバーライドし、ユーザ
ー定義のパスを適用します。このオプションを選択すると、ブラ
ウザ コントロールが選択できなくなります。「デバイスからのロ
ード」を参照。
できます。
実行ファイルをダウンロード 記号情報に加えてファイルの実行可能部分をダウンロードしま
す。
ダウンロード後に実行 ファイルがロードされ次第、実行ファイルを実行するよう設定し
ます。この設定は、main() で停止するデフォルト設定より、優先
されます。
デバッグ情報のみをロード デバッグ情報のみをロードします。
TTYストリームをクリア 実行ファイルをロードする前にすべてのTTYストリームを空にし
ます。
デバイスからのロード
[実行ファイルのロード] ダイアログで [デバイスからロード] チェックボックスが選択されている場合、
ロードを行う実行可能ファイルがハード ドライブ、ブルーレイ エミュレータ、USB デバイスまたはメモ
リ スティックのいずれかのターゲット上に存在していることを意味します。
ここでは、以下のようにファイル パスの先頭に文字列を追加することにより、別のデバイスを選択する
こともできます。
デバイスからのロード時にシンボルを読み込む
アプリケーションのデバッグを行うためにシンボルをロードする方法は、以下のように 2 通りあります。
• デバイス上の実行可能ファイルにデバッグ情報が含まれていない場合、ファイル ブラウザ コントロ
ールを使いシンボルを含むファイルを選択してください。実行可能ファイルがターゲット上にロー
ドされる間に、デバッグ情報がこのファイルから読み取られます。
• デバイス上の実行可能ファイルにデバッグ情報が含まれている場合には、[実行ファイルのロード] ダ
イアログで [デバイス ファイルからシンボルをロードする] を選択します。
デバッガは実行可能ファイルをローカル マシン上の一時フォルダにコピーし、シンボルをロードし
ます。
注意:デバイスからシンボルを転送するには数分かかることがありますが、転送は、ローカル ファイ
ルとターゲット ファイルが異なる場合にだけ、実行されます。
実行可能ファイルのリロード
既にターゲットにロードされている実行可能ファイルをリロードするには、[デバッグ] メニューで [リセ
ット&リロード] を選択します。「[デバッグ] メニュー」を参照してください。
相対ベース ディレクトリの設定
この機能では、相対パスを含む実行ファイルに対して、パス情報 (通常はプロジェクト ファイルや make
ファイルの場所に対する相対パス) の開始点として使用するディレクトリを指定できるため、デバッガが
正しいソース ファイルを特定できるようになります。
相対ベース ディレクトリがない場合、デバッガはファイル検索を始める場所がわからないため、デバッ
ガ自体の場所が開始点として使用されますが、たとえば、相対ベース ディレクトリが
「C:\code\mygame\build\ps3」にセットされている場合、ファイル名参照が
「..\..\source\gameengine\ai.cpp」になっていると、実際には
「C:\code\mygame\source\gameengine\ai.cpp」が参照されます。
ゲームの実行
デバッガを起動して実行ファイルをダウンロードした後は、それをターゲット上で実行することができま
す。提供されているコマンドを使い、アプリケーションの実行を任意の時点で開始または停止できます。
ソースまたは逆アセンブリにブレークポイントを設定することや、アプリケーションの中をシングルステ
ップして移動することもできます。 以下のセクションで、[デバッグ] メニューのターゲット制御コマン
ドを使用して、アプリケーションの実行を開始または中止する方法を解説します。ブレークポイントやア
プリケーションのステッピングを設定する方法については、「プログラム実行の中止」をご覧ください。
アプリケーションの再起動
アプリケーションはいつでも再起動できます。現在アクティブなモジュールのプロパティで「ターゲット
のリセット」が設定されている場合、ターゲットはリセットされ実行ファイルが再びロードされます。
• [デバッグ] メニュー、またはツールバーの [リセット&リロード] をクリックします。
アプリケーションの起動
ターゲット上でアプリケーションが実行中止した場合 (ブレークポイントに到達したため、メイン サブ
ルーチンでストップしたため、など)、デバッガから再実行可能です。
プログラム カウンタからアプリケーションを再起動するには、次の手順に従います。
• [デバッグ] メニューの [実行] をクリックするか、ツールバーの [ターゲットを開始] をクリックしま
す。
アプリケーションの実行が開始され、レジスタ ビューに「Running (実行中)」と表示されます。
アプリケーションの中止
ブレークポイントや例外でアプリケーションが実行中止していない場合は、以下の手順に従っていつでも
手動で中止できます。
• [デバッグ] メニューの [停止]、またはツールバーの [ターゲットを中止] をクリックします。
ターゲット上でアプリケーションの実行を中止すると、その他の開いているビューが更新され、新
プログラム カウンタ位置に現在の情報が表示されます。
ソースビューや逆アセンブリ ビューで [PC に移動] コマンドを使用すると、プログラム カウンタの現在
位置が閲覧できます。また、ソースビューか逆アセンブリ ビューのどちらかをアクティブにしておく
と、ターゲットが実行中止した時に自動的に内容が更新され、現在のプログラム カウンタの位置を表示
できます。
オブジェクト モジュールのロード
Object Module Loading (OML) を使うと、ビルド ― デバッグのサイクルにかかる時間が短縮されます。
この機能により、実行中のデバッグ セッションを中断したり、リセット ― リロード サイクルを行うこと
なく、実行時に個別モジュールの置換が行えるようになります。また、「自動」オブジェクト読み込み機
能を使えば、プログラムがビルドされてから変更が加えられたすべてのオブジェクト ファイルが置換で
きます。「オブジェクト モジュールの自動ロード」を参照してください。
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
となります。
メモ: 完全リンクを実行する必要はありません。
(2) [ファイル] メニューから [ロード] > [オブジェクト ファイル] の順に選択、または [デバッグコントロ
ール] ツールバーから [コード置換] ボタンをクリックします。
• 灰色 - 読み込まれたモジュールはありません
• 黒 - 1 つまたは複数のモジュールが読み込まれています
• クロックの表示 - 1 つまたは複数のモジュールがキューにあり、読み込まれるのを待機しています
アイコンのツールチップには現在読み込まれ、キューに入れられているモジュールの数が表示され
ます。
(5) [オブジェクト モジュール] アイコンをダブルクリックすると、[オブジェクト モジュール ローダー]
ダイアログ ボックスが呼び出されます。
#include <windows.h>
#include <stdio.h>
#define APP_LOAD_OBJFILE 0
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"
デバッガで「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) [ファイル] メニューから [ロード] > [オブジェクト ファイル: オート] の順に選択、または [デバッグ
コントロール] ツールバーから [自動コード置換] ボタンをクリックします。
SimpleExample1
このチュートリアルでは、VS2008 のソリューションを使い、コンソール モジュールからあるテキストを
一度出力してから、プログラムをリロードすることなしに出力を編集します。
(1) Visual Studio で OML Tutorial_vs2008.sln を開き、SimpleExample1 を [スタートアップ プロジェク
ト] として設定します。
(2) [デバッグ] メニューで [デバッグ開始] をクリックします。
ProDG Debugger が起動され、アプリケーションが読み込まれます。
プロジェクトのビルドを行うかどうか聞かれます。[はい] をクリックします。
SNCube
SNCube プロジェクトは C++ プログラムで、3D グラフィックス ライブラリ PSGL (OpenGL の実装版) を
使用してテクスチャード加工の立方体を表示するものです。
このチュートリアルでは、サンプルにいくつかのデバッグ コードを追加した後、変更内容を適用してバ
グを修正することにより、一回のデバッグ セッションで複数オブジェクトの置換を行います。
ヒント: 実行は、読み取りが難しければ区切ることができます。
(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) [スマート キャプチャ] ボタンをクリックし、立方体を [イメージ キャプチャ] ビューに表示しま
す。
コア ダンプ ファイルのロード
デバッガでは、クラッシュ発生時に開発ハードウェア によって生成されるコア ダンプ ファイルのロード
がサポートされています。これは、ターゲット メモリやレジスタなどを分析し、問題の原因を特定する
ためです。コア ダンプ ファイル (ps3core-*-EBOOT.BIN.elf) とシンボル ファイル (.elf) を指定することに
より、デバッガでは、コア ダンプ情報をシンボルとソース コードにリンクできるようになります。
コアダンプ ファイルをロードするには、次の手順に従います。
(1) コア ダンプ ファイルをホスト PC に転送します。ゲームの実行中に Target Manager を接続させる場
合、このオプションを使用して app_home に (ユーザー PC のハードドライブに直接) コア ダンプを
書き込みます。これを行わない場合は、メモリ スティックを使用して dev_ms にコア ダンプを書き
込みます。
(2) [ファイル] メニューで [ロード] をポイントし、続いて [コア ダンプ] をクリックすると、コア ダンプ
ファイル名とシンボル情報のロード元である ELF ファイル名の入力を行う、ダイアログが表示され
ます。
PRX のデバッグ
PRX をデバッグする場合、必須モジュールのシンボルを含む「.prx」ファイルのパスを、PRX ファイル
検索パスに追加します。「検索ディレクトリ」を参照してください。
ここでは、エクスポートした PRX 関数へのステップ実行に関する制限があります。エクスポートされた
PRX 関数に対するコールへのステップ実行後、デバッガには、一部の PRX バインディング コードの逆ア
センブリが表示されます。ここから、後続する bctr 命令にステップ実行すると、PRX コードが表示され
ます。
インライン関数
デフォルトでは、SNC ツールチェーンはインライン関数に対してデバッグ情報を出力しません。しか
し、-Xinlinedebug コンパイラ スイッチを使うと、コンパイラによるデバッグ情報出力のレベルを次の
ように指定することができます。
-Xinlinedebug=0 インライン関数に関するデバッグ情報はありません。
デバッガで混合されたソースや逆アセンブリを閲覧すると、ソース コードの
関数呼び出しに続き、そのインライン化された関数の生の逆アセンブリが確
認できます。これがデフォルト設定となります。
SELF サポート
ProDG では、複数の SELF ファイル形式 (MSELF) に対応しており、複数のファイル (SELF、SPRX、およ
び各種データ ファイル) を 1 つのファイルにアーカイブできます。追加の検索ディレクトリが正しく設定
されており、MSELF ファイルへ含める前のオリジナル ファイルへのポイントが正しく行われている限
り、MSELF ファイルからロードされた SPU イメージや PRX モジュールのデバッギングをサポートする
ための、追加ステップは必要ありません。このファイルには、デバッグ情報が含まれている必要がありま
す。
SPU イメージの場合、デバッガではGUIDS を検索するためにメモリのスキャンが行われ、SPU 検索パス
を使用してローカル コンピュータ上に存在するイメージとのマッチングが行われます。詳細は、「検索
ディレクトリ」を参照してください。
5: プログラムのブラウズ
この章では、プロジェクトの利点について、およびワークスペース ビューに含まれる 3 つのタブの使用
方法について説明します。
この章には、以下のセクションがあります。
• プロジェクトの使用
• プロジェクト ビュー
• ファイル ビュー
• ブラウズ ビュー
プロジェクトの使用
デバッガはプロジェクトのコンセプトに連結しています。それらは 1 つ以上のモジュール (実行ファイ
ル、ELF ファイルなど) のコンテナとして作動します。ウィンドウ レイアウトおよびターゲット接続情報
も保存できます。これにより、見ているプログラムの領域によって異なるウィンドウ レイアウトを持つ
ことができます。
プロジェクトは.snproj ファイル形式で保存されます。
プロジェクト内のそれぞれのモジュールは、ロード フラグ情報 (リセット ターゲット、メイン実行な
ど)、ファイルサーバー ディレクトリ、ターゲット情報を保存します。このため、毎回この情報を指定し
ないでモジュールをロードすることができます。
プロジェクト ファイルの利用方法はさまざまです。
例:
• 1つのプロジェクトにモジュールを1つにして、個別ウィンドウを維持します。
• プロジェクトに複数モジュールがある場合 1 つがメインモジュールになり、その他はメインをロー
ドする前にロードされるヘルプ モジュールになります。
• 単一プロジェクトにある 2 つのモジュールは、異なるターゲットで実行されます。アクティブ ター
ゲットはそれぞれのモジュールをロードするたびに自動切り替えされます。
詳しくは、「プロジェクトのオプション」を参照してください。
ワークスペース ビューの使用
ワークスペース ビューによって、プロジェクトのファイル、機能、グローバル変数およびクラス定義を
ツリー状ビューに表示できます。それには、実行ファイル内のシンボル データを使って行います。
ワークスペース ビューは、プロジェクト ビュー、 ファイル ビュー、ブラウズ ビューの 3 種類です。こ
れらは、ビュー上部のタブで選択できます。
ル変数をブラウズする際に使用します。各クラスには方法および静的メンバ
に関するサブアイテムが含まれます。[ブラウズ ビュー]はクラス、関数、お
よび変数という名称の 3 つのフォルダを含み、すべてのクラス タイプ、グ
ローバル関数およびグローバル変数が各々のフォルダに含まれます。
フォルダの内容を見る場合、たとえばファイル内の全関数のリストを表示させる場合、[+] 記号をクリッ
クしてフォルダを展開できます。クラス フォルダを展開すると、プロジェクト内のすべてのクラス定義
が表示されます。 各クラス定義は順に展開され、すべての方法および静的メンバ変数のリストが表示さ
れます。
[-] 記号をクリックすると、フォルダを折りたたむことができます。
ワークプレース ビューのブラウズ項目の上にマウスをしばらく置くとその項目の評価をします。このよ
うにしてアドレス、現在の値などを表示します。
ワークスペースビューのオプション
ワークスペース ビューには、ビューの機能性を高めるため有効/無効に設定できるいくつかのオプション
があります。これらのオプションは、[オプション] ダイアログの [ワークスペース] セクションで設定で
きます (「ワークスペース設定」参照)。
「存在するファイルのチェック」オプション
これを有効にすると、ファイル ビュー中のプロジェクト項目が初めて展開された際、ファイルがあるか
どうか判断するため、ビューは各ファイルを開こうとします。これを無効 (デフォルト) にすると、その
ような確認は行われず、ファイルはすべて存在するものとビューは見なします。
メモ:これを使用すると、プロジェクト項目の最初の展開速度が低下します (特にファイルがネットワ
ーク ドライブ上にある場合)。
「存在しないファイルを表示」オプション
この機能が無効の場合には、検索できなかったファイルはファイル ビューに追加されません。この機能
は、インストールされていない、すべての第三者のライブラリ ソース ファイルを廃棄します。有効の場
合には、すべてのソース ファイルがファイル表示に追加されます。しかし、これらファイルを見分ける
ため、ファイルの名前は他のファイル名より明るい色で表示されます。さらに、実在しないファイルだけ
が入ったフォルダも他のフォルダより明るい色で表示されます。
「ファイル内の関数を表示」オプション
これが有効にされている場合、ファイル ビュー内に表れたソース ファイル項目は、その内部で宣言され
た関数であれば、どれでも展開して表示することができます。ファイル内で関数が宣言されていなけれ
ば、展開/折りたたみ制御は消滅します。
プロジェクト ビュー
このビューでは、プロジェクトのすべてのモジュールをリスト表示します。太文字で表示されているモジ
ュールがデフォルト モジュールです。デフォルト モジュールは、メイン メニューまたはツールバーから
[リセット & リロード] を選択するたびにロードされます。
削除 プロジェクト モジュールを削除します。
複製 プロジェクト ビューで選択されたモジュールをコピーします。これによ
り、プロジェクト ビューに同じモジュールが何度も表示されますが、これ
らはそれぞれ異なるロード フラグ/オプションで設定されます。
シンボルのロード シンボルをロードします。
シンボルのアンロード シンボルをアンロードします。
名前の変更 モジュールの名前を変更できます。
モジュールの追加
以下の方法でプロジェクトにモジュールを追加できます。
• ワークスペース ショートカット メニューで、プロジェクト ビューをポイントし、[サブアイテムの
追加] を選択します。表示されている [ファイルを開く] ダイアログでモジュールが追加できます。
• [ファイル] メニューで、[実行ファイルのロード] をクリックするか、[実行ファイルのロード] ツー
ルバー ボタンを使って、モジュールを追加します。ロードされた実行ファイルは自動的にプロジェ
クトに追加されます。詳しくは、「実行可能ファイルのロード」を参照してください。
• PRX ファイルは Windows エクスプローラからドラッグし、ワークスペース ビューにドロップでき
ます。
モジュールのプロパティ
[モジュールのプロパティ] ダイアログには、選択したモジュールのオプション シートが表示されます。
モジュールを選択して、ダイアログ左側の[モジュールのプロパティ] を選択すると、現在のオプション設
定がダイアログ右側に表示されます。
デバイスからロード ファイルの通常のダウンロード設定をオーバーライドし、ユーザー定
義のパスを適用します。このオプションを選択すると、ブラウザ コン
トロールが選択できなくなります。「デバイスからのロード」を参照
してください。
ます。
ターゲットをリセット 実行可能ファイルがロードされる前にターゲットをリセットします。
実行ファイルを 記号情報に加えてファイルの実行可能部分をダウンロードします。
ダウンロード
ダウンロード後に実行 ファイルのロード直後に実行ファイルの実施を開始します。この設定
は、main() で停止するデフォルト設定より優先されます。
デバッグ情報のみをロード デバッグ情報のみをロードします。
古いブレークポイントを ProDGデバッガでプログラムに設定されていたすべてのブレークポイ
破棄 ントを破棄するよう設定します。
ターゲットのモジュールへの関連付け
プロジェクトに複数のモジュールがある場合、それぞれのモジュールを特定のターゲットに関連付けるこ
とができます。その後、同等のモジュールがロードされたときに、そのターゲットを変更することもでき
ます。「ターゲットへの接続」を参照してください。
ターゲットとモジュールを関連付けるには、次の手順に従います。
(1) [プロジェクトのオプション] ダイアログ ボックスの [ターゲットをモジュールに関連付ける] チェッ
ク ボックスを選択します (「プロジェクトのオプション」 を参照)。
(2) [ワークスペース] ビューで、[プロジェクト] ビューを選択します。利用可能なモジュールのリストか
ら、関連付けしたいモジュールを右クリックして、[プロパティ] を選択します。
(3) [ターゲット] をクリックします。
(4) 右側のペインで、ターゲットを関連付け用に選択したモジュールに指定します。
(5) このモジュールに該当するボックスにチェックをします。
(a) 常に:終了するときは常に接続を切る。
(b) 状態を維持:現在の接続状態を保持する。
(c) しない:終了時に接続を切らない。
(6) [OK] をクリックします。
モジュールのリセット パラメータの設定
特定のモジュールにリセット パラメータを設定するには、次の手順に従います。
(1) [ワークスペース] ビューで、[プロジェクト] ビューを選択します。使用可能なモジュールのリスト
で、リセット パラメータを設定するモジュールを右クリックし、[プロパティ] を選択します。
(2) [リセット パラメータ] をクリックします。
モジュールに対して検索パスを設定
特定のモジュールに対して検索パスを設定することができます。これらはグローバル検索パスに加えて機
能するため、プロジェクト内の全モジュールにわたる包括的な検索パスを設定することができ、さらに特
定のモジュールにのみ関連する付加的な検索パスを追加することができます。
モジュールに検索パスを設定するには、次の手順に従います。
(1) [ワークスペース] ビューで、[プロジェクト] ビューを選択します。利用可能なモジュールのリストか
ら、検索パスを設定したいモジュールを右クリックし、[プロパティ] を選択します。
(2) [検索ディレクトリ] をクリックします。
(3) 右側のペインで、利用可能なカテゴリに対して検索パスを追加します。検索パスの設定に関する詳
細は、「検索ディレクトリ」を参照してください。
(4) [OK] をクリックします。
モジュールへのパス マッピングの設定
特定のモジュールにパス マッピングを設定するには、次の手順に従います。
(1) [ワークスペース] ビューで、[プロジェクト] ビューを選択します。選択可能なモジュールのリストか
ら、パス マッピングを設定したいモジュールを右クリックし、[プロパティ] を選択します。
(2) [パス マッピング] をクリックします。
ステップ制御フォルダの設定
特定モジュールに対するステップ制御フォルダを設定するには、次の手順に従います。
特定のモジュールに対し、ステップ制御フォルダを設定することが可能です。これらはグローバル ステ
ップ制御フォルダに加えて動作するため、プロジェクト内の全モジュールにわたって一般的なフォルダ
(STL など) を使用することができる一方、特定モジュールに関連する付加的フォルダを追加できます
(例:コードの該当領域で作業していない場合、レンダリングや物理に関するファイルのステップを停止
する)。
(1) [ワークスペース] ビューで、[プロジェクト] ビューを選択します。利用可能なモジュールのリストか
ら、検索パスを設定したいモジュールを右クリックし、[プロパティ] を選択します。
(2) [ステップ制御] をクリックします。
(3) 右側のペインに、ステップインしたくないフォルダの検索パスを追加します。検索パスの設定に関
する詳細は、「検索ディレクトリ」を参照してください。
(4) [OK] をクリックします。
ステップ制御で無視する関数を指定
特定モジュールに対し、制限ステップ コマンドで無視する関数を指定するには、次の手順に従います。
特定モジュールに対し、「制限ステップイン」処理中に無視するグループ関数や個別関数を指定すること
ができます。これらは、関数におけるグローバル ステップ制御制限と共に動作します。詳細は、「ステ
ップ制御」を参照してください。
無視する関数に関するルールは、正規表現を使用して定義できます。詳細は、「正規表現」を参照してく
ださい。
(1) [ワークスペース] ビューから [プロジェクト] ビューを選択します。利用可能なモジュールのリスト
から、検索パスを設定したいモジュールを右クリックし、[プロパティ] を選択します。
(2) [ステップ制御] をクリックします。
[実行制御]
10 FW.* No Step Into
20 FWWindow\:\: Step Into
20 FWCellGLWindow\:\: Step Into
「ステップインしない」ルールはコマンドラインからもインポートできます - 詳細は、「デバッガの
コマンドライン」を参照。
ファイル ビュー
アイテムの検索 表示中のリストから項目を検索できます。
次を検索 最後に実施したアイテムの検索操作を繰り返します。
実行 選択された関数を開始するまでプログラムを実行します。ソース ビュー
はこれを反映するために更新します。
す。
参照ビュー
アイテムの検索 表示中のリストから項目を検索できます。
実行 選択された関数を開始するまでプログラムを実行します。ソース ビュー
はこれを反映するために更新します。
ウォッチへの追加 選択した変数を監視ビューに追加します。
参照のプロパティ 選択した変数のプロパティ情報を含むメッセージウィンドウを表示します。
関数の参照
ソース ビュー、逆アセンブリ ビュー、ブレークポイント ビューの関数ブラウザを使用すると、含まれる
関数に応じて、アプリケーション ソースや逆アセンブリ内を移動することができます。さらに、ブレー
クポイントをグローバルに特定の関数に設定したり、解除できます。
関数ブラウザを開くには、ソース ビューまたは逆アセンブリ ビューのショートカット メニューにある
[関数の参照] コマンドを使用します。
名称のデマングル
関数名のデマングルはps3demangle.dll により行われます。「デマングルされた」C++ 関数名は、「マン
グルされた」関数名の代わりにデバッガ内各種ビュー (たとえばブレークポイント ビューやコールスタッ
ク ビュー)に表示されます。
マングルされた関数名を確認したい場合には、ps3demangle.dll を ProDG プログラム ディレクトリから
移動するか、ファイル名を変更してください。デバッガがこの DLL を検出できないときは、「マングル
された」関数名をそのままにして、自動的に「デマングルされた」関数名には変換しません。
6: 式
この章では、式の使用方法、および情報の表示をカスタマイズする方法について説明します。
この章には、以下のセクションがあります。
• 式の使用
• 式のビルド
• 式の評価
• 変数の自動展開
式の使用
デバッガ使用中は、式入力が必要に感じたり、またはそうした方が便利なときがあります。式には、16
進法の定数や C 変数などの単純なものから、配列からポインタを脱参照して得られる構造タイプキャス
トメンバなど、複雑なものまであります。
ProDG デバッガでは、プログラムにあることがわかっている変数と、広範な選択肢から選べる C および
C++ スタイルの演算子を使用して、こうしたすべての式をビルドできます。
また、式をその場で評価して、正しく定義したかどうかを確認することもできます。
• 式とアドレスの評価機能は、すべてのアクティブなシンボル テーブルを使用して式を評価します。
式は、デバッガのダイアログからアドレスや式、値を尋ねられた場所なら、どこでも使用できます。ウォ
ッチ ビューやローカル ビューは、絶えずこの式を参照するため、式のすべての機能を活用するには、そ
の働きを理解することが重要です。
数式の入力
[数式の入力] ダイアログは、ウォッチ ビューにウォッチを追加するときに、数式を入力するために使用
します。
[詳細] ボタンをクリックすると、以下のようなオプションが表示されます。
以前に入力された式 (履歴エントリ)
自動入力ボタン を使用すると、部分的に補完した名称を使い、その部分的文字列で始まるすべての変
数のリストを表示することで、変数名の入力を高速化できます。
• 名称の補完機能は、すべてのアクティブなシンボル テーブルで名称を検索します。
検索文字列と一致する名称が複数検出された場合は、[名前の自動完了機能] ウィンドウが表示されます。
たとえば、「d」と入力して自動入力ボタンをクリックすると、下図のように「d」という文字で始まる
名称のリストが表示されます。必要なものをダブルクリックで選択できます。
各シンボルは、そのタイプを反映するアイコンと共に表示されることに注意してください。水色のダイヤ
モンドは変数、ピンクのダイヤモンドは関数、ツリーはクラスまたは構造体です。
アドレスの入力
[ソース] ビューの [アドレスに移動] 機能では、[数式の入力] ダイアログが表示されます。
[数式の入力] ダイアログには、以下の機能が用意されています。
• 名称の補完
• クリップボードから、またはクリップボードへ、式/アドレスのコピー&貼り付け
• ドロップダウン メニューからアクセスできる最近使用した式またはアドレスの履歴
メモ:[アドレスに移動] 機能は、現在の範囲内にある関数に対してのみ場所を特定できます。たとえ
ば、プロジェクトに 2 つ以上の名前領域が存在する場合、この機能では現在の名前領域内にある関数
に対してのみ、場所が特定されます。プロジェクト内の関数を参照するには、常に [関数ブラウザ]
(Alt+B) の使用をお勧めします (「関数の参照」を参照)。
式のビルド
式の主な要素は、数値と変数名です。
• 数値は、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
式の評価
式内の名称検索順序
式中の名称を検索する順序は、以下のとおりです。
(1) 退避させたレジスタ名 ($が先頭についた名称)
(2) C名
(3) ラベル名
式評価機能でのコンテキスト指定子オペレータ
デバッガが、複数回発生する静的変数名の特定のインスタンスを解決できるようには、式評価機能に対し
てコンテキスト指定子オペレータを使用します。
現在は、スタック フレームが指定できます。
コンテキスト指定子の書式は次のとおりです。
{ <attribute list> } <unary-expression>
メモ: 属性名は、一意に識別できる最低の長さにまで省略することができます。たとえば、'f:' は
'file:' と解釈されます。
属性の詳細を以下に示します。
例:
{ stack:main } loopnum
ソースビューでのホバー評価
コード行の上にマウスのカーソルを置けば、すぐに式を 評価できます。カーソルの下にある式が評価さ
れると、その結果が下図のようなポップアップ へルプに表示されます。
変数の自動展開
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}>
...
上記の「=」、「<」、「,」の文字は実際に挿入しますが、「{}」は任意のエレメント、「...」は繰り返し
挿入される任意のエレメントを表します。
例:
Vector3=x=<x,i> y=<y,i> z=<z,i>
DateTime=<日>/<月>/<年> <時間>:<分>:<秒>
拡張構文
自動展開ファイルの拡張構文は、以下のようになります。
[Visualizer]
type{
preview block
children block
}
「{」と「}」文字の中は必須です。
ビットフィールド指定子
ビットフィールド エレメントは、以下の方法で宣言します。
start position: number of bits
フォーマット指定子
文字 説明 サンプル 表示形式
プレビュー ブロック
preview (
preview expression
)
プレビュー ブロックは、ウォッチに従って値フィールドに表示されるテキスト、およびウォッチされる
変数のフローティング ツールチップを決定するために使用されます。
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
)
)
)
)
条件ステートメント
条件ステートメント (#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
) : $e._Myval,
)
Tree ステートメント
#tree ステートメントには、head、size、left、right の 4 つのキーワード表現が必要とされます。
「$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 またはそれ以上")
)
7: ソースおよび逆アセンブリの閲覧
この章では、開発ハードウェア上でソース コードや逆アセンブリ コードを表示する方法について説明し
ます。また、コード内の潜在的ストールを検出するパイプライン分析も取り上げます。
この章には、以下のセクションがあります。
• ソースの閲覧
• 逆アセンブリの閲覧
• ソースと逆アセンブリ内の検索
• パイプライン アナライザ
ソースの閲覧
デバッガでは、プログラムのソースを閲覧し、ソース内を移動することができます。
現在のプログラム カウンタの位置がソース コードで閲覧できる場合は、ソース ペインを開くだけでソー
スを閲覧できます。
• [ウィンドウ] メニューで [新しいビュー] をポイントし、[ソース] をクリックするか、[ソース] ツー
ルバー ボタンをクリックします。この操作によって、ソースビューを持つ新しいウィンドウが開き
ます。
• ソースでプログラム カウンタを見られない場合、またはソースファイルの場所が不明な場合、「ソ
ース ファイルがロードできません」というメッセージが表示されます。
ターゲットが実行を停止しているときはいつでも、ソースビューが開いていれば、ソース ( 文字で表
示) のプログラム カウンタの現在位置を表示して更新します。
• ソース ビュー ショートカット メニューの [PC へ移動] オプションを使用すると、素早く新しいプロ
グラム カウンタ位置に移動できます。
ソースファイルの配置
デフォルトでは、デバッガはアプリケーションのソースファイルを、ELF/PRXファイルがビルドされた
ときの場所を元に検出します。しかし、ソースファイルが後で移動された場合は、必要なファイルを検出
できるよう、新しいパスを指定する必要があります。ソース検索パスの設定についての詳細は、「検索デ
ィレクトリ」を参照ください。
ターゲットで現在実行されているソース コードの行だけでなく、他のどのソース ファイルも閲覧できま
す。
ソース ファイルの場所を特定するには、次の手順に従います。
(1) ソース ビューで右クリックし、 [ソースファイルを開く] を選択します。
(2) 表示されたダイアログで必要なソース ファイルを探して選択します。
新しいソース ビュー タブが開き、選択したソースファイルの内容が表示されます。このビューは、
プログラム カウンタを含むソースビューと同様に使用でき、このファイルでブレークポイントを設
定したり、必要に応じて内容を閲覧できます。
(3) ソース ビューの複数のタブを前方スクロールするには、[次のファイル] ショートカット キー (デフ
ォルトでは Ctrl+等号キー) を押します。
(4) ソース ビューの複数のタブを後方スクロールするには、[前のファイル] ショートカット キー (デフ
ォルトでは Ctrl+マイナス記号) を押します。
(5) ソース ファイルを閉じるには、ビューを選択して [ソース ファイルを閉じる] ショートカット キー
(デフォルトでは Shift+F4) を押します。
メモ: ソース検索パスを通じて、そのもともとの場所以外からファイルをロードしている場合、[ソ
ースファイルをロード] を使用してファイルをロードすると、デバッガはオブジェクトコードとの関係
このダイアログには、左の列からファイル名、ビルド時の場所、ファイルの最終変更日時が表示され、フ
ァイルが存在しない場合は「ファイルが見つかりません」と表示されます。
ファイルは最初、ファイル名のアルファベット順に表示されますが、列ヘッダをクリックすると、場所順
や日時順に変更できます。また列をダブルクリックすると、昇順/降順を切り替えることもできます。
1 つまたは複数のファイルを選択して [OK] をクリックすると、アクティブになっている [ソース] ビュー
内にファイルが開きます。
ソース ビュー
ソース ビューでは、現在ターゲット上で実行されているアプリケーションのソースを閲覧できます。
式チップ
ソース ビューでは、ツールチップが式チップに置換されます。基本的なツールチップ情報の表示 (式の評
価や値の表示) に加え、式チップでは値の編集が可能となります (式をウォッチ ビューにコピーしてそこ
で変更する必要がありません)。
式チップの概観と機能は、フローティング ウォッチ ビューを小型化した感じになります。すなわち、式
チップには 2 つの列が含まれ、左の列には式名が、右の列には値が表示されます。
マウス ポインタが置かれている式が展開可能な場合、式チップの左側には展開ボックスが表示されま
す。マウス ポインタをこの上に置くと、該当オブジェクトのメンバ アイテムを含むさらなる式チップが
作成され、展開可能な任意のメンバ アイテムに対しても同様に処理されます。
式チップを右クリックすると、式において実行可能な追加処理を含むショートカット メニューが表示さ
れます。
式をコピー 式の名前をクリップボードにコピーします。
値をコピー 関連データをクリップボードにコピーします。
異なる場所にビルトインされているコードの閲覧
移動されていたり、異なる場所にビルトインされている SELF ファイルを読み込むと、デバッグ情報とし
ては SELF ファイルのオリジナルの場所に基づいたソース ファイル情報が利用されます。このため、デバ
ッガはソース コードを探し出すことができなくなります。このようなケースにはダイアログ ボックスが
表示され、ソース ファイルの場所を特定するよう促されます。
たとえば、プロジェクトが次のフォルダ内にビルトインされている場合を見てみましょう。
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) ファイル内に保存され、次にこの
プロジェクトが読み込まれると再利用されます。
検索 ソース ファイルのテキストを検索するためのダイアログを開きます。テキス
トが検出されたら、そのテキストを含む行がカーソルで示されます。
表示 [表示] サブメニューにアクセスします。「表示サブメニュー」を参照。
定義に移動 カーソルが置かれている関数名の開始点まで移動します。
アドレスに移動 見たいビューの特定のアドレスをメモリに入力するダイアログを開きます。
16 進数のアドレスを入力する場合は、それに 0x を付けます。必要なアドレ
ス、記号、式などを入力して閲覧したいメモリ部分を指定できます。シンボ
ル名の最初の文字を入力した場合には、[自動入力] ボタンを使用すると、ア
プリケーションで利用可能なシンボルのリストが提供されます (「アドレス
の入力」を参照)。
モジュールへ移動 埋め込みモジュールの開始点に移動します。
ソースに 移動 選択された行番号が中心になるようにソースを変更します。
関数の参照 アプリケーションの関数に沿ってソースを閲覧できるダイアログを開きま
す。さらに、このダイアログからアプリケーションの特定の関数にブレーク
ポイントを設定したり、ブレークポイントを解除できます。
ブックマークの追加 現在の行にブックマークを設定/削除します。ブックマークは左のマージン
/削除 に薄青色で表示されます。
次のブックマーク 次のブックマーク行の開始点にカーソルを配置します。この機能を使用する
と、それ以降ブックマークがない場合には、ファイルの始まりから検索が行
われます。
前のブックマーク 前のブックマーク行の開始点にカーソルを配置します。この機能を使用する
と、前のブックマークがない場合には、ファイルの終わりから検索が行われ
ます。
ブックマークを ブックマークをすべて削除します。
クリア
ブレークポイントの 現在の行にブレークポイントを設定します。ブレークポイントは左のマージ
追加 ンに茶色の点で表示されます。
スレッド特有の スレッド特有のブレークポイントを設定します。「スレッド特有のブレーク
ブレークポイントの ポイント」を参照。
追加
トレースポイントの 現在の行にトレースポイントを設定します。「トレースポイント」を参照。
追加
ブレークポイントの 現在の行のブレークポイントを無効にします。
無効化
ブレークポイントの 現在の行のブレークポイントを削除します。
削除
すべてのブレーク ブレークポイントをすべて削除します。
ポイントを削除
カーソルまで実行 現在の行までプログラムを実行します。「>」記号が指定行へ移動し、プロ
グラム カウンタがリセットされたことが確認できるはずです。
アドレスまで実行 プログラムのアドレスを選択できます。
ファイルの更新 選択したファイルを更新します。
表示サブメニュー
逆アセンブリの閲覧
逆アセンブリビューが開いている場合、ターゲットが実行中止する度にビューの内容が更新され、アプリ
ケーション逆アセンブリ内のプログラム カウンタの現在位置が表示されます ( マークで表示)。
プログラム カウンタの現在位置を含む新しい逆アセンブリ ビューを開くには、次の手順に従います。
• [ウィンドウ] メニューで [新規ビュー] をポイントして [逆アセンブリ] をクリックするか、[逆アセン
ブリ] ツールバー ボタンをクリックします。
逆アセンブリ ビューを含む新しいウィンドウが表示されます。このビューには、現在実行されてい
るコードの逆アセンブリが表示されます。[PC に移動] コマンドを使うと、プログラム カウンタが閲
覧できます。
逆アセンブリ ビュー
逆アセンブリ ビューはプログラム コードの逆アセンブリの閲覧に使用されます。このビューには、ソー
ス コード、アドレス、オペコード、逆アセンブリが表示されます。
PPU メモリに組み込まれた SPU コードは、「.spu_image」と呼ばれるセクション内にある場合、逆アセ
ンブリ ビューによって自動的に検出されます。続いて、そのメモリが SPU コードとして逆アセンブルさ
れ、別の色で表示されます。
命令のヘルプ
命令の上にマウスを移動すると、命令の概要がチップ ビューに表示されます。この機能はデフォルトで
ON に設定されていますが、[逆アセンブリ] ビューのサブメニュー (Ctrl+I) 上の [命令のヘルプ] オプショ
ンを使うと、オン/オフが切り替えられます (「逆アセンブリ サブメニュー」を参照)。
検索 ソース ファイルのテキストを検索するためのダイアログを開きます。テキ
ストが検出されると、そのテキストを含む行がカーソルで示されます。
表示 [表示] サブメニューにアクセスします。「表示サブメニュー」を参照。
定義に移動 カーソル下の関数の開始点に移動します。
アドレスに移動 見たいビューの特定のアドレスをメモリに入力するダイアログを開きま
す。16 進数のアドレスを入力する場合は、前に 0x を付けます。必要なア
ドレス、記号、式を入力して、閲覧したいメモリ部分を指定できます。シ
ンボル名の最初の文字を入力した場合には、[自動入力] ボタンを使用する
と、アプリケーションで利用可能なシンボルのリストが提供されます
(「アドレスの入力」を参照)。
モジュールへ移動 埋め込みモジュールの開始点に移動します。
関数の開始点に移動 現在キャレットを含んでいる関数の開始点に移動します。
関数の終了点に移動 現在キャレットを含んでいる関数の終了点に移動します。
関数の参照 機能ブラウザを開くと、アプリケーションの機能表示に移動し、その閲覧
ができます。「関数の参照」を参照。
ブックマークの追加/ 現在の行にブックマークを設定/削除します。ブックマークは左のマージ
削除 ンに薄青色で表示されます。
ブレークポイントの 現在の行にブレークポイントを設定します。ブレークポイントは左のマー
追加 ジンに茶色の点で表示されます。
スレッド特有のブレー スレッド特有のブレークポイントを設定します。「スレッド特有のブレー
クポイントの追加 クポイント」を参照。
トレースポイントの 現在の行にトレースポイントを設定します。「トレースポイント」を参
追加 照。
ブレークポイントの 現在の行のブレークポイントを有効/無効にします。
有効/無効
ブレークポイントの 現在の行のブレークポイントを削除します。
削除
すべてのブレーク すべてのブレークポイントを削除します。
ポイントを削除
ロック数式をセット アドレスを評価する式を指定できます。
PCをトラックする このチェックボックスをオンにすると、逆アセンブリビューのプログラム
カウンタの位置が自動的に追跡されます。
カーソルまで実行 現在の行までプログラムを実行します。「>」記号が指定行へ移動し、プ
ログラム カウンタがリセットされたことが確認できるはずです。
アドレスまで実行 プログラムのアドレスを選択できます。
ブランチまで実行 分岐命令に到達するまで、スレッドを実行します。
ソースのステップを 単一ステップを実行します。
強制
全ファイルの更新 選択したファイルを更新します。
逆アセンブリ サブメニュー
ポインタに追従の取り消し 以前のアドレスに戻ります。
逆アセンブリをファイルに保存 逆アセンブリをファイルに保存できます。「逆アセンブリをファ
イルに保存」を参照。
レジスタの色 チェックしている場合、レジスタをカラーで表示します。
表示サブメニュー
レジスタの色分け
逆アセンブリ ビューのレジスタは色分けされています。この機能では、現在のカーソル位置にある命令
が分析され、読み込み元または書き込み先のレジスタが決定されます。これらレジスタのオカレンスが表
示全体を通じて適宜色付けされるため、使用されているレジスタの場所を簡単に特定できるようになりま
す。
逆アセンブリ ビューのショートカット メニューでは、[逆アセンブリ] サブメニューの [レジスタの色分
け] オプションを選択することにより、レジスタのカラーリングを有効/無効に設定できます。[オプショ
ン] ダイアログを使ってもレジスタの色を設定できます (「ソース設定」を参照)。レジスタ ビューでは、
レジスタが同じ色でハイライト表示されます。
逆アセンブリをファイルに保存
逆アセンブリは、[逆アセンブリ] サブメニューから [逆アセンブリをファイルに保存] オプションを使用
することにより、アセンブリ形式のファイル (.s) に保存できます (「逆アセンブリ サブメニュー」を参
照)。
[ファイルの逆アセンブル] ダイアログボックスが表示されます。
開始アドレス 保存する逆アセンブリの最初の行のアドレスです。
終了アドレス 保存する逆アセンブリの最後の行のアドレスです。
ラベルを表示 選択された場合、ラベルが含まれます。
ソースと逆アセンブリを同時に閲覧
同じビューにソースと逆アセンブリを表示する方法は次のとおりです。
• 逆アセンブリ ビューを開きます。「逆アセンブリの閲覧」参照。
• ショートカット メニューの [表示] サブメニューで [ソース コードの表示] オプションにチェックマー
クを付けます。
ソースと逆アセンブリ内の検索
テキスト エディタでソース ファイル内を移動するのと同じように、ソースの別の場所を閲覧できます。
• ソース ビューでの場所を覚えておくため (および後で戻るため) にブックマークを使用できます。
• ソース ビューと逆アセンブリ ビュー間の切り替えをスペース キーで行えます。
ブックマークの使用
ブックマーク (しおり) を使用してソース ビューの任意の場所に後で簡単に戻ってくることができます。
• Ctrl+F2 でブックマークを追加します。カーソルのある行の境界線に、青のマーカーが表示されま
す。
• 異なる部分のソース ファイルを閲覧する時は <F2> でブックマークのある行まで戻ります。
• ソース ファイルには複数のブックマークを挿入できます。<F2> を押すとカーソルが現在の位置から
最後のブックマークに到達するまで、次のブックマークに移動します。最後まで到達すると、ファ
イルの初頭から検索を開始します。
• カーソルのある場所から逆方向に検索したい時は <Shift+F2> を使用してください。
• デバッガを終了すると、すべてのファイルのブックマークは設定ファイルに保存され、次回デバッ
ガを実行する時にレストアされます。
テキストの検出
[検索]、[次を検索] の各ショートカット メニュー オプションを使用すれば、ソース ビュー内で検索文字
列を簡単に探し当てられます。必要ならば、大文字・小文字を区別して検索することもできます。
テキスト文字列を検索するには、次の手順に従います。
(1) テキスト文字列を検索するには、[検索] ショートカット メニュー オプションを使用します。
(2) 検索ダイアログの表示で、検索文字列を定義できます。
大文字と小文字を区別 このチェックボックスをオンにすると、一致文字列の大文字・小文字が検
する 索文字列と同じでなければ、一致と見なしません。
完全に一致する項目を このチェックボックスをオンにすると、一致文字列が完全一致でなければ
検索 (一致するサブ文字列が見つからないなど)、一致と見なしません。
上方向に検索 チェックしている場合、カーソルの位置から上方向に検索します。
メモ:これらのオプションは、アプリケーションの継続時間内のみ有効であり、アプリケーション 終
了時に設定ファイルに保存されることはありません。
(5) 文字列が検出されたら、最初に検出された文字列を含むソース行がソース ビュー内で強調表示され
ます。
(6) テキスト文字列の検索を続けるには、[次を検索] ショートカット メニュー オプションを使用しま
す。
正規表現
[検索] ダイアログは、正規表現に対応しています (「テキストの検出」を参照)。
正規表現は、文字列検索で使用される文字列のパターンを記述する標準的な方法です。正規表現を作成す
るには、所定の書式に従う必要があります。
正規表現は、文字、文字列、および特殊記号からなり、算数式に類似しています。また算数式のように、
必要に応じて括弧 (すなわち(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: 正規表現シンタックス」を参照して
ください。
パイプライン アナライザ
パイプライン アナライザは静的分析ツールで、コード内の潜在的ストールを検出し、リファクタリング
が必要と推測される箇所をハイライト表示します。
パイプライン分析データは、逆アセンブリ ビューの [逆アセンブリ] サブメニューで選択されている場合
に表示されます (「逆アセンブリ サブメニュー」を参照)。ストール情報は、逆アセンブリ テキストの右
側に表示されます。
PPU
PPU では、以下のような画面が表示されます。
MC マイクロコード命令。
CSI コンテキスト同期命令。
REG 前の演算へのレジスタ依存。
PIPE 命令が二重発行できない。
ここでは、レジスタの特定コンテンツは考慮されないため、異なるベース レジスタからのアクセスなど
では LHS は検出されません。
SPU
SPU では、以下のような画面が表示されます。
REG 前の演算へのレジスタ依存。
?HINT デバッガがこの分岐のヒントを認識できない。
ODD 命令が EVEN ディスパッチ スロットにある場合、または EVEN 命令が ODD ディスパッチ スロッ
トにある場合、そのディスパッチ ペア内の両方の命令が単一発行されます。デバッガには便宜上、不適
切にアラインされた命令のみが表示され、ペアの両方の命令は単一発行としては表示されませんが、依存
性の遅れを計算する際には、両方の単一発行によって発生したパイプラインの遅れが考慮されます。
例
000184 7A80C103 fi $3,$2,$3 02 (0000017C) REG EVN
8: ブレークポイントおよびステッピング
この章では、異なるタイプのブレークポイントの使用や、コード内のステッピングを行うことにより、開
発ハードウェア上でコードをデバッグする方法について説明します。
この章には、以下のセクションがあります。
• プログラム実行の中止
• プログラムを 1 ステップずつ実行
• ブレークポイント ビュー
• 条件付きブレークポイント
• スレッド特有のブレークポイント
• 埋め込み SPU 内のブレークポイント - グローバル ブレークポイント
• トレースポイント
• ハードウェア ブレークポイント
• メモリ アクセス トラップ (MAT)
プログラム実行の中止
コード内のバグを追跡する際、ターゲット上でのコードの実行を完全に制御しつづけることがカギとなり
ます。このセクションでは、コードにブレークポイントを設定する方法と、コードをステップする手順に
ついて解説します。
• ターゲット上で実行しているプログラムは、随意に開始したり停止することができます ( ゲームの実
行を参照)。
• デバッガで、プログラムのソースまたは逆アセンブリビューのいずれかにブレークポイントを設定
すると、実行パスのどこで実行しているプログラムも、インタラクティブに中止させられます。
• ターゲット上のアプリケーションを手動で中止させたり、その他の理由 (ブレークポイントなど) で
アプリケーションが中止した場合、それ以降は実行パスのコード 1 行を 1 度に実行できます。
• 条件が TRUE (正) かどうかにかかわらず、条件付きブレークポイントを設定できます (「条件付きブ
レークポイントの設定」参照)。
• 特定アドレスへのアクセスが発生する度にトリガされるハードウェア ブレークポイントをセットす
ることができます (「ハードウェア ブレークポイント」を参照)。
• 選択した 1 つのスレッド上だけでトリガされる、スレッド特有のブレークポイントを設定すること
ができます。
ブレークポイントの設定・閲覧
プログラムが C や C++、またはアセンブリのコードの指定行に到達した時に、プログラム カウンタ プロ
グラムの実行を中止したい場合に設定するのがブレークポイントです。
アプリケーション コードのブレークポイントの位置は、デフォルトでは xxxconfig.xml 設定ファイルで、
セッション間で保存されます (デバッガを同じ ELF ファイルで起動し、かつそれがデバッガ コマンドラ
インで指定されている場合)。
ソースまたは逆アセンブリにブレークポイントを設定するには、次の手順に従います。
(1) ターゲットが動作していないことを確認し、ソース ビューまたは逆アセンブリ ビューを開きます。
(2) ブレークポイントを設定したいソースまたは逆アセンブリの行へスクロールします。
(3) ショートカット メニューの [ブレークポイントの追加] をクリックします。そこにブレークポイント
がすでに存在する場合、ショートカット メニューは [ブレークポイントの削除] に変わります。ブレ
ークポイントが存在しない場合には、新しいブレークポイントがこの行にセットされます。
これでターゲットを起動すると、ブレークポイントを設定した行にプログラム カウンタが到達した時点
で実行中止し、すべてのデバッグ情報ビューが更新されるようになります。さらに、ソース ビューまた
は逆アセンブリ ビューが開いており、かつアクティブ状態である場合は、現在のプログラム カウンタの
位置を表示するよう更新されます。
プログラムを 1 ステップずつ実行
コード内のバグを追跡する際、ターゲット上でのコードの実行を完全に制御しつづけることがカギとなり
ます。このセクションでは、コードにブレークポイントを設定する方法と、コードをステップする手順に
ついて解説します。
プログラムを 1 ステップずつ実行する
プログラム内を 1 ステップずつ実行するには、次の手順に従います。
(1) ターゲットが動作していないことを確認して、ソース ビューまたは逆アセンブリ ビューを開きま
す。
(2) ビュー ショートカット メニューの [ステップ] または [ステップオーバー] コマンドを使用して、(選
択したビューにより) ソースまたは逆アセンブリを 1 ステップずつ処理します。[ステップ] コマンド
を選択すると、任意の関数コールまでプログラムを実行し、呼び出された関数の中にあるコードの
行を実行します。
現行関数をステップアウトする
現在、関数を 1 ステップずつ処理している場合、その関数のコードの残っている行すべてを実行しなくて
も、関数を呼び出したソースの行に戻れます。
• [ステップ アウト] ツールバーボタンをクリック、または [デバッグ] メニューの [ステップ アウト] を
クリックします。
プログラム カウンタは、関数コールの次のコード行まで進みます。
ただし、関数が終了するまでのコードに (またはそれ以前に呼び出された関数に) ブレークポイントがあ
る場合、ビューが切り替わって、次にブレークポイントが設定された行で一時停止する場合があります。
ブレークポイント ビュー
アプリケーションのソースや逆アセンブリに設定されたすべてのブレークポイントは、ブレークポイント
ビューでいつでも閲覧できます。このビューではブレークポイントが設定されている位置と、ブレークポ
イントが設定されている機能が一覧表示されています。このビューで、ブレークポイントを追加したり、
選択したブレークポイント、またはブレークポイントすべてを削除できます。
新しいブレークポイント ビューを開く方法は次のとおりです。
ブレークポイントの種類
ブレークポイントには、いくつもの種類があります。ブレークポイントはその種類ごとに、それぞれ異な
るアイコン色で区別されます。アイコンに黄色の「+」が付いているときは、ブレークポイントが条件付
きのものであるか、スレッド特有のものであることを示します (「条件付きブレークポイント」および
「スレッド特有のブレークポイント」を参照)。無効にされているブレークポイントのアイコンは、有効
化されている状態のアイコンの中心が空洞になったものとなります。
標準 プログラムの実行がこの行に到達すると停止します。
条件付き/ プログラムの実行は、条件がトリガーされた場合、または指
スレッド特 定されたスレッドからヒットした場合に停止します。
有のブレー
クポイント
、標準
コードが読 このブレークポイントを含むソース行に関連付けられている
み込まれて コードはありません。その理由としては、ソース ファイルが
いない プロジェクトの一部となっていないか、デバッグ情報がない
ことが考えられます。ブレークポイントは、このソース行を
含む PRX が読み込まれたとき、有効になります。プログラム
の実行がこの行に到達すると停止します。
条件付き/ プログラムの実行は、条件がトリガーされた場合、またはグ
スレッド特 ローバル ブレークポイントに対して指定されたスレッドから
有のブレー ヒットした場合に停止します。
クポイント
、グローバ
ル
トレースポ 実行がこの行に到達すると、ターゲットは一時的に停止し、
イント メッセージが TTY ビューのデバッグ チャンネルに表示されま
す (「トレースポイント」を参照)。
条件付き/ 条件がトリガーされた場合、または特有のスレッドからヒッ
スレッド特 トした場合、ターゲットは一時的に停止し、メッセージが表
有のトレー 示されます。
スポイント
すべてを有効化 すべてのブレークポイントを有効にする。
すべて無効化 選択されたプロセッサに関するすべてのブレークポイントを削除する。
すべて削除 現在のプロセッサについて、すべてのブレークポイントを削除する。
関数の参照 関数ブラウザが開き、アプリケーションの関数に移動したり、その閲覧が
可能。「関数の参照」を参照。
追加 [アドレスを入力]ダイアログを表示して、ブレークポイントを設定するアド
レスを指定できるようにする。
削除 現在のプロセッサについて、すべてのブレークポイントを削除する。
無効化 指定のブレークポイントを無効にする。
ソースに移動 ソース/逆アセンブリビュー内のそのブレークポイントに移動する。
ブレークポイントの [プレークポイントのプロパティ]ダイアログを表示する。「[ブレークポイ
プロパティ ントのプロパティ] ダイアログ」を参照。
ブレークポイント ビューのツールバー
追加 [アドレスを入力]ダイアログを表示して、ブレークポイントを設定
するアドレスを指定できるようにする。
削除 現在のプロセッサについて、すべてのブレークポイントを削除す
る。
すべて削除 現在のプロセッサについて、すべてのブレークポイントを削除す
る。
すべてを有効化 すべてのブレークポイントを有効にする。
すべてを無効化 選択されたプロセッサに関するすべてのブレークポイントを削除す
る。
ソースに移動 ソース/逆アセンブリビュー内のそのブレークポイントに移動す
る。
[ブレークポイントのプロパティ] ダイアログ
スレッド スレッド特有のブレークポイントを設定するときは、ブレークポイント
をトリガーさせるスレッドの ID を選択します (任意のスレッドの場合は
ブランクのままにします)。
条件 条件を設定する時はこのチェックボックスにチェックを入れます。式入
力ボックスに、ブレークポイントに到達した際評価する式を入力しま
す。
一致/変更 これは、条件が正確であることをテストした、または条件が変更された
ことを意味します。
無効化 選択されている場合、ブレークポイントはトリガー後に無効化されま
す。
条件付きブレークポイント
条件付きブレークポイントは、その他のソフトウェアのブレークポイント同様、トリガーされた時にター
ゲットを停止します。なお、条件付きブレークポイントには、条件またはヒットカウントに基づいて、ユ
ーザーがブレークポイントでのターゲットの停止を選択できるという利点があります。
条件は、式エバリュエータによって認証されたものなら、どんな式でもかまいません。設定が済み次第、
ブレークポイントには条件が 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 メモリから削除されて
も、PPU メモリ内の SPU コードに追加されたブレークポイントに影響を与えることはなく、該当コード
が次回 SPU メモリに転送される際にはそれが復元されます。反対に、ブレークポイントが PPU メモリか
ら削除された場合、SPU の現在のステータスに影響を与えることもありません (すなわち、現在ブレーク
ポイントを含む SPU からはブレークポイントが削除されない)。ただし、ブレークポイントは SPU コー
ドと共に SPU メモリには転送されなくなるため、SPU コードの次回転送時には存在しなくなります。
トレースポイント
トレースポイントは、ソフトウェアのブレークポイントに似ていますが、ブレークポイントとは違い、ト
リガーされたときプログラムの実行を停止させることがありません。その代わり、トレースポイントがト
リガーされるとターゲットが一時的に停止し、TTY ビューのデバッグ チャンネル内にメッセージが表示
されますが、その後、ターゲットは実行を続行します。
メモ: トレースポイントはターゲットを停止/開始させるため、実行速度は通常より遅くなります。
トレースポイントが作成されると、用意されているテンプレート上でトレースポイント メッセージが指
定されます。トレースポイント メッセージには、プレーン テキストの他、定義済みの識別子、前景およ
び背景の色、変数値などを含めることができます。
定義済みの識別子 説明
$PID プロセス ID
$PNAME プロセス名
$TID スレッド ID
$TNAME スレッドの名前
$ADDRESS 現在のコンピュータのアドレス
$FUNCTION 現在の関数の名前
$CALLER 呼び出し元の関数の名前
$CALLSTACK 現在のコールスタックを出力
トレースポイントの追加
トレースポイントを追加するには、次の手順に従います。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 133 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ブレークポイントおよびステッピング
(1) 以下の方法のいずれかで、トレースポイントを追加します。
(a) ソースまたは逆アセンブリの 1 行を右クリックし、コンテキスト メニューから [トレースポイ
ントの追加] を選択します。
(b) ショートカット (Alt+F9) を使って、現在の場所にトレースポイントを追加します。
(c) Alt キーを押しながら、ソース ビューのインジケータ余白をクリックします。
[ブレークポイントのプロパティ] ダイアログ ボックスが自動的に表示されます。
トレースポイントの削除
トレースポイントはブレークポイントの特殊タイプですので、ブレークポイントと同じ方法で削除できま
す。「ブレークポイント ビュー」を参照してください。
ハードウェア ブレークポイント
PPU プロセッサには、1 つのハードウェア ブレークポイントを設定できます。
ハードウェア ブレークポイントは、指定した変数や、メモリ内の変数アドレスにアクセスされた時点
で、プログラムの実行を中断するように指定することができます。
ハードウェア ブレークポイントがトリガーされた場合は、ソフトウェア ブレークポイントと同様の処理
(プログラムの一時停止など) を行います。その後、ターゲット管理コマンド (Step、Run to、Go) を使用
して実行を再開することもできます。
PlayStation®3 では、ハードウェア ブレークポイントを設定し、特定の C/C++ 変数またはアセンブリ ア
ドレスへのアクセスが発生した際にトリガすることができます。ハードウェアの制限のため、PPU のハ
ードウェア ブレークポイントは、8 バイトでアライメントされた 8 バイトの範囲にのみ設定可能です。ハ
ードウェア ブレークの範囲内のデータにアクセスすると、そのアクセスがリクエストされた変数内にあ
るかどうかを問わず、ハードウェア ブレークが発生します。
ハードウェア ブレークポイントの設定
ハードウェア ブレークポイントは、変数がアクセスされた際にトリガされるもの、および特定のアドレ
スへの書き込みが発生した際にトリガされるもののいずれかを設定できます。
ハードウェア ブレークポイントを設定するには、次の手順に従います。
(1) [デバッグ] メニューの [ハードウェア ブレークポイント] をクリックします。
9: メモリとレジスタの閲覧・変更
この章では、メモリ ビューを使用したメモリ データの表示方法と変更方法について説明します。また、
レジスタ ビューを使用したレジスタ データの表示方法と変更方法についても取り上げます。
この章には、以下のセクションがあります。
• メモリの閲覧・変更
• レジスタの閲覧・変更
メモリの閲覧・変更
メモリ ビューのメモリを閲覧できます。また、すべてのメモリ アドレスの値を変更できます。
メモリアドレスの値を閲覧する方法は次のとおりです。
• [ウィンドウ] メニューで、[新規ビュー] をポイントして [メモリ] をクリックするか、[メモリ] ツー
ルバー ボタンをクリックします。
これで、メモリ ビューを含む新しいウィンドウが開きます。
メモリ ビュー
メモリ ビューには、ターゲット メモリの任意部分の内容を表示できます。
アドレス この最初の列では、残りの行で表現されるターゲット上のメモリ内でのアドレス
が表示されます。このアドレスは 16 進法形式で、デフォルトでは32ビットです。
メモリを変更・選択する
2 列目の [データ] 列に表示されるメモリ データは、必要に応じて上書きすることでターゲットのメモリ
を直接変更できます。また、3 番目の ASCII 列に ASCII 文字を入力することにより、データを上書きす
ることも可能です。
メモリ ビューには、選択機能とコピー機能が含まれています。たとえば、ある範囲のメモリ アドレスを
選択してそれをクリップボードにコピーし、他のビューに貼り付けるなどです。
以下の選択方法があります。
• ビューの左側アドレスをダブルクリックして選択します。これを別のメモリビューの [アドレスに移
動] 機能を使用してドラッグするか、ウォッチ ビューにドラッグして、そのビューに追加できる変数
かどうかを調べます。
• アドレス列をクリック、ドラッグしてメモリ行全体を選択します。
• メモリ値をクリック、ドラッグして個々のメモリ域を選択するため、フリーフォーム選択を実行し
ます。
以上が選択されればクリップボードにテキストとしてコピーできます。
新しい値の入力 このダイアログで新しい値を入力し、メモリの位置に書き込みができます。
「式の使用」 を参照。
メモリを値で 現在の選択部の全データアイテムをユーザー指定値で満たします。「値でメモ
フィル リをフィルする」を参照。
アドレスにロック メモリの表示をロックするアドレス式が指定できます。表示されるダイアログ
に、必要なアドレス、または式を入力してください。表示のロックを解除する
には、再度 [アドレスにロック] ダイアログにアクセスする必要がありますが、
数式フィールドは空白のままにしてください。「メモリ ビューをポインタ ア
ドレスにロックする」を参照。
値でメモリをフィルする
値でメモリをフィルする (埋める) には、次の手順に従います。
(1) メモリ ビューのショートカット メニューで [メモリを値でフィル] を選択すると、以下のダイアログ
が表示されます。
タイプ 例
float 123.0f
string "a12sfs"
16 進数を明示的に宣言する場合は、接頭辞に「0x」を使用します。
値でメモリをフィルする場合は、[パターンの繰り返し] チェックボックスを選択します。値を [開始
アドレス] に 1 回書き込み、それ以降のメモリを「0」(ゼロ) で埋めたい場合には、[パターンの繰り
返し] チェックボックス にチェックを入れないでください。
メモ:ファイル全体がメモリ内に読み込まれます。すなわち、ファイルのうち特定のバイト数 (n バイ
ト) を指定してメモリに読み込むことはできません。
レジスタの閲覧・変更
レジスタ ビュー内のレジスタは、すべて閲覧できます。また、レジスタ値はすべて変更できます。
レジスタ値を閲覧するには、次の手順に従います。
• [ウィンドウ]メニューで [新しいビュー] をポイントし、[レジスタ] をクリックするか、[レジスタ] ツ
ールバーボタンをクリックします。
これで、すべてのレジスタとその現在の値を示すレジスタ ビューを含む新しいウィンドウが開きま
す。
レジスタ ビュー
レジスタ ビューには、ターゲット上で使用可能な情報に関するレジスタがすべて表示されます。さら
に、プログラム カウンタが設定されている逆アセンブリ命令と、ターゲットの現在の状態 (赤色で表示)
を表示します。
メモ: この方法でレジスタ値を変更すると、アプリケーションがターゲットで動かなくなる場合があ
りますのでご注意ください。
<有効な形式の 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]} ビット マスク
上記の補足
c = ASCII 文字
[n] は [フィールドの長さ]
[n:n] は [開始ビット : ビット フィールドの長さ]
<text> は文字列リテラル、または {#<name>} 構文による参照 #string
定義。
10: ローカル変数とウォッチ変数の閲覧
この章では、ローカル、ウォッチ、オートの 3 つのビューを使用して変数をモニタする方法について説明
します。
この章には、以下のセクションがあります。
• ローカル変数の閲覧
• PC 周辺の変数を表示
• 変数のモニタリング
• ローカル ビューとウォッチ ビューでの配列の使用
ローカル変数の閲覧
プログラム カウンタが位置する関数のローカル変数を、ローカル変数ビューで閲覧できます。
ローカル変数 (現在の関数の変数) の値を閲覧するには、次の手順に従います。
• [ウィンドウ] メニューで、[新しいビュー] をポイントし、[ローカル] をクリックするか、[ローカル]
ツールバー ボタンをクリックします。
これで、現在の関数の全変数とその現在の値を示すローカル ビューを含む新しいウィンドウが開き
ます。
ローカル ビュー
ローカル ビューを使い、ターゲット上の現在の関数スコープのローカル変数を表示します。表示は、タ
ーゲット ユニット上の関数間で移動するたびに変わり、ターゲットが停止すると自動的に更新されま
す。
ターゲット上の各変数は、現在のデータ タイプおよび値と共に表示されます。列はサイズ変更ができ、
列のヘッダーを再配置する行にドラッグできます。
展開できる変数の前には、「+」記号が表示されます。これらの変数を展開するには、その変数をダブル
クリックします。現在展開されている変数は、再度ダブルクリックすると、折りたたまれます。配列を展
開すると、すべての配列メンバが表示されます。
• 表示は、ターゲットが停止するたびに自動更新します。
• 変数を変更するには、[値]フィールドの値をダブルクリックしてその値を編集します。
• 選択した変数の自動デクリメントやインクリメントが、キーボード ショートカットで行えます。デ
フォルトのキー割当てでは、「COMMA」が値のデクリメントで、「PERIOD」が値のインクリメ
ントです。
PC 周辺の変数を表示
オート ビューのプログラム カウンタ位置で、この機能の現ステートメント、前のステートメント、次の
ステートメントが参照する変数を閲覧できます。
オート表示する方法は次のとおりです。
• [ウィンドウ] メニューで [新しいビュー] をポイントし、 [オート]をクリックするか、または [オー
ト] ツールバー ボタンをクリックします。
これにより、自動ビューを含む新しいウィンドウが開きます。
オート ビュー
オート ビューは、現在の PC 位置でソース コードを調査して、現ステートメント、前のステートメン
ト、次のステートメントが参照する変数を表示します。
現在のプログラム カウンタおよび次のプログラム カウンタ ロケーションに対する逆アセンブリも表示さ
れます。インストラクションで使用されるレジスタは、そのインストラクションのエレメントとして表示
され、適切にフォーマットされます。有効なアドレスが計算され、ロード-ストア処理用に表示されま
す。ロード処理に関しては、ロードされるメモリのコンテンツを表示するため、有効なアドレスが逆参照
されます。オート ビューにおける逆アセンブリ表示は、オート ビューのショートカット メニューで無効
にすることができます。
このビューは、PC ロケーションが変わるたびに変更されます。
• 選択した値の自動デクリメントやインクリメントが、キーボード ショートカットで行えます。デフ
ォルトのキー割当てでは、「COMMA」が値のデクリメントで、「PERIOD」が値のインクリメン
トです。
変数のモニタリング
ウォッチ ビューでは、特にウォッチしたい変数を設定できます。
ウォッチ変数の値を表示するには、次の手順に従います。
ウォッチ ビュー
ウォッチ ビューでは、変数や式をウォッチして、コードを実行するとどのように変化するかを確認でき
ます。ウォッチ ビューは、始めて開いた時には空白なので、ここに必要なウォッチを追加します。「ウ
ォッチ変数の追加」を参照してください。
ウォッチ変数の追加
各アプリケーション変数は、現在のデータ タイプおよび値と共に表示されます。列はサイズ変更がで
き、列のヘッダーは再配置する行にドラッグできます。
展開できる変数の前には、「+」記号が表示されます。これらの変数を展開するには、その変数をダブル
クリックします。現在展開されている変数は、再度ダブルクリックすると、折りたたまれます。配列を展
開すると、すべての配列メンバが表示されます。
• ウォッチ対象の変数値の表示は、ターゲットが停止するたびに自動更新されます。
• 赤色で表示されている変数は、最後にウォッチ ビューで値を変更した後に変更されていることを示
します。
• 変数の値を変更する場合は、値フィールドの値をダブルクリックして、その値を編集します。
• 選択した値の自動デクリメントやインクリメントが、キーボード ショートカットで行えます。デフ
ォルトのキー割当てでは、「COMMA」が値のデクリメントで、「PERIOD」が値のインクリメン
トです。
• ウォッチ ビューを閉じると、追加して監視していた変数は失われます。しかし、監視した変数を含
むオープン ウォッチ ビューの設定は、デバッグ セッション間に保存されます。
貼り付け これを選択すると、クリップボードのコンテンツを使用して、新規のウォ
ッチ式がビューに加えられます。このメニュー アイテムは、クリップボー
ドにテキスト情報が含まれる場合のみ表示されます。
親に移動 クラス/構造体の式からその親に移動します。このメニュー項目は該当す
る式の種類を右クリックした場合のみ、表示されます。「クラス/構造体
の式から親への変更」を参照してください。
省略型表現式 展開されたクラス/構造体のメンバからそれに該当する省略型の式に変更
します。このメニュー項目は該当する式の種類を右クリックした場合の
み、表示されます。「表現の短縮」を参照してください。
変数を参照 変数ブラウザを表示します。このブラウザでは、アプリケーション内にあ
るすべての使用する可能性のある変数を、C++ クラスごとに閲覧し、追加
する必要のある変数を正確に選択できます。
ウォッチを追加 ウォッチする変数の名称が入力できます。ウォッチする変数の名称を入力
するためのダイアログが表示されます。
ウォッチ変数の追加
ウォッチ変数の追加には 3 つの方法があります。
• 変数をソース ビューからウォッチ ビューにドラッグ アンド ドロップします。
• ウォッチ ビュー ショートカット メニューで [ウォッチを追加] をクリックします。[ウォッチ数式入
力] ダイアログで、必要な変数名を入力します。新しいウォッチ ビューにそのウォッチが追加され、
ターゲットの値が自動的に表示されます (取得できる場合のみ)。
• ショートカット メニューの [変数を参照] オプションをクリックして、その C++ クラスに従った変数
を閲覧します。「変数ブラウザを使用したウォッチの追加」を参照。
変数ブラウザを使用したウォッチの追加
ウォッチしたい変数の正確な名称がわからない、さらにはアプリケーションの特定の C++ クラスに属し
ている変数を閲覧したい (別のクラスにある変数には、同じ名称をもつものがある)、という場合がありま
す。この場合、C++ 変数ブラウザを使用して、アプリケーションのすべての変数を、クラスごとにグル
ープ分けして閲覧できます。
• ウォッチ ビューのショートカット メニューから [変数を参照] を選択して [変数ブラウザ] ダイアログ
ボックスを開きます。
[変数ブラウザ] ダイアログには、開発中のアプリケーションのすべての変数が表示されます。
追加したい変数、または変数群を指定したら、[ウォッチの追加] ボタンをクリックします。ここで表示さ
れるダイアログでは、選択した変数がウォッチ ビューに追加されています。ウォッチ ビューにそれ以上
ウォッチを追加せずにダイアログを終了するには、[閉じる] ボタンをクリックします。
クラス/構造体の式から親への変更
[親に移動] 機能は、クラス/構造体のアクセサを含む式を右クリックすると有効になります。この機能で
は、最後のメンバ アクセサが式から削除されます。たとえば以下の式で、
my_class.my_structure.var3
[親に移動] を選択すると、以下のようになります。
my_class.my_structure
表現の短縮
[省略型表現式] 機能は、ウォッチ ビューで展開されたクラス/構造体のメンバを右クリックすると有効に
なります。この機能では、クラス アイテムが、選択したメンバ アイテムをアクセスするための同等の 1
行の式に変換されます。たとえば、展開された以下のクラスでは、
my_class
my_var1
my_var2
my_structure
.var1
.var2
.var3 <--
書式指定子を使用して変数を表示
[ウォッチ] ペインで変数を表示する際、書式指定子を使用して、値が表示される形式を変更することがで
きます。
デバッガでは Visual Studio でサポートされている書式指定子のリストが拡大適用され、一部の Windows
固有オプションが無視されます。詳細は、「MSDN - Format Specifiers in C++」を参照してください。
サポートされている書式指定子
指定子 書式 式 表示される値
メモリ位置に対する書式記号
指定子 書式 式 表示される値
メモ:デバッガでは「0x」仕様に従い、8 進数値には「0o」を、バイナリには「0b」を接頭辞として
付けて表示されます。
サポートされていない書式指定子
• hr (HRESULT または Win32 エラー コード)
• wc (Windows クラス フラグ)
• wm (Windows メッセージ番号)
上記は、元の配列のサイズにかかわらず、要素 0 から 32 までを表示します。
ポインタについても同様に設定できます。上述と同様の方法でポインタ名に接尾辞を付け、ポインタを配
列として表示します。たとえば、次のようになります。
pPacket, 10
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 156 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
ローカル変数とウォッチ変数の閲覧
11: コールスタック情報の表示
この章では、コールスタック ビューを使用してプログラム関数の順序を表示する方法について説明しま
す。
この章には、以下のセクションがあります。
• コールスタックの閲覧
コールスタックの閲覧
プログラム スタックの現在の状態を、コールスタック ビューで閲覧できます。このビューでは、プログ
ラム カウンタの現在位置に至るまでにアプリケーションが呼び出したプログラム関数の順序が表示され
ます。
コールスタックを閲覧するには、次の手順に従います。
• [ウィンドウ] メニューで、[新規ビュー] をポイントし、[コールスタック] をクリックするか、[コー
ルスタック] ツールバー ボタンをクリックします。
これで、プログラム スタックの現在の状態を示すコールスタック ビューを含む新しいウィンドウが
開きます。
コールスタック ビュー
コールスタック ビューでは、プログラムスタックの内容をいつでも閲覧し、特定の関数コールを選択し
て、現在のデバッガ コンテキストを変更できます。
アプリケーションが実行中止する度に、コールスタック ビューは、アプリケーションが現在のプログラ
ム カウンタに到達するまでに呼び出した関数に更新されます。
コールスタック ビューでリスト表示されている関数のうち、先頭に表示されているものは、最後に呼び
出された関数です。ウィンドウには呼び出された各関数のデータ型や現在のスタック使用状況も表示され
ます。たとえば、関数がメインの実行可能ファイル内にない場合には、.self または PRX の名前など、[モ
ジュール] 列には関数を含むモジュールの名前が表示されます。モジュール名が利用できない場合 (シス
テム関数などの場合) には、この列はブランクにされます。
デバッガのコンテキストを変更するには、必要な機能をダブルクリックします。「 」記号は、現在コ
ールスタックで閲覧しているコンテキストを示しています。特定の関数に新しいコンテキストを設定する
と、すべてのデバッガ ビューは更新され、その関数が呼び出された時点のターゲットについての情報を
表示します。
デバッガでは関数開始との推測に基づいてコールスタックの確立が試みられ、検出される各関数の開始に
「??? Address」が表示されます。
値 0xD15EA5ED がコールスタック ビューに表示されることがあります。これは、LR の読み込みに関する
問題のため、あるいはターゲットが無反応/切断されているため、デバッガでスタック レベルの読み込み
が行えないことを表します。
TTY 出力の閲覧
プログラムからの TTY 出力は、TTY ビューで閲覧できます。このビューでは、デバッグなど printf タイ
プの出力が表示されます。
TTY 出力を閲覧するには、次の手順に従います。
• [ウィンドウ] メニューで [新しいビュー] をポイントして、[TTY] をクリックするか、[TTY] ツール
バー ボタンをクリックします。
これにより、TTY ビューをもつ新しいウィンドウを開き、ビューのツールバーを使用して TTY スト
リームの特定タイプをフィルタすることができます。
TTY バッファ サイズは構成ファイルに保存され、デバッガが起動されるたびに復元されます。TTY バッ
ファのデフォルトは 64KB です。TTY チャンネルの構成に関する詳細は、「TTY チャンネルのプロパテ
ィ」を参照してください。
TTY ビュー
TTY ビューには、ゲームで生成された標準出力がすべて表示されます。ソース コードに printf コマンド
を挿入してある場合、それらのコマンドからの出力を TTY ビューで閲覧できます。
ビューを上下にスクロールして、以前の出力を閲覧することもできます。
TTY ビュー上部のタブ バーには、それぞれの TTY 出力ストリーム用のタブがあります。そのうち 1 つを
選択して、該当するストリームを表示します。たとえば、PPU (STDIN/OUT) はゲーム出力を表示しま
す。
行に移動 選択したライン位置にカーソルを移動します。
TTY チャンネルのプロパティ
[TTYチャンネルのプロパティ] ダイアログは、選択した TTY チャンネルのオプション シートを表示し、
タイトルバーのかっこ内にそのチャンネル名を表示します。
TTY チャンネルのプロパティを表示するには、次の手順に従います。
(1) TTY ショートカット メニューで、TTY チャンネルと [プロパティ] を選択します (「TTY ビューのシ
ョートカット メニュー」を参照)。現在設定されているオプションは [TTY チャンネルのプロパティ]
ダイアログに表示されます。
(2) 左側の [全般] をクリックするとプロパティ全般が表示されます。
名前 TTYチャンネルの名称を表示します。
タイムスタンプ 現在の日付をタイムスタンプに追加します。
に日付を含める
ファイル名 ログ出力のファイル名を設定できます。
追加 チェックしている場合、それぞれの新しいデバッグ セッションのファイルの
開始時に開く代わりにログ出力がファイルに付加されます。
TTY 出力のフィルタリング
[TTY チャンネルのプロパティ] ダイアログボックスの [フィルタ] オプションでは、一致/置換ストリング
に、正規表現を使用することができます。受信 TTY の各ラインに対し、Target Manager では、該当ライ
ンと一致する最初の (該当する場合) フィルタが検出され、関連したテキストの置換が行われます。
フィルタを追加するには、[フィルタ] ダイアログボックスの [+] 記号をクリックします。これにより、マ
ッチ ストリングと置換ストリング (オプション) の設定が促されます。
[一致] ストリングでは、マッチ対象となるストリングを指定できます。
[置換] ストリングでは、一致するストリングと置換するストリングを指定、または空白のままにして一致
したストリングを TTY 出力から削除することができます。置換表現式には、以下の構文を使用します。
テキスト 意味
\\ リテラル バックスラッシュ文字。
\{0} 一致したストリング。
マッチングに使用される正規表現構文に関する詳細は、http://msdn.microsoft.com/ja-
jp/library/k3zs4axe(v=vs.80).aspx で確認することができます。
例:
置換 \{red}\{0}\{normal}
結果 「Start agent」ラインを赤でハイライト表示。
置換 \{1}\{blue}\{2}\{normal}
結果 システム モードを青でハイライト表示。
一致 \[INFO\]:.*
置換
結果 「[INFO]:」で始まるすべての行を削除。
上下矢印キーを使用し、フィルタのリストを移動することができます。
選択したフィルタの正規表現の構文を確認するには、 [] 記号をクリックします。
選択したフィルタを削除するには、[] アイコンをクリックします。
TTY チャンネルの管理
すべての TTY チャンネルの概略を取得するには、TTY ビューのショートカット メニューで [TTY チャン
ネルの管理] をクリックします。TTY チャンネルの管理ダイアログが表示されます。
それぞれのチャンネルに対してこのダイアログは、チャンネル名、TTY の受信バイト数、最大バッファ
サイズ、割り付けられたメモリのバイト数を表示します。
[割り当て済みメモリ] には、現在 TTY チャンネル専用になっているメモリの量が表示されます。その量
は、最大バッファ サイズ になるまで TTY出力の受信ごとに増加します。バッファサイズ以上に TTY 出
力を受信した場合には、その最大バッファ サイズ に従って、TTY 出力が付加されるごとにバッファの最
初から徐々にデータを削除します。
• [新規…] をクリックして新しい TTY チャンネルを追加します。TTY チャンネルの詳細ダイアログ
は、「新しいチャンネル」用に表示され、そこで新しいチャンネルを適切に設定できます。「TTY
チャンネルのプロパティ」を参照。
• [削除]をクリックして、TTYチャンネルを削除します。チャンネルを削除してもよいかを確認するメ
ッセージが表示されます。
• [プロパティ…] をクリックして選択した TTY チャンネルのプロパティを表示します。「TTY チャン
ネルのプロパティ」を参照。
• 選択したチャンネルのプロパティをデフォルトに戻すには、[リセット] をクリックします。
13: カーネル情報の表示
この章では、カーネル ビューで対応している様々なタイプのオブジェクトについて説明します。
カーネル ビュー
スレッド、ミューテックス、PRX、メモリ コンテナなどの各種システム オプジェクトに関する情報を、
タブを選択することにより、カーネル ビューに表示できます。
カーネル情報を閲覧するには、次の手順に従います。
• [ウィンドウ]メニューで [新規ビュー] をポイントして [カーネル] をクリックするか、[カーネル] ツ
ールバー ボタンをクリックします。
これで、カーネル ビューを含む新しいウィンドウが開きます。
プロセス
プロセス ノードを選択すると、現在のプロセスのメモリ使用量のサマリーが表示されます。
GUID モジュールがコンパイルされる際/リンクされる際に、リンカによって設定さ
れるグローバルに固有な識別子 (PPU-GUID とも呼ばれる)。
メモ:デフォルトではリンカによる GUID 設定が行われません。この場
合、モジュールに GUIDは存在せず、デバッガによって 0 が戻されます
。
PPU スレッド
[PPU スレッド] ノードを選択すると、下方のビューにスレッドの全リストが表示されます。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 168 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
カーネル情報の表示
優先度 スレッドの優先順位。
名前 ユーザー指定の名前。
基本優先度 デフォルトのスレッド優先度。
スレッドがなぜブロックされたかを判定するには:
[PPU スレッド] ノードを展開し、見たいスレッドを探します。
2つのミューテックスについての詳細な情報を表示させるには、軽量ミューテックス ノードを展開し、ツ
リーで軽量ミューテックスの場所を探してください。
オブジェクトのノードを表示することにより、このオブジェクトで待機している他のスレッドに加え、こ
のオブジェクトを現在保持する (またはロックした) スレッドも確認することができます。
スレッド デッドロック検出
デバッガでは、スレッドのチェックおよび潜在的なデッドロックへのリソース割り当てが行われ、詳細調
査を喚起する警告が発せられます。
潜在的デッドロックを含むスレッドは、メイン「PPU スレッド」セクションですべて警告され、デッド
ロック サイクル自体は、「潜在的デッドロック」セクションにコピーされます。
チェーンをたどっていくと、スレッドと割り当てられたリソース間のサイクル完了までの関係がわかりま
す。
制限:スレッドが所持可能なリソースのみが、検出フェーズで検討されるため、検出されないデッドロッ
クがシステムに存在する可能性もあります (セマフォで待機中のスレッドなど)。
セマフォ
セマフォ ビューには、セマフォのリストが表示され、それらにおいて待機しているスレッドが示されま
す (該当する場合)。
カウント セマフォの現行値。
最大カウント セマフォの最大値。
attr_pshared オブジェクトがどのように共有されているかを示します。
SYS_SYNC_NOT_PROCESS_SHARED – オブジェクトはプロセス間で共有さ
れていません。
key オブジェクトを作成する際に指定される固有のキー。
フラグ オブジェクトを作成する際に指定されるフラグ。
名前 オブジェクトを作成する際に指定される最大 8 文字の名前。
待機スレッド 待機中スレッドのリスト。
ミューテックス
条件カウント 現在このミューテックスで使用されている条件変数の数。
条件変数 ID 常に「0」。
attr_pshared プロセス間で、オブジェクトが共有される様子を示します。
有効な値は以下のとおりです。
SYS_SYNC_NOT_PROCESS_SHARED – オブジェクトは、プロセス間で共有
されません。
attr_adaptive 適応属性は実行されません。
key オブジェクトを作成する際に指定される独自のキー。
フラグ オブジェクトを作成する際に指定されるフラグ。
名前 オブジェクトを作成する際に指定される最大8文字までの名前。
待機スレッド 待機中スレッドのリスト。
軽量ミューテックス
有効な値は以下のとおりです。
SYS_SYNC_RECURSIVE – オーナーは、オブジェクトを複数回ロックするこ
とが可能です。
SYS_SYNC_NOT_RECURSIVE – オーナーは、オブジェクトを 1 度のみロック
することが可能です。
待機スレッド 待機中スレッドのリスト。
条件変数
attr_pshared プロセス間で、オブジェクトが共有される様子を示します。
有効な値は以下のとおりです。
SYS_SYNC_NOT_PROCESS_SHARED – オブジェクトはプロセス間で共有さ
れません。
key オブジェクトを作成する際に指定される独自のキー。
フラグ オブジェクトを作成する際に指定されるフラグ。
名前 オブジェクトを作成する際に指定される最大8文字までの名前。
待機スレッド 待機中スレッドのリスト。
読み書きロック
attr_protocol リソースが利用可能になった場合に、複数の待機中スレッドがどのように処
理されるかを示します。
有効な値は以下のとおりです。
SYS_SYNC_FIFO
SYS_SYNC_PRIORITY
SYS_SYNC_PRIORITY_INHERIT
attr_pshared プロセス間でオブジェクトが共有される様子を示します。
有効な値は以下のとおりです。
SYS_SYNC_NOT_PROCESS_SHARED – オブジェクトはプロセス間で共有さ
れません。
key オブジェクトを作成する際に指定される独自のキー。
フラグ オブジェクトを作成する際に指定されるフラグ。
名前 オブジェクトを作成する際に指定される最大8文字までの名前。
待機中の読み込み 読み込みでブロックされたスレッド数。
スレッド
イベント キュー
キー イベント キューを作成する際に指定される独自のキー。
名前 オブジェクトを作成する際に指定される最大 8 文字の名前。
待機スレッド 待機中スレッドのリスト。
軽量条件変数
名前 オブジェクトを作成する際に指定される最大 8 文字の名前。
待機スレッド 待機中スレッドのリスト。
仮想メモリ領域
オプション 現在は使用されていません。
割り当てメモリ 仮想メモリ領域に割り当てられた物理メモリのサイズ。
ページ数 仮想メモリ領域内のページ数。
アドレス メモリ内でページが開始されるアドレス。
SYS_VM_STATE_DIRTY - このステータスの場合は、ユーザーによって割当て
メモリへの書き込みが既に行われているものの、バッキング ストアにはコンテン
ツが保存されていません。あるいは、バッキング ストアへの保存後にユーザーが
メモリへ再度書き込みをしているため、コンテンツが保存済みコンテンツとは異
なります。システムにより、このステータスのページから物理メモリの割当てが
解除される際、バッキング ストアにはそのコンテンツが保存されます。
これらステータスに関する詳細は、liblv2dbg ドキュメントを参照してください。
モジュール
プロセスで現在実行中のモジュールを表示することができます。
モジュール ID モジュールの識別子。
属性 SYS_MODULE_INFO で指定されるモジュール属性。
開始 開始関数エントリ ポイントのアドレス。
停止 停止関数エントリ ポイントのアドレス。
GUID モジュールがコンパイルされる際/リンクされる際に、リンカによって設定され
るグローバルに固有な識別子 (PPU-GUID とも呼ばれる)。
インデックス セグメントのインデックス。
詳細は、Lv2-Users_Manual_j.pdf 参照してください。
メモリ コンテナ
メモリ コンテナは、sys_memory_container_create() をコールすることによって作成できます。詳細は、
「Lv2-Users_Manual_j.pdf」を参照してください。
イベント フラグ
attr_protocol リソースが使用可能になった時に、複数待機スレッドをどのように処理するかを
示す。
有効な値:
SYS_SYNC_FIFO
SYS_SYNC_PRIORITY
SYS_SYNC_PRIORITY_INHERIT
attr_pshared プロセス間でのオブジェクト共有法を示す。
有効な値:
SYS_SYNC_NOT_PROCESS_SHARED – プロセス間でオブジェクトを共有しない。
key オブジェクトの作成時に指定される固有のキー。
flags オブジェクトの作成時に指定されるフラグ。
待機スレッド 待機スレッドのリスト。
スレッド停止時 この設定が有効な場合、ブレークポイント、例外、手動停止のいずれかによって
に更新 スレッドが停止する時はいつでも、ビューのコンテンツが強制的に更新されま
す。
14: プロセス情報の表示
この章では、プロセス ビューを使用してプロセスやスレッド情報を確認する方法について説明します。
また、ファイバ サポートに関する情報や、ファイバのデバッグ方法も取り上げます。
プロセス ビュー
プロセス ビューには、ターゲット上で作成されたすべてのプロセスとスレッドが、ツリー形式でリスト
表示されます。
プロセスとスレッドの情報は、以下の方法で表示します。
• [ウィンドウ] メニューで、[新しいビュー] をポイントして [プロセス] をクリックするか、または [プ
ロセス] ツールバー ボタンをクリックします。
プロセス ビューを含むウィンドウが新しく開きます。
プロセス ビューには、ターゲット上で実行されているすべてのプロセスとスレッドの情報が表示されま
す。さらに、PPU メモリに埋め込まれた SPU モジュール (つまり、PPU ELF ファイルまたは内在する
PRX に静的にリンクされたもの) が「埋め込み SPU モジュール」グループに表示され、PPU ロード アド
レスとモジュール名が示されます。
名前 スレッドの名前。
PC 停止スレッドのPC値。
• 単独のプロセスやスレッドは常に太字で表示され、これは、デバッグ中のプロセスやスレッドを表
します。
• 停止状態のスレッドは、赤く表示されます。
• 任意の 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 ユーザー ガイド
プロセス情報の表示
プロセスの中止 選択されたプロセスを中止させることができます。
プロセスの終了 選択したプロセスに終了リクエストを送信します。
更新 プロセス ビューを更新し、プロセス/スレッドの最新情報を表示します。
スレッドの終了を強制
スレッドの このオプションは、「停止」ステータスを持つスレッド上で右クリックした場合
終了を強制 にのみ表示され、該当スレッドを強制的に終了できます。
スレッドの中断と再開
選択した PPU スレッドは、別のスレッドを実行せずに 1 ステップずつ実行するため、中断することがで
きます。選択したスレッドは灰色になって選択できなくなり、スレッド ID の後に "(SUSPENDED)" と表
示されます。
スレッドを 1 ステップずつ実行すると、中断されているすべてのスレッドが現在の状態のままで維持され
ます。
この中断をのちほど取りやめると、スレッドは再び通常どおり実行されます。"(SUSPENDED)" という表
示が消え、スレッドのテキストの色が元どおりになります。
と表示されます。
すべての すべての中断スレッドの実行が通常どおり再開されます。
スレッドを
再開
ELF ファイルからシンボルをロード
プロセス ビューのツールバー
スレッドの 選択したスレッドを開始します。
開始 メモ:その他のビュー タイプがアクティブなビューである場合、スレ
ッドの開始/停止オプションは無効化されます。
スレッドの 選択されたスレッドを停止します。
停止
プロセスの 選択されたプロセスを中止させることができます。
中止
プロセスの 選択したプロセスに終了リクエストを送信します。
終了
更新 ボタンはショートカットメニューの更新オプションと同じです。ターゲッ
トのフルプロセス、PPU、SPU、raw スレッドそして PRX 情報を更新しま
す。
プロセス ビューのオプション
プロセス ビュー ツールバー上の [オプション] ボタンを押すと、以下のオプション ダイアログが表示され
ます。
ファイバ情報
ProDG では、ファイバに関する情報を表示する機能が限定的にサポートされています。サポート対象と
なるのは、ファイバ作成後にファイバ スケジューラを通じて実行された時、ファイバ コンテキスト経由
で作成された時、または C++ ファイバ ユーティリティ ライブラリの使用時です。
ファイバの使用方法に関する詳細は、SDK ドキュメント『libfiber-Overview_j.pdf』を参照してくださ
い。
ファイバ スケジューラでファイバを使用
各スケジューラは、プロセス ビューにスケジューラ ノードとして表示されます (ファイバ ノード下)。現
在スケジューラで管理されているファイバのリスト (スケジューラ ノード下にファイバ ノードとして表
示) は、cellFiberPpuFiberCreate() をコールすることによってファイバが作成されるたびに、プロセス ビ
ューで更新されます。ステータスはターゲットが停止するたびに (ステッピング時やブレークポイントの
ヒット時など) 更新されます。
以下の情報がプロセス ビューに表示されます。
スケジューラ ノード
ステータス 以下のいずれかのステータスになります。
INITIALIZED – スケジューラが初期化され、使用可能な状態。
INVALID – スケジューラがまだ初期化されていない状態。
名前 該当なし
PC 該当なし
します。
ファイバ数 – スケジューラが現在管理しているファイバの数を表します。
フラグ チェック – スケジューラが自動的に 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*」と表示されます。
PC 該当なし
レジスタ ノード
このグループでは、関連ファイバのレジスタ ノードが非表示または展開されます。ファイバがスケジュ
ールされている場合、レジスタにはレジスタ ビューと同じ値が含まれます。ファイバが一時停止された
場合は、表示された値が、ファイバの次回スケジュール時に復元される「保存レジスタ値」となります。
メモ:現在のところ、別のスレッドにスケジュールされた実行中ファイバのレジスタを表示すること
はできません。これらのレジスタを表示するには、最初にプロセス ビューでスレッドを選択する必要
があります (該当スレッドをダブルクリック)。
メモ:アクティブなスレッドに対する現在のファイバは、太字で表示されます。複数のワーカー スレ
ッドが存在する場合、現在どのファイバが実行されているかを確認するには、該当するワーカー スレ
ッドをダブルクリックします。
ファイバ コンテキストの使用
各ファイバ コンテキストは、プロセス ビューに コンテキスト ノードとして表示されます (ファイバ ノー
ド下)。リストは、cellFiberPpuContextInitialize() をコールしてファイバ コンテキストが作成されるたび
に、プロセス ビューで更新されます。ステータスは、ターゲットが停止するたびに (ステッピング時やブ
レークポイントのヒット時など) 更新されます。
以下の情報が表示されます。
ステータス 以下のいずれかのステータスになります。
INITIAL – ファイバ コンテキストの初期ステータスです。PPU スレッドによる実行
時、ファイバ コンテキストには必要なエントリ関数、その引数、スタック ポインタの
初期値が保持されます。
ON_THREAD – ファイバ コンテキストが、PPU スレッドによって実行されている状
態です。
SUSPENDED – ファイバ コンテキストの実行が一時的に停止された状態です。この
ステータスのファイバ コンテキストには、実行の再開に必要な情報が保持されます。
名前 コンテキストが名前を付けて作成された場合はコンテキスト名が表示され、名前が指
定されていない場合は「*NO NAME*」と表示されます。
PC 該当なし
ファイバのデバッグ
ファイバは PPU スレッドのコンテキストで実行されるため、ファイバにブレークポイントを配置して、
普通のスレッドと同じようにデバッグをすることができます。
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 194 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
プロセス情報の表示
制限:
• コールスタックでは、ファイバ エントリ ポイントを超えて確認することはできません。
• 現在デバッグされていないファイバのコールスタックやレジスタを確認することは、現時点ではで
きません。この機能は今後のリリースに含まれる予定です。
• 250 より前の SDK を使用している場合、プロセスへのアタッチ時にファイバ情報を取得することは
できません。
SPU検索パス
SPU ELF に対するシンボルをロードするには、SPU ELF 検索パスに関連パスを含む必要があります (自動
的に SPU ELF 検索パスに追加される、メイン PPU ELF の場所と「%SCE_PS3_ROOT%\target\images」
を除く)。
検索パスにフォルダを追加した後は、メインの SELF が読み込まれる度にフォルダを再スキャンするので
はなく、フォルダ内に新しい ELF ファイルが追加されたり ELF ファイルが変更されたりする度にモニタ
ーされます。
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 経由で転送する。
SPUモジュールのアンロード
モジュール管理スキームはユーザーが指定する必要があるため、SPU raw またはスレッド モード モジュ
ールをアンロードするためのメカニズムは搭載されていません。デバッガから SPU raw またはスレッド
モード モジュールをアンロードするには、モジュール ヘッダをクリアするシンプルなモジュール管理ス
キームを用います。ターゲットが停止すると、デバッガではそのモジュールが検出されず、関連する任意
のシンボルもアンロードされます。
これが発生した場合には、それぞれの「不明」なスレッドで停止を発行することにより、コールスタック
を取得してください。
プロセス ビュー内で各スレッドを順番に選択し、[停止] ツール バーのボタンをクリックし、次にブレー
クポイントで停止しているスレッドにシングルステップを行います。
これにより、スレッドが実行され (システム待機から戻る)、停止通知が処理されるためにシングル ステ
ップに戻る前にコールスタック情報が更新されます。
SPURS デバッグへの対応
ProDG には、SPURS ジョブ、ジョブキュー、タスク、カスタム ポリシー モジュール (まとめて簡単に
「SPURS モジュール」と呼ばれる) に対するデバッギング サポートが含まれます。「プロセス ビュー」
を参照してください。これらの手順には、デバッギング サポートの設定方法が示されています。これら
の手順には、cell\samples\sdk\spu_library\libspurs\ における任意の SPURS ジョブ/タスク/ポリシー
モジュール サンプルへの適用方法が示されます。
SPURS モジュールのビルド
SPURS モジュールをデバッグ用に設定するには、次の手順に従います。
(1) デフォルト リンカ スクリプトのリンカによって GUID のスペースが割り当てられます。
SPURS モジュールのデバッグ
SPURS モジュールをデバッグする方法には、以下の 3 つの方法があります。
(1) メイン メモリ内の埋め込み SPU モジュールにブレークポイントを配置する
PPU メモリ内の SPU コードの場所を特定してブレークポイントを挿入することにより、ロードされる前
のモジュールにブレークポイントを追加します。
プロセス ビューに表示されたデバッグ可能なモジュール
(3) ハードコードされたブレークポイント
デバッガでの設定に関係なく、任意の SPU コードのデバッグをシンプルかつ非常に効率的に行うメソッ
ドとして、snPause() を直接 SPU ソース コード (これ
は %SN_PS3_PATH%\spu\include\sn\LibSN_SPU.h に存在) にコンパイルする方法が挙げられます。こ
れにより SPU は実行可能となり、このインストラクションで停止します。停止後は、停止オペコードに
スキップするために手動で PC を進める必要なく、実行またはこのインストラクションからステップする
ことができます。
メモ:フォルダの階層が深い場合は、処理に時間がかかる場合があります。検索する階層の深さおよ
び各レベルでのエントリ最大数は、[サブ ディレクトリの追加] で変更できます。
(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 ビューが継続され、その設定情報も保
存されます。
これらのビューにスイッチすることは可能ですが、データは無効となります。ユニットが作成されると、
ビューには正しいデータが表示されます。
ソース ファイルに 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 が破損していないことが求められます。
デバッガ スクリプトとは
C スクリプト インタプリタは基本的に、ターゲット コンソールとデバッガの操作を可能にするスクリプ
トを実行するための手段となっています。新しいスクリプト ビュー を使用することにより、異なる処理
を実行するプログラムを簡単かつインタラクティブに記述することができます。これは、1 度のみ使用す
る「完了するまで実行」タイプのスクリプトで、ターゲットやデバッガのイベント (例外やキー入力など)
と連動させることもできます。ターゲットに対しては、これらのスクリプトを使用してアクセスしてメモ
リの内容を取得することができ、コンソールからの出力をデバッガのペインに表示することもできます。
デバッガに搭載された C インタプリタを構成する本製品は、多くの ANSI C に対応し、搭載された多く
の関数にアクセスできるため、スクリプトによるデバッガやターゲット コンソールとのインタラクショ
ンが可能になります。スクリプトが読み込まれると、バイトコード形式にコンパイルされた後、変換され
ます。
実行速度も非常に高速で、通常は、1 秒間に約 100 万の C ステートメントを実行することができます。
ProDGのスクリプト インタプリタには、一般的な Windows スクリプト機能やコード コンパイル方式と
比較して多くの利点があります。この機能は、COM インターフェイスを使用してアプリケーションを制
御する方法より非常に高速なため、多くの処理が実行可能となり、また使用も簡単です。スクリプト イ
ンターフェイスは C で記述されているため、C プログラマーにとっては非常に使用しやすくなっていま
す。
スクリプト ウィンドウには、スクリプト ビューとコマンド ビューの 2 つのタイプが用意されています。
• スクリプト ビューでは、コマンドの発行とスクリプトの実行が可能です。
• コマンド ビューは、新しいスクリプトを実行できないという点でスクリプト ビューと異なります。
このビューで実行可能なスクリプトは、デバッガが実行されたディレクトリ に保存されている
autoexec.eic およびコマンドラインから「-S」を使用して指定された起動スクリプトのみとなりま
す。起動スクリプトに定義されているすべての関数は、このコマンド ビューから利用できます。
スクリプト インタプリタのコアの部分は EiC となっています。SN Systems は、標準技術ライセンスの
もと、EiC パッケージを使用して製品を開発しています。
インストールの注意
スクリプト機能は、ProDG がインストールされるフォルダの「\examples\DebuggerScripting」サブデ
ィレクトリにインストールされます。
トラブルシューティング
問題が発生した場合は、コマンドライン スクリプトによって読み込み時エラーと実行時エラーが出力さ
れる TTY ストリームを確認してください。
スクリプトの使用方法
スクリプト ファイルは、デバッガに読み込んで実行できる C のソース コードが記述されたテキスト ファ
イルです。このテキスト ファイルは、任意のエディタを使用して作成/編集できます。
メモ:現在のバージョンでは、デバッガ内でスクリプト ファイルを編集できません。
スクリプト ビュー
スクリプト ビューでは、デバッガでスクリプトを実行できます。このビューは TTY ビューと似ており、
スクリプトの出力が、グラフィックやテキストで表示されます。またこのビューは、ほかのデバッガのビ
ューと同様に機能し、サイズ変更やドッキングも可能です。
複数の異なるスクリプトを同時に実行し、それぞれを個々のビューに表示することも可能で、各スクリプ
トは相互依存していませんが、スクリプトの処理が別のスクリプトに影響を与えないように注意する必要
があります。たとえばプロファイリング スクリプトは、特定の間隔でターゲットの実行を一時停止する
必要のあるスクリプトの影響を受けます。
スクリプトの一時停止 実行中のスクリプトを一時停止します。
スクリプトの終了 スクリプトの実行を停止します。
イミディエイト モードのステートメント
スクリプト ビューとコマンド ビューでは、コマンドを直接入力できます。入力したコマンドは、現在の
スクリプト オブジェクトのコンテキストで実行されます。これは、前のスクリプトで宣言された範囲内
の関数や変数にアクセスすることもできることを意味します。このため、起動スクリプトで便利なコマン
ドが宣言されており、コマンド ビューのコマンドラインから実行される場合に、非常に便利です。
この機能は、すべての一般的な C ステートメントやプリプロセッサ命令に対応しますが、ステートメン
ト (複数可) は 1 行に限られます。ここでは、2 行以上使用することができないため、長いステートメント
は、1 行に短縮する必要があります。
通常、以下のように 2 行にわたるステートメントは有効ですが、
printf("About to print Hello World\n");
printf("Hello World\n");
このため、以下のように 1 行に短縮する必要があります。
for(i=0; i<10; i++) printf("i=%d\n", i);
• コマンドの実行中は、スクリプト エンジンが無限ループに入ってしまう場合や、完了に長時間かか
る関数を実行してしまう場合があります。また END を押すと、スクリプト エンジンを強制的に終
了できます。これにより、スクリプト エンジンが基本ステータスにリセットされます。存在するス
タートアップ スクリプトが強制リセットの原因の場合、そのスクリプトは実行されせん。
スクリプトの [コマンド ビュー] と [コマンド スクリプト] の重要な違いは、メニューと通知の使用方法で
す。[コマンド ビュー] ビューでは通知を使用せず、コールバック関数を利用します。[コマンド ビュー]
で通知を使用すると、エラーの原因となります。起動スクリプトで、UI にメニュー項目を追加する場合
は、コールバック関数が指定されます。 また、メニュー ID のシステムが継続して使用されているため、
複数の項目が同じ関数をコールバックできます。
スクリプトの読み込みと実行
autoexec.eic を使用する
デバッガが起動すると、起動した同じディレクトリで autoexec.eic ファイルが検索されます。デバッガに
よりこのファイルが検出されると、コマンド ビューのスクリプト コンテンツ内で自動的に実行されま
す。この情報は、別のウィンドウで実行するスクリプトでは利用できず、[コマンド ビュー] のみがアク
セスできます。この時点では、スクリプト記述時に使用する関数、メニュー項目、定数をセットアップで
きます。
プロジェクトに保存されたスクリプト
特定のスクリプト ビューで前回実行されたスクリプトのパスは、デバッガでのプロジェクトの保存時に
維持されます。プロジェクトのロード時には、対象となるスクリプト ビューでこのスクリプトが自動的
に実行されます。
使用可能なライブラリ関数
標準 C ライブラリ関数
インタプリタには、標準の C ライブラリ関数が搭載されているため、スクリプト ファイルの最初でイン
クルードしないでください。必要に応じて、ほかのファイルをインクルードしてください。これらの関数
に関しては、「標準 C 」を参照してください。
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");
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」レジスタの内容を評価します。この評価の結果は、[スクリプト] の出力ビューに表示され
ます。
ターゲット変数に新しい値を割り当てる
スクリプトでは、指定したターゲット側の変数に値を割り当てることもできます。この場合は、単に代入
式を評価しますが、その際、現在のターゲット コンソールのコンテキストにある式の左側と右側が評価
されます。
ゲームの実行中は、式がグローバル変数である場合にこれは明らかにより有用になります。ローカル変数
が現在のコンテキスト スコープを持たないからです。代入式の戻り値は、割り当てられた値となりま
す。
スクリプト エンジン自体はビットフィールド (ビットフィールド構造体は、コンパイラの機能とターゲッ
ト コンソールに依存) に対応していないため、デバッガの式評価機能はターゲットのビットフィールド構
造体を理解することができません。このため、ビットフィールド式を割り当てに使用すると違反となりま
す。
以下はサンプルです。
sn_val result;
sn_uint32 uProcessID = 0x1000600;
sn_uint64 uThreadID;
uThreadID.word[1] = 0x0;
uThreadID.word[0] = 0x100;
詳細なスクリプティング
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();
}
}
通知の使用方法
特定のイベントに関する通知は、スクリプトで使用します。以下は、現在使用可能な通知です。
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;
while((sn_uint32)Notify.pParam1 != uMenuId)
GetNotification(NT_CUSTMENU, &Notify);
以下は、メニュー識別子とそのコードとの関連付けが維持されたままの例です。結果として、コードの不
正なエリアがコールされます (サンプル スクリプト フォルダの「brokenMenu.c」を参照)。
int main (int argc, char ** argv)
{
sn_uint32 item1;
sn_uint32 item2;
sn_uint32 item3;
sn_notify Notify;
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;
}
メモ:関数は関数ポインタではなく、文字列として渡されます。
void TestFunction(sn_uint32 uMenuID, sn_uint32 uCallingObj,
sn_uint 32 uUnit)
{
printf("Called by %u %u %u\n", uMenuID, uCallingObj, uUnit);
}
タイプ表示の変更
ウォッチ、オート、ローカルの各ビューのデータ タイプの表示は、カスタマイズすることができ、カス
タムのタイプ クラスから特定のメンバを表示、またはベクター タイプの内積などの派生データを表示さ
せることが可能になります。
タイプの表示には、コールバック関数 (タイプ ハンドラ) およびフォーマット文字列を使用でき、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
文字 説明 例 表示
コールバック関数は、以下の形式で使用します。
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 に収録されています。以下は、現
在使用可能なスクリプトの一覧です。
BrokenMenu.c メニューが目的どおり機能しないケースを紹介。このコードは、意図的に
不正に動作するようになっています。
drawModes.c 各種の描画モードをデモ。
Sync1-CondVariable.c 条件変数同期プリミティブへのアクセス方法をデモ。
Sync3-LWMutex.c 軽量ミューテックス同期プリミティブへのアクセス方法をデモ。
Sync4-Mutex.c ミューテックス同期プリミティブへのアクセス方法をデモ。
Sync6-Sema.c セマフォ同期プリミティブへのアクセス方法をデモ。
timer.c タイマー通知のみを実行。
スクリプティングの制限
ProDGデバッガのスクリプティング サポートは、まだ開発初期の段階にあるため、その仕様は変更の対
象となっています。SN Systems は、できる限りデバッガ スクリプティング API の統制に継続して努めて
いきますが、ユーザーは今後のデバッガ アップデートを適用するために、デバッガ スクリプトに関する
マイナーな変更を求められる場合があることをご了承ください。
以下は、現行バージョンに適用され、現在知られている制限事項です。
• ビットフィールドはサポートされていません。したがって、ビットフィールドを有する構造は使用
できません。C でのビットフィールドの使用方法はコンパイラに依存するため、スクリプトが目的
のシステムズでの仕様に完全に一致するビットフィールドを構築することは期待できません。ただ
し、デバッガ式評価機能はビットフィールドをサポートしているので、整数にビットフィールドを
用いるターゲット式を評価したい場合、式評価機能にビットフィールドを含む式を提示するたけで
実行できます。
• スクリプト解析機能は、デバッガ総体と同様のスレッド コンテキストで実行されるので、ターゲッ
ト通信の同期化に伴う問題はありません。スクリプトがデバッガのフリーズの原因になることを回
避するため、スクリプトは、デバッガのアイドリング中にのみ実行されます。これは、実行する必
要のあるコードがスクリプト内にある場合、スクリプトが、ターゲット コードの実行に時々割り込
む必要があることを意味します。
基本的な typedefs
標準 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
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
#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
AddMenuItem
パラメータ この関数のパラメータは以下のとおりです。
較することにより、選択されたメニュー オブジェクトを特定することができま
す。
BP_PARAM_INFO
構文 typedef struct{
sn_uint32 uUnitID;
sn_uint32 uProcessID;
sn_uint64 uThreadID;
sn_uint32 uPC; } BP_PARAM_INFO;
参照事項 GetNotification
CancelNotification
内容 この関数は、指定した通知をキャンセルします。これにより、指定したイベント
が発生しても、GetNotification 関数に対して通知が出力されなくなります。こ
れは、イベントの発生を抑制するものではありませんが、通知は生成されなくな
ります。たとえばタイマー通知をキャンセルした場合も、タイマーから指定間隔
で出力される信号は停止しません。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 RequestNotification、SelectNotification、GetNotification、PeekNotification
SelectNotification
内容 この関数は、指定した関数がリクエストされているかどうかをチェックします。
これにより、通知を同じ値に繰り返し設定する必要がなくなります。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 RequestNotification、CancelNotification、GetNotification、PeekNotification
CommandAddMenuItem
パラメータ この関数のパラメータは以下のとおりです。
入力: このメニュー項目が選択された際にコールされる関数の名前。この関数
szFunctionName は、メニュー ID と Calling Object ID をそれぞれ持つ 2 つの sn_uint32 変数を使
用します。
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。
参照事項 CommandRemoveMenuItem
CommandRemoveMenuItem
内容 この関数は、CommandAddMenuItem で追加されたメニュー項目を削除しま
す。ここでは、削除対象のメニュー項目を表す 1 つの引数が渡されます。この関
数は、スクリプトが最後まで到達して終了する場合にコールされます。スクリプ
トが外部から中断された場合、メニュー項目は自動的に削除されます。デバッガ
に最初から存在するメニュー項目 ([kill script] など) を削除することはできませ
ん。
メニュー項目を削除した場合、関連付けられていたメニュー ID は、別の新しい
メニュー項目で使用可能になります。このため、メニュー項目を何度も追加/削
除する場合は、関連のない新しいメニューが選択された際に、古い関数がコール
されないようにする必要があります。
スクリプト ビューで、追加していないメニュー項目を削除すると、エラーが発
生します。これは、スクリプトがメニュー項目を削除し、そのメニュー項目に依
存する別のスクリプトをブレークしてしまうことを回避するためのものです。
パラメータ この関数のパラメータは以下のとおりです。
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。
参照事項 CommandAddMenuItem
EndianSwap_2
パラメータ この関数のパラメータは以下のとおりです。
参照事項 EndianSwap_4、EndianSwapBuffer_4、EndianSwapBuffer_2
EndianSwap_4
パラメータ この関数のパラメータは以下のとおりです。
参照事項 EndianSwap_2、EndianSwapBuffer_4、EndianSwapBuffer_2
EndianSwapBuffer_2
2A82E7FB
以下のように変換されます。
CDAB3412
F1DE2687
822AFBE7
パラメータ この関数のパラメータは以下のとおりです。
参照事項 EndianSwap_4、EndianSwap_2、EndianSwapBuffer_4
EndianSwapBuffer_4
パラメータ この関数のパラメータは以下のとおりです。
参照事項 EndianSwap_4、EndianSwap_2、EndianSwapBuffer_2
ExitDebugger
内容 この関数は、デバッガを終了して「error」を返します。ここでは、デバッガの
表示のみではなく、デバッガ全体が終了することに注意してください。
パラメータ この関数のパラメータは以下のとおりです。
戻り値 なし
FileSelectionDialog
内容 この関数は、ユーザーがファイルを選択できる、[ファイルの選択] ダイアログボ
ックスを開きます。2 つの引数は、選択されたファイルへのパスとファイル名を
含む出力文字列です。
パラメータ この関数のパラメータは以下のとおりです。
GetInputLine
内容 この関数は、スクリプト ビューで入力された行情報を取得します。
パラメータ この関数のパラメータは以下のとおりです。
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。
GetLastError
内容 この関数は、スクリプトで発生した最後のエラーを返します。これは、
SN_FAILED マクロおよび SN_SUCCEEDED マクロと同時に使用します。
例:
if (SN_FAILED(PS3ThreadStart(uProcessID, uThreadID)))
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
内容 スクリプトで発生した最後のエラー メッセージを返します。これは、
SN_FAILED マクロおよび SN_SUCCEEDED マクロと同時に使用します。
例:
パラメータ なし
戻り値 最後のエラーの文字列値
参照事項 GetLastError
GetNotification
内容 この関数は、通知キューから次の通知を取得する際に使用します。キューが空の
場合は、戻り値が発生するまでブロックします。これは、スクリプトが特定イベ
ントを待機して実行継続を保留している場合に便利です。たとえばスクリプト
が、コードのセクションを毎秒 1 回実行する場合は、タイマーがセットされ、タ
イマー通知を受けるまで GetNotification を使用して実行が保留されます。
GetNotification が通知を受けると、通知キューから削除されます。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 RequestNotification、CancelNotification、CheckNotificatoin、PeekNotification
GetObjectData
void * pBuffer,
sn_uint32 uSize);
内容 この関数は、オブジェクトに関する情報を取得する場合に使用します。現在この
オブジェクトは、常にビューになっています。uObjectID は通常、メニューのコ
ールバック関数/通知によって取得されます。たとえばメモリ ビューでは、カス
タム メニュー項目のオプションが選択された場合、このビューで、現在のカー
ソル位置のアドレスを取得する関数がトリガされます。目的のオブジェクトが、
指定したコマンドに対応していない場合は、エラーを表す 0 が返されます。
パラメータ この関数のパラメータは以下のとおりです。
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。
参照事項 GetNotification
GraphicsClearWindow
内容 グラフィック ウィンドウをクリアします。ウィンドウは背景色のみになりま
す。
パラメータ なし
参照事項 GraphicsSetBackgroundColor
GraphicsDrawEllipse
sn_int32 y0,
sn_int32 x1,
sn_int32 y1);
パラメータ この関数のパラメータは以下のとおりです。
参照事項 GraphicsDrawLine、GraphicsDrawPixel、GraphicsDrawRectangle、
GraphicsDrawText、GraphicsDrawPolygon
GraphicsDrawLine
内容 この関数は、SetForegroundColor に対する前回のコールで指定された色で、(x0,
y0) と (x1, y1) の 2 ポイント間に線を描画します。これを含むすべての描画関数
では、(0, 0) がグラフィック ビューの左上コーナーになります。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 GraphicsDrawPixel、GraphicsDrawRectangle、GraphicsDrawEllipse、
GraphicsDrawText、GraphicsDrawPolygon
GraphicsDrawPixel
内容 この関数は、SetForegroundColor に対する前回のコールで指定された色で、画
面上に 1 つのピクセルを描画します。これを含むすべての描画関数では、(0, 0)
がグラフィック ビューの左上コーナーになります。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 GraphicsDrawLine、GraphicsDrawRectangle、GraphicsDrawEllipse、
GraphicsDrawText、GraphicsDrawPolygon
GraphicsDrawPolygon
内容 この機能は、pPoints で指定されたポイントで構成されるポリゴンを描画しま
す。sn_point 構造体には、「x」と「y」という sn_int32 タイプの変数が 2 つあ
り、この変数は、2D グラフィック ビューでのポイントの指定に使用します。ポ
リゴンは、GraphicsSetForegroundColor に対する前回のコールで指定された色
で描画され、座標システムでは (0, 0) が左上コーナーとなります。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 GraphicsDrawLine、GraphicsDrawPixel、GraphicsDrawRectangle、
GraphicsDrawText、GraphicsDrawEllipse
GraphicsDrawRectangle
パラメータ この関数のパラメータは以下のとおりです。
参照事項 GraphicsDrawLine、GraphicsDrawPixel、GraphicsDrawEllipse、
GraphicsDrawText、GraphicsDrawPolygon
GraphicsDrawText
内容 この関数は、SetForegroundColor に対する前回のコールで指定された色、およ
び GraphicsSetFont に対する前回のコールで指定されたフォントで、画面上にテ
キストを描画します。テキスト境界ボックスの左上コーナー (x, y) が (0, 0) の場
合は、グラフィック ビューの左上コーナーになります。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 GraphicsDrawLine、GraphicsDrawPixel、GraphicsDrawRectangle、
GraphicsDrawText、GraphicsDrawPolygon、GraphicsSetFont
GraphicsGetFontList
内容 この関数は、コンピュータで使用可能なフォントをチェックする際に使用しま
す。通常この関数は、2 回コールされます。最初のコールでは、pBuffer が
NULL にセットされ、フォント リストの文字列サイズが戻り値として返されま
す。これによりプログラマーは、結果を格納するための十分なバッファを割り当
てることができます。2 回目のコールでは、このバッファが渡されます。結果リ
ストは「\0」で終わる文字列で構成され、「\0\0」はリストの最後を表しま
す。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 GraphicsSetFont
GraphicsGetWindowSize
パラメータ この関数のパラメータは以下のとおりです。
参照事項 SNLoadBin
GraphicsSetBackgroundColor
内容 使用する背景の色を設定します。オブジェクトが描画されないエリアは、この色
で表示されます。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 GraphicsSetForegroundColor
GraphicsSetDrawMode
内容 スクリプト ビューの描画モードを設定します。ここでメインとなるモードはテ
キストとグラフィック (DF_TEXT と DF_GRAPHICS) ですが、補足フラグを使用
して表示内容をウィンドウ サイズに合わせる (DF_GRAPHICSSTRETCH) ことも
できます。このフラグを指定する場合は、同時に ORing で通常のグラフィック
フラグを指定する必要があります。
このモードは、テキストとグラフィックの組み合わせを指定するもので、その両
方が使用される場合にのみ適用されます。
パラメータ この関数のパラメータは以下のとおりです。
これらのフラグは、ORed と併用して、上記の描画モードの組み合わせを指定す
ることもできます。
GraphicsSetFont
内容 表示テキスト出力に使用されるフォントを設定します。GraphicsDrawText に対
するコールは表示テキストですが、printf は表示テキストではありません。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 GraphicsGetFontList、GraphicsDrawText
GraphicsSetForegroundColor
sn_uint8 blue);
内容 使用する前景色を設定します。描画されるオブジェクト (ピクセル、線、四角
形、楕円形、テキスト、ポリゴン) は、すべてこの色で表示されます。この色
は、各オブジェクトに対していつでも設定することもできます。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 GraphicsSetBackgroundColor、GraphicsDrawPixel、GraphicsDrawLine、
GraphicsDrawRectangle、GraphicsDrawEllipse、GraphicsDrawText、
GraphicsDrawPolygon
GraphicsSetWindowSize
パラメータ この関数のパラメータは以下のとおりです。
参照事項 GraphicsGetWindowSize、GraphicsSetDrawMode
GraphicsUpdate
内容 この関数は、バッファを前に切り替え、その内容を表示します。現在の表示内容
を更新する必要がある場合は、GraphicsUpdate がコールされます。描画コマン
ドに対するすべてのコールは、後ろのバッファに適用されるため、コールされる
までその結果は表示されません。
パラメータ なし
PeekNotification
パラメータ この関数のパラメータは以下のとおりです。
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。
参照事項 RequestNotification、CancelNotification、CheckNotification、GetNotification
PS3AddBreakPoint
内容 この関数は、コードの指定アドレスにブレークポイントを追加します。このブレ
ークポイントは、通常のブレークポイントと同様に処理されるため、手動で、ま
たは UnitRemoveBreakPoint あるいは UnitRemoveAllBreakPoints コマンドを使
用して、後で削除することができます。
パラメータ この関数のパラメータは以下のとおりです。
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。この関数は、指定したアドレス
にブレークポイントが既に存在する場合、または指定したアドレスが無効な場所
の場合にエラーとなります。
PS3AddHWBreakPoint
パラメータ この関数のパラメータは以下のとおりです。
bOnRead 読み込み時のブレークを設定。
bOnWrite 書き込み時のブレークを設定。
PS3AddressToLabel
内容 この関数は、メモリ内の指定アドレスのラベルを取得します。この関数は、
PS3AddressToLine と同様に使用しますが、実行されるプログラムのより論理的
な情報が返されます。たとえばこの情報は、どの関数がコールされたかを確認す
る場合に便利です。指定アドレスにラベルがない場合は、空の文字列が返されま
す。
パラメータ この関数のパラメータは以下のとおりです。
PS3AddressToLine
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 235 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API
内容 指定したアドレスの行と存在するファイルを判定します。この関数は、スクリプ
トで行のアドレスが明確になっている (レジスタをチェックするなどの方法で)
一方、その詳細が不明な場合に便利です。実行中のスクリプトが大量のファイル
を出力する必要がある場合は、命令のメモリ アドレスより、行番号とファイル
の場所を使用した出力方法がより効率的になります。
パラメータ この関数のパラメータは以下のとおりです。
PS3EvaluateExpression
内容 この関数では、指定したスレッドのコンテキスト内の式の評価に、デバッガの式
評価機能が使用されます。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 SN_VAL
PS3FlushMemoryCache
内容 指定したスレッドのローカルのメモリ キャッシュがクリアされ、強制的に更新
されます。ローカルに保持されたターゲット メモリのコピーは、スレッドが一
時停止した場合にのみ更新されるため、この機能は便利になります。また、ター
ゲットへの過負担を防止することもできます。ターゲットの現在のメモリ情報が
必要な場合は、このコマンドを使用して内容を強制的に更新してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetBreakPoints
内容 指定したコンテキストのブレークポイント アドレスに関するレポートを出力し
ます。pAddress は、検出された各ブレークポイントのアドレスを保持できるサ
イズである必要があります。ブレークポイントの数を確定するには、pAddress
を NULL としてパスする必要があります。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetConditionalVariableInfo
内容 特定の条件変数に関する情報を取得します。使用例については、Sync1-
CondVariable.c を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetConditionalVariableList
内容 指定されたプロセスに対する全条件変数 ID のリストを取得します。使用例につ
いては、Sync1-CondVariable.c を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetCoredumpFilename
内容 コア ダンプ ファイルがファイルサーバーのルートに対して保存されている場
合、この関数は完全パスとファイル名を指定のバッファにコピーします
(uMaxLength 文字まで)。
パラメータ この関数のパラメータは以下のとおりです。
戻り値 ファイル名がコピーされると非ゼロが返されます。ファイル名が利用できない
など、保存されたコア ダンプ ファイルがない場合、ゼロが返されます。
PS3GetEventQueueInfo
内容 イベント キューに関する情報を取得します。使用例については、Sync2-
EventQueue.cを参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetEventQueueList
パラメータ この関数のパラメータは以下のとおりです。
PS3GetLightWeightMutexInfo
パラメータ この関数のパラメータは以下のとおりです。
PS3GetLightWeightMutexList
パラメータ この関数のパラメータは以下のとおりです。
PS3GetLoadedModuleFilename
パラメータ この関数のパラメータは以下のとおりです。
PS3GetMemory
内容 この関数は、ターゲットのメモリ エリアをリクエストし、用意されたバッファ
にそれをコピーします。これは、定期的にチェックされるデータのアドレスが既
に判明している場合に便利です。PS3EvaluateExpression を繰り返しコールする
代わりにこの関数を使用することにより、変数を毎回特定する必要がなくなるた
め、時間の節約になります。
詳細は、BasicExamples(a).c を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetModuleInfo
sn_uint32* pBufferSize
SNPS3PRXSEGMENT* pSegments);
内容 特定モジュール、およびそれに含まれるモジュール セグメントの変数に関する
情報を取得する場合に使用します。セグメント情報で必要となるバッファを確保
するには、pModuleInfo を NULL としてパスし、次に以下のように割り当てを
行います。
pModuleInfo =
(SNPS3_MODULE_INFO*)malloc(sizeof(SNPS3_MODULE_INFO));
pModuleInfo->Segments = (SNPS3PRXSEGMENT*)malloc(pBufferSize);
詳細は、BasicExamples(b).c を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetModuleList
内容 モジュール ID のリストおよびプロセスに含まれるモジュールの数が出力されま
す。pModuleID で必要となるバッファを確保するには、NULL としてパスし、
pNumModules で返された値を使用してバッファを割り当てます。
詳細は、BasicExamples(b).c を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetMutexInfo
sn_uint64* pThreadInfo,
sn_uint32* puBufferSize);
パラメータ この関数のパラメータは以下のとおりです。
PS3GetMutexList
パラメータ この関数のパラメータは以下のとおりです。
PS3GetPPUThreadCount
パラメータ この関数のパラメータは以下のとおりです。
戻り値 成功時はゼロが、失敗時はゼロ未満が返されます。
PS3GetPPUThreadID
内容 プロセス内で指定されたインデックスにあるスレッドの ID を返します。
-1 がインデックスに対して返された場合、アクティブなスレッドの ID (プロセ
ス ビューで太字で表示されているもの) が返されます。
パラメータ この関数のパラメータは以下のとおりです。
uThreadIndex 入力:プロセス内のスレッドのインデックスです。アクティブなスレッドを取得
するときは -1 を渡します。
戻り値 成功時はゼロが、失敗時はゼロ未満が返されます。
PS3GetProcessID
内容 プロセス ID を返します。
パラメータ この関数のパラメータは以下のとおりです。
戻り値 成功時はゼロが、失敗時はゼロ未満が返されます。
PS3GetProcessInfo
パラメータ この関数のパラメータは以下のとおりです。
PS3GetRawSPUInfo
パラメータ この関数のパラメータは以下のとおりです。
PS3GetReadWriteInfo
内容 特定のリーダ/ライタ ロックに関する情報を取得します。使用例については、
Sync5-RWlock.c を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetReadWriteList
パラメータ この関数のパラメータは以下のとおりです。
PS3GetSemaphoreInfo
内容 特定のセマフォに関する情報を取得します。使用例については、Sync6-Sema.c
を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetSemaphoreList
内容 指定されたプロセスの全セマフォ ID のリストを取得します。使用例について
は、Sync6-Sema.c を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetSPUThreadGroupInfo
パラメータ この関数のパラメータは以下のとおりです。
PS3GetThreadInfo
内容 uThreadID で指定したスレッドの情報を取得します。必要なバッファを確保す
るには、pThreadInfo を NULL としてパスします。これにより、名前文字列の
変数の長さが確保されます。スレッド ID が SPU スレッドのものか PPU のもの
かが判明している場合は、PS3GetProcessInfo を最初にコールし、適切な情報構
造体が使用されます。
詳細は、BasicExamples(a).c の「GetPPUThreadInfo」関数および
「GetSPUThreadInfo」関数を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3GetThreadList
パラメータ この関数のパラメータは以下のとおりです。
PS3LineToAddress
内容 指定したファイルと行のメモリ アドレスを参照します。これにより、その行番
号に関する情報メモリの場所とファイルの場所が検出されます。
パラメータ この関数のパラメータは以下のとおりです。
PS3LoadBin
内容 この関数は、バイナリ ファイルの内容を、ターゲット上のメモリに直接ロード
します。この関数では、ファイル全体がロードされるため、サイズ値は渡されま
せん。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 PS3SaveBin
PS3LoadSymbols
パラメータ この関数のパラメータは以下のとおりです。
PS3PrintStaticAnalysis
内容 この関数は、静的な分析データをタブ区切り形式で指定ファイルに出力しま
す。
パラメータ この関数のパラメータは以下のとおりです。
fp 入力: 書き込み先のファイル。
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。
PS3ProcessLoad
内容 ここで使用するファイル名には、現在の作業ディレクトリの完全パスまたは相対
パスを使用します。
詳細は、BasicExamples(b).c を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3ProcessStart
内容 現在の位置からプロセスの実行を再開します。これが返された場合は、プロセス
が実行していることを意味します。
パラメータ この関数のパラメータは以下のとおりです。
PS3ProcessStop
内容 プロセスの実行を停止します。これは、現在のアドレスですべてのプロセス ス
レッドがブレークポイントをヒットしたように機能します。停止した位置から
は、PS3ProcessStart コマンドで実行を再開できます。PS3ProcessStop コマンド
が返された場合でも、すべてのスレッドが実際に停止したとは限りません。スク
リプトで完全停止が必要な場合は、スレッド停止をチェックする通知を使用して
ください。
パラメータ この関数のパラメータは以下のとおりです。
PS3RemoveAllBreakPoints
内容 設定されているすべてのブレークポイントを削除します。PS3AddBreakPoint で
追加したブレークポイントと同様に、手動で追加したブレークポイントも、この
関数の対象となります。
パラメータ この関数のパラメータは以下のとおりです。
PS3RemoveBreakPoint
sn_address address);
内容 指定した場所のブレークポイントを削除します。PS3AddBreakPoint で追加した
ブレークポイントと同様に、手動で追加したブレークポイントも、この関数の対
象となります。
パラメータ この関数のパラメータは以下のとおりです。
PS3SaveBin
パラメータ この関数のパラメータは以下のとおりです。
参照事項 PS3LoadBin
PS3SetMemory
内容 この関数は、ターゲット上のメモリ エリアを設定します。
PS3EvaluateExpression は変数の設定にも使用できますが、その値が何度も変化
する場合は、いったんアドレスを取得した後にこの関数を使用してデータを設定
すると時間を短縮できます。
詳細は、BasicExamples(a).c を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
PS3StartAllProcesses
内容 すべてのユーザー プロセスが、現在の位置から実行を再開します。これが返さ
れた場合は、プロセスが実行していることを意味します。
PS3StopAllProcesses
内容 すべてのプロセスの実行を停止します。これは、現在のアドレスですべてのプロ
セス スレッドがブレークポイントをヒットしたように機能します。停止した位
置からは、PS3StopAllProcesses コマンドで実行を再開できます。
PS3StopAllProcesses コマンドが返された場合でも、すべてのスレッドが実際に
停止したとは限りません。スクリプトで完全停止が必要な場合は、スレッド停止
をチェックする通知を使用してください。
PS3ThreadGetCallStack
内容 指定したスレッドの各コールスタック レベルにおける
SNPS3_CALLSTACK_INFO が返されます。コールスタックの数を確定するに
は、pCallStack を NULL としてパスし、次に pNumLevels を使用して
pCallStack のメモリを十分に確保します。
詳細は、BasicExamples(b).c を参照してください。
パラメータ この関数のパラメータは以下のとおりです。
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。
PS3ThreadIsRunning
内容 スレッドが実行中か停止中かを判定します。
パラメータ この関数のパラメータは以下のとおりです。
PS3ThreadRunToAddress
内容 指定したアドレスまでスレッドの実行を継続します。指定したアドレスに到達し
た場合は、ブレークポイントに到達した場合と同様に処理されます。
PS3ThreadStart に対するコールでは、この位置から実行が再開されます。
PS3ThreadRunToAddress をコールしてもスクリプト コードの実行はブロックさ
れません。実行をブロックする必要がある場合は、通知機能を使用して
NT_THREAD_STOP 通知を登録してください。その後、現在のアドレスは、指
定したアドレスと比較することにより、到達したかどうかをチェックすることが
できます。これにより、指定アドレスに到達しない場合のタイムアウト通知を設
定することもできます。
パラメータ この関数のパラメータは以下のとおりです。
PS3ThreadStart
内容 現在の位置からスレッドの実行が再開します。これが返された場合は、スレッド
が実行していることを意味します。
パラメータ この関数のパラメータは以下のとおりです。
PS3ThreadStep
内容 この関数は、スレッドが一時停止している場合のみ利用できます。このコマンド
をコールすると、スレッドがコマンド単位でステップ実行します。関数に到達す
ると、その関数もステップ実行されます。
パラメータ この関数のパラメータは以下のとおりです。
PS3ThreadStepOut
内容 この関数は、スレッドが一時停止している場合のみ利用できます。このコマンド
をコールすると、スレッドが一時停止している関数からステップ アウトしま
す。
パラメータ この関数のパラメータは以下のとおりです。
PS3ThreadStepOver
内容 この関数は、スレッドが一時停止している場合のみ利用できます。このコマンド
をコールすると、コマンド単位のステップ実行が開始します。関数に到達する
と、その関数のコンテンツは実行しますが、ステップ実行はしません。
パラメータ この関数のパラメータは以下のとおりです。
PS3ThreadStop
内容 ターゲット デバイス上のスレッドの実行を停止します。これは、現在のアドレ
スでスレッドがブレークポイントをヒットしたように機能します。停止した位置
からは、PS3ThreadStart コマンドで実行を再開できます。PS3ThreadStop コマ
ンドが返された場合でも、スレッドが実際に停止したとは限りません。スクリプ
トで完全停止が必要な場合は、スレッド停止をチェックする通知を使用してくだ
さい。
パラメータ この関数のパラメータは以下のとおりです。
PS3TriggerCoreDump
内容 ターゲット上でコア ダンプをトリガーします。
パラメータ なし。
PS3UpdateKernelInfo
内容 この関数は、スクリプティング エンジンで使用可能なカーネル同期基本命令情
報を更新するために使用されます。これは、カーネル List/Info 関数をコールす
る前に実行する必要があります。
PS3UpdateTargetInfo
内容 この関数は、スクリプティング エンジンで使用可能なプロセス情報を強制的に
更新するために使用されます。
RegisterTypeDisplayHandler
パラメータ この関数のパラメータは以下のとおりです。
戻り値 なし
RemoveMenuItem
内容 この関数は、AddMenuItem を使用して追加したメニュー項目を削除します。こ
こでは、削除対象のメニュー項目を表す 1 つの引数が渡されます。この関数は、
スクリプトが最後まで到達して終了する場合にコールされます。スクリプトが外
部から中断された場合、メニュー項目は自動的に削除されます。デバッガに最初
から存在するメニュー項目 ([kill script] など) を削除することはできません。こ
の関数は、[Command] ウィンドウからはコールできません。
メニュー項目を削除した場合、関連付けられていたメニュー ID は、別の新しい
メニュー項目で使用可能になります。このため、メニュー項目を何度も追加/削
除する場合は、関連のない新しいメニューが選択された際に、古い関数がコール
されないようにする必要があります。
スクリプト ビューで、追加していないメニュー項目を削除すると、エラーが発
生します。これは、スクリプトがメニュー項目を削除し、そのメニュー項目に依
存する別のスクリプトをブレークしてしまうことを回避するためのものです。
パラメータ この関数のパラメータは以下のとおりです。
RequestNotification
パラメータ この関数のパラメータは以下のとおりです。
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。既にリクエストされている通知
をリクエストした場合はエラーが発生します。
参照事項 CancelNotification、CheckNotification、GetNotification、PeekNotification
ScriptCloseNamedPipe
ScriptCloseAllOpenNamedPipes
ScriptConnectNamedPipe
ScriptCreateFile
ScriptCreateNamedPipe
sn_dword dwInBufferSize,
sn_dword dwDefaultTimeOut,
void** phPipe,
sn_dword* pErrorCode);
phPipe 出力:指定されたパイプ処理へのポインタ。
ScriptDisconnectNamedPipe
ScriptExecute
内容 以下を実行します。
ShellExecute(NULL, "open", pszCommand, pParams, "", SW_SHOW);
これは、各種の目的に使用することができます。たとえば、ターゲットの予期し
ない停止の後に、解析した TTY 出力を含む電子メールを自動的に送信すること
や、Tuner の実行などへの利用が可能です。
SN_FAILED マクロおよび GetLastErrorString() を使うと、ScriptExecute の結果
をテストしてエラー文字列が特定できます。
以下の定義は、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
ScriptWriteFile
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。
SetDisplayHandlerTimeout
パラメータ この関数のパラメータは以下のとおりです。
SetTimerInterval
内容 この関数は、タイマー通知の出力頻度の設定に使用します。その後、
GetNotification が取得できるように、通知をリクエストする必要があります。
パラメータ この関数のパラメータは以下のとおりです。
参照事項 RequestNotification、CancelNotification、GetNotification
sn_notify
構文 typedef struct {
sn_uint32 eNotifyType,
void *pParam1,
void *pParam2 } sn_notify;
内容 GetNotification からタイプを戻します。
参照事項 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;
参照事項 PS3EvaluateExpression
SNPS3_CALLSTACK_INFO
構文 typedef struct{
char pszReturnType[32];
char pszProtoType[128];
sn_uint64 uAddress; } SNPS3_CALLSTACK_INFO;
内容 この構造体には、コールスタックのエントリを定義するパラメータが含まれま
す。これは、特定スレッドのコールスタックに関する情報を取得する際に
SNPS3ThreadCallStackInfo 関数で使用します。
参照事項 SNPS3ThreadCallStackInfo
SNPS3_COND_ATTR
SNPS3_CONDITIONAL_INFO
SNPS3_EVENT_QUEUE_ATTR
SNPS3_EVENT_QUEUE_INFO
SNPS3_LWMUTEX_ATTR
SNPS3_LWMUTEX_INFO
SNPS3_MODULE_INFO
内容 この構造体には、モジュールを定義するパラメータが含まれます。これは、特定
プロセスの特定モジュールに関する情報を取得する際に SNPS3GetModuleInfo 関
数で使用します。
SNPS3_MUTEX_ATTR
SNPS3_MUTEX_INFO
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 関数で使用しま
す。
参照事項 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
構文 typedef struct{
sn_uint32 uParentID;
sn_uint32 uNameLen;
sn_uint32 uFileNameLen;
sn_uint32 uID;
sn_address aLastPC; } SNPS3_RAW_SPU_INFO;
参照事項 SNPS3GetRawSPUInfo
SNPS3_RWLOCK_ATTR
SNPS3_RWLOCK_INFO
SNPS3_SEMAPHORE_ATTR
SNPS3_SEMAPHORE_INFO
SNPS3_SPU_THREAD_INFO
構文 typedef struct {
sn_uint64 uThreadGroupID;
sn_uint32 uThreadID;
sn_uint32 uFileNameLen;
sn_uint32 uThreadNameLen; } SNPS3_SPU_THREAD_INFO;
参照事項 SNPS3ThreadInfo
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 関数で
使用します。
参照事項 SNPS3GetSPUThreadGroupInfo
同期基本命令属性 #定義
© SCEI ProDG Debugger for PlayStation®3 v470.1
- 269 -
ProDG Debugger for PlayStation®3 ユーザー ガイド
付録 A: スクリプティング API
//uAttrProtocol の定義
//uAttrRecursive の値
//uAttrPshared の値
//uAttrAdaptive の値
//uFlags の値
TextClear
パラメータ なし
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。
TextSetBufferSize
パラメータ この関数のパラメータは以下のとおりです。
戻り値 成功時はゼロ、失敗時はゼロ未満が返されます。
TTY_PARAM_INFO
構文 typedef struct{
char ChannelName[32];
sn_uint32 uLen; } TTY_PARAM_INFO;
参照事項 GetNotification
18: 付録 B: 正規表現シンタックス
基本シンタックス
以下の表は、デバッガの正規表現パーサーで理解されるメタ文字をリストしたものです。
式 意味
. 任意の 1 文字に一致する。
?? ? と同様ですが、最短一致となります。
+? + と同様ですが、最短一致となります。
$ 入力の終わり。たとえば、[0-9]$ は、入力の終わりの数字に一致します。
省略形
正規表現パーサーでは、"\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]+)
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 のシンボルが自動的にロードされます)。
固定フォルダ位置を使用するプロジェクトの場合、これにより、手作業でのSPU 検索パス設定に依存す
ることなく、集中的にこれらを設定できるようになります。
アプリケーション
移動 F5
ステップ イン F11
停止 Shift+F5
実行ファイルのロード Alt+F3
リセット&リロード Alt+F2
次のユニットにサイクル Ctrl+Alt+U
テキストをクリップボードにコピー Ctrl+C
クリップボードからテキストを貼り付け Ctrl+V
表示形式のサイクル Ctrl+H
フォーカスを下に移動 Alt+下矢印
フォーカスを左に移動 Alt+左矢印
フォーカスを右に移動 Alt+右矢印
フォーカスを上に移動 Alt+上矢印
ブレークポイントの同期 Ctrl+Alt+F3
ビューの更新 Shift+数字キー*
すべてを削除 Shift+Delete
ブレークポイント ビュー
追加 Ctrl+B
すべて削除 Ctrl+Shift+F9
削除 Delete
有効化 Ctrl+F9
ソースに移動 Ctrl+G
ブレークポイントのプロパティ Alt+Enter
コマンド ビュー
すべて選択 Ctrl+A
クリア Ctrl+L
式ビュー (オート、ローカル、ウォッチ)
スタティックの切り替え Ctrl+S
アドレス列の表示 Ctrl+A
基数のサイクル TAB
式の値をインクリメント ピリオド
式の値をデクリメント コンマ
カーネル ビュー
更新 Ctrl+Enter
メモリ ビュー
新しい値の入力 Enter
タイプ Ctrl+スペース キー
サイズ スペース キー
アドレスに移動 Ctrl+G
ポインタに追従 Shift+G
ポインタに追従を取り消し Ctrl+Shift+G
アドレスにロック Ctrl+L
バイト順を逆転 Ctrl+R
メモリを値でフィル Ctrl+F
プロセス ビュー
更新 Ctrl+Enter
レジスタ ビュー
サイクル形式 Ctrl+H
スクリプト ビュー
すべて選択 Ctrl+A
クリア Ctrl+L
貼り付け Ctrl+V
TTY ビュー
検索 Ctrl+F
次を検索 F3
次の選択を検索 Ctrl+F3
前を検索 Shift+F3
すべて選択 Ctrl+A
クリア Ctrl+L
行に移動 Ctrl+G
ワークスペース ビュー
アイテムの検索 Ctrl+F
次を検索 F3
追加 (P) Insert
削除 (P) Delete
名前の変更 (P) F2
ファイルをエディタで開く(F) Ctrl+E
実行 (B) Ctrl+R
ファイルをエディタで開く Ctrl+E
ブレークポイントの切り替え F9
ブレークポイントのプロパティ Ctrl+B
すべてのブレークポイントを削除 Ctrl+Shift+F9
ブックマークの切り替え Ctrl+F2
次のブックマーク F2
前のブックマーク Shift+F2
ブックマークをクリア Ctrl+Shift+F2
PC に移動 TAB
アドレスに移動 Ctrl+G
モジュールに移動 Alt+G
カーソルまで実行 Ctrl+F10
ソースのステップを強制(D) Ctrl+Q
すべて選択 Ctrl+A
検索 Ctrl+F
次を検索 F3
前を検索 Shift+F3
選択を検索 Ctrl+F3
前の選択を検索 Ctrl+Shift+F3
全ファイルの更新 Ctrl+Shift+Enter
関数の参照 Alt+B
ファイルを閉じる 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 = ブラウズ ビューのタブのみ
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