x64 デバッガ (Delphi XE2 以降)
XE2 以降の x64 ローカルデバッガは実質リモートデバッガです。
- x64 ローカルデバッグ
"IDE (32bit アプリケーション) <- [ローカル通信] -> 64bit デバッガ <- [64bit デバッグプロセス] -> 64bit アプリケーション"
- x64 リモートデバッグ
"IDE (32bit アプリケーション) <- [リモート通信 (PAServer)] -> 64bit デバッガ <- [64bit デバッグプロセス] -> 64bit アプリケーション"
IDE が 32bit である以上、64bit アプリに対してデバッグプロセスを開始する事はできないので、このような仕組みになっているようです。
- IDE は 32bit アプリケーション。
- 64bit アプリケーションのデバッグにはリモートデバッガの仕組みを使っている。
- よって、[プロジェクトオプション | Debug 構成] の "リモートデバッグシンボルを含める" にチェックが入っていないとブレークポイントで止まらない。
- "リモートデバッグシンボルを含める" にチェックが入っていなくとも、以前に出力された *.rsm が残っていればブレークポイントで止まる。
但し、デバッグ情報が古いので変なトコロで止まったり、特定の部分だけブレークポイントが効かなかったりする。
- IDE がクラッシュすると dbkw64_16_0.exe がタスクに複数存在する事がある。
この状態は好ましくない (デバッグ動作が不安定になる可能性アリ) ので、一旦 IDE を終了させた後ですべての dbkw64_16_0.exe をタスクマネージャで殺して IDE を起動する。
- IDE 起動中に dbkw64_16_0.exe を殺してはいけない。
- dbkw64_16_0.exe は IDE 起動と同時に常駐する。
- リモートデバッガは標準でポート 64211 を利用している。
上記の事から、x64 デバッグ時のみ挙動がおかしいのであれば、下記項目をチェックしてみて下さい。
- [プロジェクトオプション | Debug 構成] の "リモートデバッグシンボルを含める" にチェックが入っているか?
- dbkw64_16_0.exe が複数起動していないか?
- Firewall 等でポート 64211 がブロックされていないか?
- ウィルス対策ソフト等で dbkw64_16_0.exe の動作が阻害されていないか?
- プロジェクトフォルダのパス名に日本語が含まれていないか?
- ユニットのエイリアスを使用していないか?具体的にはユニットの uses に WinTypes, WinProcs, DbiTypes, DbiProcs, DbiErrs のいずれかが含まれていないか?
See Also: