[delphi-users:2266] アドレス違反でエラーのソース位置を知る方法

3,110 views
Skip to first unread message

nori

unread,
Oct 14, 2011, 3:37:51 AM10/14/11
to delphi...@freeml.com
nori と申します。

「モジュール 'XXXXX.exe' のアドレス 0052257B でアドレス 00000010 に対する読み取り違反がおきました。」などというメッセージから、エラー発生のソース中での位置を調べたいのですが、DelphiXEでその方法がよく分かりません。ご教授お願いいたします。
Delphi7ぐらいだと下記サイトに書かれているのを見つけましたが、
XEだと該当メニューがなくどうもよくわかりません。
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=36#0184.txt

上記サイトを参考にコマンドラインからは結果が出たのですが、
IDE上からでも試したく、XEの検索やデバッグあたりの動作確認やヘルプを読んでみたりはしたのですがよく分かりませんでした。

MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
使い方はいろいろ♪一部のメンバーだけにMLメールを送ろう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hxKVl
-----------------------------------------------------[freeml by GMO]--

snail3

unread,
Oct 16, 2011, 4:42:32 AM10/16/11
to delphi...@freeml.com
> 「モジュール 'XXXXX.exe' のアドレス 0052257B でアドレス 00000010 に対する読み取り違反がおきました。」などというメッセージから、エラー発生のソース中での位置を調べたいのですが、DelphiXEでその方法がよく分かりません。ご教授お願いいたします。

基本的には XE でも以前のものでもIDEでエラーが発生すれば、発生した行が表
示されます。もし全然関係ない場所が表示されるようなら一度プロジェクトの再
構築をされてはいかがでしょうか。古いバージョンのオブジェクトが混在してい
るかもしれません。

--
takashi <taka...@csjpn.com>


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
使い方はいろいろ♪一部のメンバーだけにMLメールを送ろう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hyrAb

nori

unread,
Oct 16, 2011, 8:51:44 PM10/16/11
to delphi...@freeml.com
ありがとうございます。

ただ、IDE上でエラーをさせた時の話でなく、
運用環境で発生したエラーメッセージに表示されるアドレスからソースの位置を特定したいのです。

MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
メールだけでみんなを招待できる便利機能♪
http://ad.freeml.com/cgi-bin/sa.cgi?id=hyzLL

auemura

unread,
Oct 16, 2011, 9:57:24 PM10/16/11
to delphi...@freeml.com
> ありがとうございます。
>
> ただ、IDE上でエラーをさせた時の話でなく、
> 運用環境で発生したエラーメッセージに表示されるアドレスからソースの位置を特定したいのです。
>

D7で言うところの「エラーの検索」は、最近のDelphi(2007で変わってるのは確認しました)では「指定アドレスに移動」という名前に変わっています。
デバッグ中のみ実行出来るメニューです。

MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
クーポンサイトを選んで検索♪一番おトクなクーポンをGET!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hy0LR

snail3

unread,
Oct 16, 2011, 9:59:27 PM10/16/11
to delphi...@freeml.com
> Delphi7ぐらいだと下記サイトに書かれているのを見つけましたが、
> XEだと該当メニューがなくどうもよくわかりません。
> http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=36#0184.txt

同じ方法で良いと思います。dcc32 のヘルプでも

-F<offset> = エラーの検索

と表示されています。試しに自分の環境で実行してみましたが、、、

>問題が発生したため、Delphi Pascal Compiler を終了します。、、、

が表示させてしまって特定できませんでしたが、方法としては正しいと思います。

> __________ ESET NOD32 Antivirus からの情報, ウイルス定義データベースのバージョン 6548 (20111016) __________
>
> このメッセージは ESET NOD32 Antivirus によって検査済みです。
>
> http://canon-its.jp
>
>

--
takashi <taka...@csjpn.com>


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
友達の服をこっそり借りちゃお!「おしゃれ泥棒」
http://ad.freeml.com/cgi-bin/sa.cgi?id=hy0NG

nori

unread,
Oct 17, 2011, 9:56:04 AM10/17/11
to delphi...@freeml.com
デバック中しかだめなんですね。
デバック中でなくても検索できるのかと思ったのですが。。
ありがとうございます。

MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
戦国時代の武将達とともに天下統一を目指そう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hyCQ2

nakafumi_ml

unread,
Oct 17, 2011, 8:54:14 PM10/17/11
to delphi...@freeml.com
仲村です。
おそらく勘違いなさってると思うので一応フォローしますと、
実行環境にデバッガが無いとダメと言っている訳ではありません。

ソースコードの位置を知りたいと仰っているので、ご自身のデバッグ環境は
あるかと思いますが、エラー表示されたアドレスを自分のデバッガで検索する
ということです。
ただ、そのエラーを出しているプログラムの元になっているソースコードと
同じものが無いと意味が無いわけで、日々更新するようなプログラムは、
そのエラーアドレスが必ずしもデバッグ環境のコード位置と一致するとは
限らないので、目安にしかならないかも知れませんが。


nori <delphi...@freeml.com> 2011/10/17 22:56:04


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
「アルテイル」オンラインカードゲームで暇つぶし!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hyHh1

nori

unread,
Oct 18, 2011, 9:34:29 AM10/18/11
to delphi...@freeml.com
ご連絡ありがとうございます。

はっきりしないので、Delphi6とDelphiXEで動作を比較してみました。
DelphiXEでは下記?の方法だと、動作がDelphi6と違い、
正しく機能しそうにありません。
ただ、代替的に下記?の方法でいけそうです。

?Delphi6だと、
1) Delphi上でアプリケーションを実行して
2) 検索 -> エラーの検索 のメニュー選択
3) エラーの検索画面が開く
4) 例えば事前にエラー出して確認したアドレス「00D985AB」を
  入力して[OK]ボタンをクリック
5) エラー発生させたソースの該当行がちゃんと選択された

?DelphiXEだと、
1) アプリケーションを実行(F9)して
2) 検索 -> 指定アドレスに移動 のメニューは無効状態で選択できない
3) やむを得ず、わざと検索したいエラーを発生させる
4) 「デバッガ例外通知」ダイアログが表示され[ブレーク]または[継続]ボタン
を押せる
5-1) [ブレーク]を押すと検索したかったソース行が選択される
6-1) ここでようやく検索 -> 指定アドレスに移動 のメニューは選択できるが
  このタイミングでは意味なし
5-2) [継続]を押すと実行時に表示されるエラーダイアログが出る
  検索 -> 指定アドレスに移動 のメニューは選択できない

?ついでにDelphiXEで、
1) アプリケーションを実行(F9)すると
2) 実行 -> ブレークポイントの追加 -> アドレスで設定 というメニューが
 あったのでアドレスを入力
3) すると、Delphiの下の方に該当するソースファイル名と行数が表示される
4) ダブルクリックまたは右クリックのメニューからソースを開こうとすると
「プロセスの実行中はCPUビューを表示できません。プログラムを停止させて
から試してください。」というエラーが出ます。
5) プログラムを停止すると、今度はプレークポイントからソースを開く機能、
メニューが消えてしまいます。(?)
6) 一応、手作業で該当ソースファイルを開いて、エラーの該当行を
 確認すると正しい行でした。
(今回探したかったアドレスではソースをその後、
 変更しているためか、何もヒットしませんでした。
 客先で再現するので、再度最新の状態で調べようと思います)

MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
使い方はいろいろ♪一部のメンバーだけにMLメールを送ろう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hyUhs

auemura

unread,
Oct 18, 2011, 7:57:09 PM10/18/11
to delphi...@freeml.com
上村です。

> ?DelphiXEだと、
> 1) アプリケーションを実行(F9)して
ここで、「実行」-「プログラムの停止」(ツールバーだと一時停止っぽいボタン)を実行したらメニューが実行可能になります。

MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
メンバーで使える掲示板を活用しよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=hyXXV

nori

unread,
Oct 19, 2011, 7:49:04 AM10/19/11
to delphi...@freeml.com
> 上村です。
> > ?DelphiXEだと、
> > 1) アプリケーションを実行(F9)して
> ここで、「実行」-「プログラムの停止」(ツールバーだと一時停止っぽいボタン)を実行したらメニューが実行可能になります。

確認してみて、うまくいきました。
ようやく方法が理解できました、これで解決できそうです。
ありがとうございます。

皆さま、色々とありがとうございました。

MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
メールだけでみんなを招待できる便利機能♪
http://ad.freeml.com/cgi-bin/sa.cgi?id=hziM9

Reply all
Reply to author
Forward
0 new messages