リモートデバッグを行う
特定のPCでしか発生しない問題を解決するのは容易なことではありません。オンラインソフト等、不特定多数に配布するものは特にやっかいです。
しかしながら、カスタマイズした業務アプリ等、客先でのみ発生する問題を解決するのであれば、方法がない訳ではありません。
Delphiを客先にインストールする
これが最も簡単な方法です。"現地デバッグ"という奴ですね。しかしながら、この方法には問題があります。
- インストールさせてくれない事がある。
- ライブラリや VCL 等の環境整備に手間が掛かる
- Delphi6以降だとインストール回数制限がある
- そもそもライセンスに違反しかねない
リモートデバッグ
そこでこの方法を採ります。リモートデバッガはその名の通り、遠隔でデバッグします。TCP/IP経由でデバッグしますが、実質共有フォルダが必要なので、LAN内でのみ有効な手段です(そもそもセキュリティの面でインターネット経由でデバッグするようには作られていません)。外部から持ち込まれたPCの接続許可があるのだったら、この方法を採用するのがいいでしょう。
Delphi4 以降ではリモートデバッグが可能で、Delphi7 以降だと Professional 版から標準添付されています。気をつけなくてはならないのが Delphi2005 には、どのエディションにもリモートデバッガが用意されていないという点です。また、BDS2006 以降のリモートデバッガは Win9x へインストールする事ができない点にも注意が必要です。
注意点です。Delphi4~7迄のリモートデバッガはターゲットOSがWin9xであっても動作しますが、BDS2006/Delphi2007のリモートデバッガはターゲットOSがWindows 2000以降となっています。Delphi 2009 の場合、そもそも生成バイナリがWin9xでは動作しません(中には動作するものもあるかもしれませんが)。
| バージョン |
9x系 |
NT系 |
Pro版に添付 |
| Delphi 3またはそれ以前 |
(付属せず) |
| Delphi 4 |
○ |
○ |
× |
| Delphi 5 |
○ |
○ |
× |
| Delphi 6 |
○ |
○ |
× |
| Delphi 7 |
○ |
○ |
○ |
| Delphi 2005 |
(付属せず) |
| BDS 2006 / Turbo Delphi |
× |
○ |
○ |
| Delphi 2007 |
× |
○ |
○ |
| Delphi 2009 |
× |
○ |
○ |
| Delphi 2010 |
× |
○ |
○ |
リモートデバッガの準備
それでは準備に取り掛かりましょう。リモートデバッガはインストールCD/DVDに収められており、Delphiインストーラのメニューからインストール可能です。しかしながら、アプリケーションのインストールを禁じている会社もあるでしょう。このような場合には "リモートデバッガ導入をファイルコピーで済ませ、用がなくなったら削除する" という手段を採ります。どちらの方法でも可能にするために、まず普通にリモートデバッガをインストールします。念のために、開発環境がインストールされていない環境(仮想PC等)へインストールして下さい。
- Delphi 4
"%ProgramFiles%\Common Files\Borland Shared\Debugger"
- Delphi 5
"%ProgramFiles%\Borland\Remote Debugger\5.0"
"%ProgramFiles%\Common Files\Borland Shared\Debugger"
- Delphi 6
"%ProgramFiles%\Borland\Remote Debugger\6.0"
"%ProgramFiles%\Common Files\Borland Shared\Debugger"
- Delphi 7
"%ProgramFiles%\Borland\Remote Debugger\7.0"
"%ProgramFiles%\Common Files\Borland Shared\Debugger"
- BDS 2006
"%ProgramFiles%\Borland\BDS\4.0\rdbg"
- Delphi 2007
"%ProgramFiles%\RemoteDebugger"
- Delphi 2009
"%ProgramFiles%\RemoteDebugger"
- Delphi 2010
"%ProgramFiles%\RemoteDebugger"
デフォルトで、上記の場所へインストールされます。Delphi 2007 と Delphi 2009 のリモートデバッガは初期インストールフォルダがバッティングしますので注意して下さい。 インストールが完了したら、インストールフォルダにあるリモートデバッガ用のファイルをバックアップしておきます。
リモートデバッガのインストール/アンインストール(インストーラ使用)
リモートデバッガをインストーラを使ってインストールできる環境ならば特に問題になる事はないハズです。
リモートデバッガのインストール(手動)
- "リモートデバッガの準備" で収集したファイルを同じフォルダに集めて(サブフォルダは作らない)、ターゲットPCにコピーします(例: "C:\RDEBUG")。
-
デバッガDLLを登録します。Win9xの場合、regsvr32.exe は "%WinDir%\System" にあります。デバッガDLLはフルパスで登録して下さい。
- Delphi 4の場合
"regsvr32.exe C:\RDEBUG\bordbk40.dll"
- Delphi 5の場合
"regsvr32.exe C:\RDEBUG\bordbk50.dll"
- Delphi 6の場合
"regsvr32.exe C:\RDEBUG\bordbk60.dll"
- Delphi 7の場合
"regsvr32.exe C:\RDEBUG\bordbk70.dll"
- BDS 2006の場合
"regsvr32.exe C:\RDEBUG\bordbk100.dll"
"regsvr32.exe C:\RDEBUG\bordbk100n.dll"
- Delphi 2007の場合
"regsvr32.exe C:\RDEBUG\bordbk105.dll"
"regsvr32.exe C:\RDEBUG\bordbk105n.dll"
- Delphi 2009の場合
"regsvr32.exe C:\RDEBUG\bordbk120.dll"
"regsvr32.exe C:\RDEBUG\bordbk120n.dll"
- Delphi 2010の場合
"regsvr32.exe C:\RDEBUG\bordbk140.dll"
"regsvr32.exe C:\RDEBUG\bordbk140n.dll"
-
リモートデバッグサーバを起動します。
- Delphi 4の場合
"C:\RDEBUG\borrdbg.exe -listen"
- Delphi 5の場合
"C:\RDEBUG\bordbg50.exe -listen"
- Delphi 6の場合
"C:\RDEBUG\bordbg60.exe -listen"
- Delphi 7の場合
"C:\RDEBUG\bordbg70.exe -listen"
- BDS 2006の場合
"C:\RDEBUG\rmtdbg100.exe -listen"
- Delphi 2007の場合
"C:\RDEBUG\rmtdbg105.exe -listen"
- Delphi 2009の場合
"C:\RDEBUG\rmtdbg120.exe -listen"
- Delphi 2010の場合
"C:\RDEBUG\rmtdbg140.exe -listen"
リモートデバッガのアンインストール(手動)
- リモートデバッグサーバを停止します。
Delphi4の場合にはタスクを殺して下さい。それ以外の場合には通知領域にあるアイコン(緑の虫)を右クリックで終了させて下さい。
-
デバッガDLLを登録解除します。
- Delphi 4の場合
"regsvr32.exe -u C:\RDEBUG\bordbk40.dll"
- Delphi 5の場合
"regsvr32.exe -u C:\RDEBUG\bordbk50.dll"
- Delphi 6の場合
"regsvr32.exe -u C:\RDEBUG\bordbk60.dll"
- Delphi 7の場合
"regsvr32.exe -u C:\RDEBUG\bordbk70.dll"
- BDS 2006の場合
"regsvr32.exe -u C:\RDEBUG\bordbk100.dll"
"regsvr32.exe -u C:\RDEBUG\bordbk100n.dll"
- Delphi 2007の場合
"regsvr32.exe -u C:\RDEBUG\bordbk105.dll"
"regsvr32.exe -u C:\RDEBUG\bordbk105n.dll"
- Delphi 2009の場合
"regsvr32.exe -u C:\RDEBUG\bordbk120.dll"
"regsvr32.exe -u C:\RDEBUG\bordbk120n.dll"
- Delphi 2010の場合
"regsvr32.exe -u C:\RDEBUG\bordbk140.dll"
"regsvr32.exe -u C:\RDEBUG\bordbk140n.dll"
- "C:\RDEBUG" フォルダを削除します。
リモートデバッガのインストール/アンインストール(手動)が面倒
そう言われてしまうと話が先に進まないのですが(Linuxとか触ったら発狂しますよ)...無保証でよければ、"リモートデバッガ インストーラ" を用意してみましたので、使ってみるのもテだと思います。Win9xでもちゃんと動作します。
「手動と言いながらインストーラ?」と思われるかもしれませんが、これはこれで存在意義がありますので、早とちりされぬよう。
リモートデバッグを行う
そんなに難しいものではありません。Delphi のバージョンによりやるべき事が若干違いますが、共通で事前にやる事は、
- ターゲットPCでリモートデバッグサーバを起動
- プロジェクトオプションでデバッグモードを選択
この2点です。
~ Delphi 7 の場合
- [プロジェクト | オプション] を開く
- [リンカ]タブにある、"リモートデバッグ情報を含める" にチェックを入れる。

- [プロジェクト | 再構築] を行う
- プロジェクトフォルダに *.EXE と *.RSM が生成される。
- ターゲットPCにこの2つをコピーする(例: "C:\RD_TEST")。
- [実行 | 実行時引数] を開く
- [リモート]タブを開く
- "リモートパス" に、ターゲットPCにあるEXEをフルパスで指定する。
- "リモートホスト" に、ホスト名またはIPアドレス(\\は不要)を指定する。
- "読み込み"ボタン を押すか、[実行 | 実行] すれば、ターゲットPCで EXE が実行され、デバッグする事ができます。
デバッグの度に、*.EXE と *.RSM を配布するのが面倒な場合には、
- ターゲットPCのフォルダを共有にする(例: "C:\RD_TEST")。
- [プロジェクト | オプション] を開く

- [ディレクトリ/条件]タブにある、"出力ディレクトリ" にターゲットPCの共有フォルダを指定する。
こうしておくと便利でしょう。但し、これやってる間は 他のPCから共有フォルダアクセスし放題 なのでオススメはしません。
BDS 2006 / Turbo Delphi / Delphi 2007 の場合
- [プロジェクト | オプション] を開く
- [リンカ]にある、"リモートデバッグシンボルを含める" にチェックを入れる。

- [プロジェクト | 再構築] を行う
- プロジェクトフォルダに *.EXE と *.RSM が生成される。
- ターゲットPCにこの2つをコピーする(例: "C:\RD_TEST")。
- [実行 | プロセスのロード] を開く
- [リモート]を選択
- "リモートパス" に、ターゲットPCにあるEXEをフルパスで指定する。
- "リモートホスト" に、ホスト名またはIPアドレス(\\は不要)を指定する。
- 下にある "読み込み"ボタンを押す と、ターゲットPCで EXE が実行され、デバッグする事ができます。
デバッグの度に、*.EXE と *.RSM を配布するのが面倒な場合には、
- ターゲットPCのフォルダを共有にする(例: "C:\RD_TEST")。
- [プロジェクト | オプション] を開く

