例外が発生した関数名を取得するには?

解決


pont  2003-06-30 14:59:31  No: 3975  IP: 192.*.*.*

はじめまして。投稿します。

例外が発生した関数名をエラーメッセージとして表示したいのですが、
どうすれば良いでしょうか?
具体的にはtry..except間でコールした関数のネストした先の方でエラーが発生しその発生場所を情報として出力したい場合です。

編集 削除
にしの  2003-07-01 11:41:11  No: 3976  IP: 192.*.*.*

MemCheckで実現しています。
http://www.yks.ne.jp/~hori/MemCheck.html
こちらを参照してください。
なお、Delphi7(おそらくDelphi6も)だと、MemCheckのサンプルが動きません。

MemCheck.pasの、最初のusesを、
uses Windows,SysUtils;
とし、
MemCheck.pasのPExceptionRecordを、SysUtils.PExceptionRecordとすれば動くと思います。
# PExceptionRecordがWindowsにも含まれるため

編集 削除
pont  2003-07-02 15:55:04  No: 3977  IP: 192.*.*.*

どうもご返事ありがとうございます。
早速ためして見たいとところですが、どうもサンプルソースを理解するのに
時間がかかりそうなので、結果は後ほど報告します。

(実はdelphiは1週間前から導入検証を行っていて全くの素人なので、javaのExceptionのような感じとで取得できるだろうと思い込んでましたが
結構難しいですね ちなみにdelphi7を使用しています)

編集 削除
pont  2003-07-02 17:59:34  No: 3978  IP: 192.*.*.*

さっそくMemCheck.pas::MyGetExceptionObject関数をトレースしてみました。
一応例外オブジェクトからPExceptionRecordを取得し、そこから
スタック情報のアドレスを進めて取得し...とやればなんとかtry..exceptで
キャッチした例外からほぼ期待した情報が取得出来そうです。(ほんとに?)
大変参考になりました。

編集 削除