Delphi Tips 
-----------------------------

0184  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/05/11 花井@自宅 rev 1.3
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2003/06/25 osamu 編集
「アドレス????????でエラーが発生」からエラー位置を知る

「EAccessViolationがモジュールHOGEHOGE.EXEの0005E1D9で発生しました。モジュール'HOGEHOGE.EXE'のアドレス0045E1D9でアドレスFFFFFFFFに対する読み込み違反がおきました。」
などというメッセージから、エラー発生のソース中での位置を調べることができます。

(IDE 上から)
 Delphi の統合環境上のメニュー [検索][エラーの検索] でアドレスを指定します。エラーの起きた場所が見つけられると、その位置にカーソルが移動します。

(コマンドラインから)
コマンドラインコンパイラ(dcc32.exe)が使えます。

(delphi 3の場所)\bin\dcc32 -f5E1D9 hogehoge.dpr

とかすると

Delphi for Win32  Version 10.0  Copyright (c) 1983,97 Borland International
hogehoge.dpr(20)
UNIT1.PAS(775) Target address found.
    strcopy(p, title);
    ^

のように表示されます。ソースのない部分とかWindowsの中で起きている場合は 'target address not found' になります。
ただし、これを使うには、ライブラリパスを指定しておく必要があります。
コマンドラインコンパイラの場合、ライブラリパスは -u オプションで指定します。引数なしで dcc32 を起動すると、オプションの種類が分かります。
常時指定するオプションは dcc32.exe と同じディレクトリにある dcc32.cfg に書き込んでしまっても OK です。こんな感じです。

----------^ dcc32.cfg
-aWinTypes=Windows;WinProcs=Windows;DbiProcs=BDE;DbiTypes=BDE;DbiErrs=BDE
-uE:\DELPHI3\Lib\User;E:\DELPHI3\Lib;E:\DELPHI3\Lib\Delphi2
----------$


追記:コンパイル時に map ファイルを作成しておけば IDE が無くても対応行が分かるそうです。
[Delphi-ML:68565][Delphi-ML:68566][Delphi-ML:68574][Delphi-ML:68592]
参照: [Delphi-ML:19322] [Delphi-ML:4975] [Delphi-ML:68565] [Delphi-ML:68566] [Delphi-ML:68574] [Delphi-ML:68592] <開発環境>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp