「アドレス????????でエラーが発生」からエラー位置を知る
|
「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] |
|