アプリ版:「スタンプのみでお礼する」機能のリリースについて

たとえば、Metasequoiaさんのページにありますように、読み込み違反が発生しプログラムが停止したとき「”main.exe”のアドレスXXXXXXでYYYYYYに対する読み込み違反が発生しました。」などどいうメッセージが出ることがあります。

http://www.metaseq.net/metaseq/bbs.html

まれに、このアドレスをメモしておいて、報告してほしいという開発者さんを見かけます。例えば、上記Metasequoiaさんの場合もそうです。

例えば、VC++やBorland、GCCなどで開発している場合、このアドレスからいかにしてデバッグするのでしょうか?「私はこうしてる」などと言ったお話が聞ければと思い質問させていただきました。

よろしくお願いします。

A 回答 (2件)

そういう情報を元にしたデバッグにはデバッガを使います。


VC++とかの統合環境ならデバッガを内蔵してるし、gccを使ってるならgdbで。

「アドレスXXXXXXで」の方の値は、実行している命令のアドレスを示しています。これは、同じプログラムであれば、ユーザー環境でも開発環境でもどこで実行しても同じになります。
ですから、開発側でデバッガを使うことで「どの関数のどの文を実行している時にエラーが発生したのか」がわかります。

「YYYYYYに対する読み込み違反」の方の値はデータアドレスなのですが、こちらは実行条件によって値が変わってきます。そのため、ユーザーの環境をそのまま開発環境に再現することはできません。
ですが、「00000000」とか「FFFFFFFF」とかの特徴的な値が出てきたとしたら、そこからコード上の問題を追及できる可能性はあります。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

>「アドレスXXXXXXで」の方の値は、実行している命令のアドレスを示しています。これは、同じプログラムであれば、ユーザー環境でも開発環境でもどこで実行しても同じになります。
>ですから、開発側でデバッガを使うことで「どの関数のどの文を実行している時にエラーが発生したのか」がわかります。

なるほど。アドレスは必ず一緒になるので、そこから絞り込むということですか。一点きになるのは、読み込み違反などの場合「エラー発生箇所とは別の箇所で変なことをしてしまって落ちる」ことが多いように思うのですが、このアドレス情報からだとピンポイントで絞れたりするものなのでしょうか?無いよりはまし、もしくは、エラー再現のために役立てるのでしょうか?

>「00000000」とか「FFFFFFFF」とかの特徴的な値が出てき

もし、何か例をご存知でしたら、教えていただけないでしょうか?

お礼日時:2008/06/06 07:37

mapファイルなどを作成していると、どの辺りでエラーになったのか等の追跡が可能です。



MSのサイト。
http://support.microsoft.com/kb/196755/ja

「mapファイル デバッグ」での検索結果。
http://www.google.co.jp/search?hl=ja&q=map%E3%83 …

他に各DLL等がどこにロードされたか…という情報もあるといい感じです。
# VCで標準のままだとDLLファイル内に書かれるロードアドレスは同一になってしまいます。
# そのようなDLLを複数読み込んだ場合、アドレスがかぶってしまうのでOSが適切なアドレスに再配置してくれます。
# ということで、どこにロードされたのか…という情報もあるとよい…ということに。
    • good
    • 0
この回答へのお礼

一度お礼を投稿したと思ったのですが、今見たら投稿されていなかったようで申し訳ありません。

URL先を見ますと、まさに私が知りたかった内容そのままの様ですね。非常に参考になりました。以外に複雑なというか、煩雑なことをしているのだなぁという印象です。統合開発環境ではこのあたりをボタン一つで調べられたりするものなのでしょうか。

何はともあれ、出発点には立てたように思います。どうもありがとうございました。

お礼日時:2008/06/20 14:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています