掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
例外の発生したユニット名、行番号を取得するには? (ID:30157)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いつもお世話になっております。 早速ですが、客先で例外やアドレス違反が発生した場合に、メッセージやログにユニット名(ファイル名)、行番号を取得表示をさせたいと思っています。 調べたところ、AssertErrorProc変数とtry〜exceptを使って、以下のようにしようと思います。 しかし、ネストされた関数内でのアドレス違反など予期しないエラーを捉えることができない場合もあります。 皆さんは似たような事で良い方法をご存じでないでしょうか? それとも、このやり方自体誤ってますか? 別の方法や、つっこみをよろしくお願いします。 private bAssert: Boolean; end; procedure AssertErrorHandler(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer); var S: String; begin S := Format('%s (%s, line %d, address $%x)', [Message, Filename, LineNumber, Pred(Integer(ErrorAddr))]); showmessage(S); end; procedure TForm1.FormCreate(Sender: TObject); begin bAssert := True; end; procedure TForm1.Button1Click(Sender: TObject); begin // ボタン1クリックで、ユニット名、行番号表示モードに入る bAssert := True; AssertErrorProc := @AssertErrorHandler; end; procedure TForm1.Button2Click(Sender: TObject); var List : TStringList; begin try List.Add(''); // アドレス違反発生 except // エラーが発生したユニット名、行番号を表示 Assert(bAssert); if (bAssert = True) then // 通常は、そのまま例外発生 raise; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.