タイトル【SnapXShot制作記】CodeWarrior 6でのデバッグ方法カテゴリー開発ツール, SnapXShot制作記
作成日2000/12/1 15:50:20作成者新居雅行
前回の『キーセンスは意外に簡単にできたが…』では、CodeWarrior 6をMac OS X Public Betaで使った状態でのデバッグができないことを書いたが、何人かの読者の方より情報をいただき、デバッグができるようになった。SnapXShotの話というよりも一般的な話なのではあるが、話の続きということで、このシリーズでデバッグを可能にする方法を説明しておこう。

CodeWarrior 6をMac OS Xで使う時のデバッグ方法としては、2通りの方法がある。単一マシンでのみ行える方法と、ネットワークを経由して開発マシンと実行マシンを別々にして行なう方法だ。前者を「スタンドアロンデバッグ」、後者を「リモートデバッグ」と呼んで区別することにしよう。なお、リモートデバッグでも、コントロールする側と実行する側が同一のマシンでもかまわないので、1台のマシンで開発しているときにも使える手法である。

スタンドアロンデバッグでは、MetroNubXというアプリケーションが自動的に起動して、デバッグの処理の仲立ちをするようだ。このアプリケーションが起動することにより、CodeWarriorのIDEから、ターゲットになるアプリケーションに対してステップ動作をしたり、変数の内容を参照するなどの一連のデバッグ作業ができるようになる。しかしながら、筆者のところでは、このMetroNubXが起動しなかった。やはりというか、このMetroNubXのファイルのアクセス権が実行可能になっていので、デバッグが始まらないそうなのだ。
ちなみに、このMetroNubXであるが、Sherockで検索すると、Metrowerks CodeWarrior 6.0フォルダからの相対パスでは、「Metrowerks CodeWarrior:CodeWarrior Plugins:Debuggers」という場所にある。しかしながら、これはパッケージになっているので、実行ファイルの実体はもっと奥にある。そのファイルの実行権限を設定してやらないといけない。つまりは、Terminalを起動してchmodコマンドで実行権限を立てるわけだが、パスが深く、また、人によってはCodeWarriorのインストール位置も違っているだろうから一概に「このコマンドを入力すればOK」というのは示しづらい。やや、回りくどいのだが、次のようにすればMetroNubXの実行権限は確実に設定できるものと思われる。

1. Sherlockを起動する。Dockにあるアイコンをクリックすればよい。
2. ファイル名の検索を行なうが「MetroNubX」を検索する。
3. MetroNubXという名前のアプリケーションを探して、そのパスをウインドウの下側に表示させる。たぶん1つだけだろう。
4. そのMetroNubXのあるDebuggerフォルダのアイコンをダブルクリックして、そのフォルダを開く
 

5. フォルダの内容がウインドウで表示される。
6. MetroNubXこのアイコンをcontrolキーを押しながらクリックする。そして表示されるメニューから「パッケージの内容を表示」ないしは「Show Package Contents」を選択する。
 

7. パッケージの中身がウインドウで表示される。
8. パッケージの中のContents/MacOS/MetroNubXというファイルを見つける。
9. Terminalを起動する。/Applications/Utilitiesにある。
10. コマンドとして「chmod_+x_」とまず入力する(アンダーラインは半角のスペースを意味する。ここではまだreturnキーは押さない)。
11. 手順8で見つけたMetroNubXのファイルのアイコンを、Terminalのウインドウにドラッグ&ドロップする。
 

12. すると、手順10で入力したコマンドの後にMetroNubXへの絶対パスが自動的に入力される。ここで、returnキーを押す。

以上の手順で、MetroNubXに実行権限が設定されるため、デバッグ実行時に自動的に起動され、デバッグができるようになるのである。なお、上記の一連の手順は、CodeWarriorをインストールした時のユーザないしは管理権限のあるユーザでログインした状態で行なわないといけない。

筆者の環境では、これでうまくいった。しかし、この状態でも、デバッグがうまくいかないこともあるそうだ。まず、CodeWarriorのプロジェクトファイルを、Mac OS Xの起動ボリュームにはない状態でないとデバッグがうまくいかないということがあるそうだ。つまり、プロジェクトファイルなどを、Mac OS Xの起動ボリュームとは違うボリュームに置いて作業をするというわけである。また、MetroNubXまでのパスや、プロジェクトまでのパスに日本語のフォルダ名のフォルダがある場合にも、デバッグがうまくいかなかったという場合もあったらしい。さらに、LaunchCFMApp(/System/Library/Frameworks/CarbonCore.frameworkにある)のシンボリックリンクを、/System/Developer/Toolsというフォルダを作ってそこに作成しておくという対処法もあるという。場合によってはこうした点もチェックすると良いだろう。

次にリモートデバッグだが、通常は2台のマシンで行ない、一方で開発してコンパイルした結果を、別のマシンで動かしてデバッグをするとうものである。だが、これを1台で完結させてもよい。いくらか準備が必要ではあるが、おおむねCodeWarrior IDE内で行なうので、その点は気楽に作業ができる。設定のポイントは次の通りだ。

  • Mac OS X自体がインターネット接続できる状態になっているのが望ましい。つまり、TCP/IPの機能がまともに動く状態になっている。
  • 「編集」メニューから「環境設定」を選択して、「IDEの設定」ウインドウを表示する。そこにある「リモート接続」の設定を行なう。「追加」ボタンをクリックし、「127.0.0.1:6969」つまり自分自身のデバッガのポートに対する接続設定を加える。通常は、そのまま適当な名前をつけてOKをクリックすればよい。
  •  
  • プロジェクトの設定ウインドウを開き、「リモートデバッグ」の設定を行なう。「リモートデバッグを有効にする」のチェックを入れる。「接続」は「IDEの設定」で指定した名前が出ているはずである。そして、「リモートダウンロードパス」は、「/Users/msyk」など実存して書き込めるディレクトリを指定する(このmsykをユーザ名に置き換えればよい)。
  •  
  • /Developer/ApplicationsにあるDebugNubControllerをダブルクリックして起動する。ウインドウが出てくるので、Startボタンをクリックする。
  •  

以上のような状況で、CodeWarriorでデバッグ実行を行なうと、リモートデバッグが開始される。コンパイル結果を、実際にはネットワークを経由して実行させるマシンに転送し、リモートダウンロードパスにそのファイルを保存して実行を行なうという次第だ。ただし、TCP/IPがきちんと機能しているのが基本だ。そのあたりのネットワークの設定を中途半端にしていると、TCP/IPの機能が完全には動作しないために、デバッグができないということにもつながるようである。

以上、Mac OS X上でCodeWarriorのデバッグを行なう方法を2通り紹介したが、1台のマシンでデバッグを行なうのであれば、いずれかの方法でかまわない。(以上の情報は、読者の渡辺純一さん、戸松さんより情報をいただいた。また、cw-userのメーリングリストの情報も参考にさせていただいた。この場を借りてお礼を申し上げたい。)

◇About CodeWarrior User’s Mailing List
 http://ueda-net.com/CW/index.html
関連リンク