- [ディレクトリ/条件]にある、"出力ディレクトリ" にターゲットPCの共有フォルダを指定する。
こうしておくと便利でしょう(以下略)
Delphi 2009 / 2010 の場合
- [プロジェクト | オプション] を開く
- [リンク]にある、"リモートデバッグシンボルを含める" を True にする。

- [プロジェクト | 再構築] を行う
- プロジェクトフォルダに *.EXE と *.RSM が生成される。
- ターゲットPCにこの2つをコピーする(例: "C:\RD_TEST")。
- [実行 | プロセスのロード] を開く
- [リモート]を選択
- "リモートパス" に、ターゲットPCにあるEXEをフルパスで指定する。
- "リモートホスト" に、ホスト名またはIPアドレス(\\は不要)を指定する。
- 下にある "読み込み"ボタンを押す と、ターゲットPCで EXE が実行され、デバッグする事ができます。
デバッグの度に、*.EXE と *.RSM を配布するのが面倒な場合には、
- ターゲットPCのフォルダを共有にする(例: "C:\RD_TEST")。
- [プロジェクト | オプション] を開く

- [Delphi コンパイラ]にある、"出力ディレクトリ" にターゲットPCの共有フォルダを指定する。
こうしておくと便利でしょう(以下略)
FAQ
- リモートデバッグサービスに接続できない場合には、
- ファイルは揃っているか?
- ファイアーウォールでTCPポート8000をブロックしていないか?
を確認して下さい。
- アプリケーションの操作はターゲットPC上で行う訳ですから、開発環境のインストールされたPCはターゲットPCの傍になくてはなりません。本当に遠隔にある場合には VNC等 を併用する事になります。
- Delphi 5 の場合、アップデートを行ったら、リモートデバッガ用ファイルの borlndmm.dll も更新して下さい(リリースノート)。
- BDS 2006 / Turbo Delphi の場合、アップデート対応のリモートデバッガ が用意されています。
- Delphi 2007 の場合、アップデート対応のリモートデバッガ が用意されています。
まとめ
どこかで、
- Delphi 7 (Win9x用)
- Delphi 2007 (ANSI用)
- Delphi 2009 (Unicode用)
という具合に「使い分けろ。持っていなければ早めに買え(特にDelphi7)」と言っていた理由の一つがリモートデバッガ機能です。開発環境が2000以降にある場合で、"Win9x環境をリモートデバッグできるPro版" というのは "Delphi 7" しかないのです。
今更、Win9xアプリを作成する機会はそうそうないかもしれませんが、過去に作ったアプリケーションのメンテナンスはあるかもしれません。そういった可能性がないわけではない方は速やかに "Delphi 7" を確保すべきです(旧IDE製品は2008/12末ですべてサポートが切れています)。
リモートデバッグ機能をうまく使えば、客先の障害の出る実機に Delphi をインストールして "アクティベーション回数を減らす" なんて事も少なくなるでしょう...もっとも、経験上それが完全になくなるとは思えませんが。