この記事は1年以上前に書かれた記事です。情報が古い可能性がありますので、ご注意ください。 This article was written over a year ago. Please be aware that the information may be old.

Xcodeでのリモートデバッグ

Xcodeではリモートデバッグの機能が入っています。Xcodeのヘルプでも解説されています。ただ、ヘルプに書かれている方法ですと、デバッグするプログラムを動かすマシンとデバッガを動かすマシンの両方からアクセスできる、共有フォルダをサーバーに用意する必要があり面倒です。また、サーバーのOSによっては、Xcodeの中間ファイルを作成できないことがあります。共有フォルダを用意しない場合は、ビルドしたバイナリをデバッグするプログラムを走らせるマシンにコピーするとなっています。これはもっと面倒です。

少し調べてみると、共有の場所にあることは必須条件ではなく、デバッグするプログラムが動作するマシンとデバッガを動かすマシン上のどちらからみても、デバッグするプログラムとプロジェクトファイルやソースファイルのファイルパスが一致していればよいということのようです。

それなれば、次のような方法でもできるはずと考えました。

  1. デバッグするプログラムを動かすマシンはヘルプ通りにSSHでログインできるようにする
  2. プロジェクトファイルとソースファイル一式がある、デバッガを動かすマシンは「ファイル共有」を有効にする
  3. デバッグするプログラムを動かすマシン上でデバッガを動かすマシンに「ファイル共有」で接続する
  4. 「ファイル共有」で接続したら、「シンボリックリンク」を「ファイル共有」で接続したマシンに張るようにして、ファイルパスが一致するようにする
  5. ヘルプ通りにリモートデバッグを行う

試してみると、予想通りにうまく動きました。この記事では、防備録も兼ねて上記手順について詳しく記述します。

SSHの準備

ヘルプに従って行います。まず、デバッガを動かすマシン上でターミナルを開き、次のように入力して、SSHのキーを生成します。

ssh-keygen -t dsa

画面の指示に従って、秘密鍵と公開鍵を作成します。デフォルトのままであれば、ホームディレクトリに「.ssh」というディレクトリが作成され、その中に秘密鍵(「id_dsa」ファイル)と公開鍵(「id_dsa.pub」ファイル)が作成されます。

なお、Mac OS Xのバージョンによっては、「dsa」タイプの鍵では動作しないことがあります。その場合は、次のように「rsa」タイプの鍵を作成して使用します。

ssh-keygen -t rsa

次に公開鍵をログインするマシン(デバッグするプログラムを動かすマシン)にコピーします。デフォルト状態で作成される「.ssh」フォルダは不可視フォルダなのでFinderの「移動」メニューから「フォルダへ移動…」を選択し、フォルダパスに「~/.ssh」と入力します。「.ssh」フォルダに移動するはずですので、公開鍵ファイルをコピーします。

ログインするマシン上では、公開鍵ファイルは「authorized_keys」というファイルに格納します。コピーした公開鍵ファイルをテキストエディタで開き、ログインするマシン上のログインするときに使用するユーザーのホームディレクトリ内の「.ssh」フォルダ内の「authorized_keys」ファイル内にペーストします。このファイルはログインできるユーザーの公開鍵を入れるファイルです。1行に1公開鍵という形で記述します。無ければ、作成してもかまいません。「.ssh」フォルダも無ければ作成してください。Finderでは「.」から始まる名前のフォルダは作成できませんので、フォルダの作成はターミナルから「 mkdir」コマンドで行います。

mkdir ~/.ssh

次に、ログインするマシンの「システム環境設定」から「共有」を開き、「リモートログイン」を有効にします。

ここまでできたら、一度、デバッガを動かすマシンから、SSHで接続してみてください。SSHで接続するには、ターミナルで次のように入力します。

ssh ユーザー名@IPアドレス(もしくはホスト名)

IPアドレスはMac通しであれば、「マシン名.local」でも大丈夫です。社内システムの設定があれば、それを使ってください。

初めてログインするときには、「known_hosts」ファイルに登録してもよいか、聞いてきますので、「yes」と入力します。次にパスワードを入力するようにプロンプトが出ますので、鍵生成の時に使用したパスワードを入力します。このときプロンプトに鍵ファイルのファイルパスが表示されれば、鍵の登録に成功しています。

ファイル共有を有効にする

デバッガを動かすマシンの「ファイル共有」を有効にします。「システム環境設定」から「共有」を開き「ファイル共有」を有効にします。

次に、デバッグするプログラムを動かすマシンからデバッガを動かすマシンにファイル共有で接続します。

接続したら、シンボリックリンクを張ります。

例えば、「/Users/Someone/Documents/MyProject」というフォルダにソースファイル、プロジェクトファイルなど一式が格納され、ビルドされたプログラムも「/Users/Someone/Documents/MyProject/build」以下に保存されるとします。

そして、「ファイル共有」でマウントしているボリューム名が「Someone」だとします。(ルートディレクトリをマウントした場合は「MacintoshHD」など、起動ディスクのボリューム名です)

この場合であれば、デバッグするプログラムを動かすマシン上で、ターミナルを開き、次のように入力します。

ln -s /Volumes/Someone/Documents/MyProject /Users/Someone/Documents/MyProject

ただし、デバッグするプログラムを動かすマシン上に、「/Users/Someone/Documents」フォルダがない場合は、シンボリックリンクを作成する前にこのフォルダを作成しておきます。

Xcodeでの設定

Xcodeでの設定はヘルプ通りです。Xcodeの「グループとファイル」で「実行可能ファイル」の中にある、プログラムをダブルクリックして設定を開き、「デバッグ」タブの「sshを使って実行可能ファイルをリモートデバッグする」にチェックを入れます。

接続先には、先ほどSSHのテストに使ったのと同じものを使用します。入力する構文も同じで次のようにします。

ユーザー名@IPアドレス(もしくは、ホスト名)

自動的に「使用する標準入出力」が「パイプ」になりますが、そのままにしておきます。

実行

後は普通にデバッグ実行すると、SSHでログインされる先のマシン上でプログラムが起動します。初めて実行するときは、SSHのアカウントを入力するように表示されますので、ユーザー名とパスワードを入力します。

OSのバージョンが違っても大丈夫か?

GDBさえ入っていれば、OSのバージョンが違っても大丈夫です。GDBはXcodeと一緒にインストールされます。

今のところ、私が試したことのある組み合わせは次のようなものです。

デバッガを動かすマシン: Mac OS X 10.4.11

デバッグするプログラムを動かすマシン: Mac OS X 10.3.9, Mac OS X 10.5.0, Mac OS X 10.6.1

ソースを修正して再ビルドしたら起動しなくなった

場合分けはよくわからないのですが、ソースを修正して再ビルドすると「dyld」まわりのエラーが出て起動しなくなることがあります。その場合は、実行ファイルをビルドするターゲットだけ「クリーン」を実行してからビルドすると動くようになります。

私の経験では、フレームワークを内包するプロジェクトでよく起きるような印象です。

プロフィール

林 晃
アールケー開発 代表
NPO法人MOSA 常任理事
ソフトウェアエンジニア

2005年にアールケー開発を開業し、企業から依頼を受けて、ソフトウェアを受託開発しています。macOSやiOSのソフトウェアを専門に開発しています。ソフトウェア開発の他に、技術書執筆、セミナー講師、オンライン教育コンテンツ開発などを行っています。

詳細はこちらをご覧ください。

アールケー開発について

著書の紹介

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

フォローする