• 締切済み

VS2008 C++ リリースモードでエラー

表題の環境でMFCベースのプログラムを開発しています。 リリースモードで実行を試したところ、同じようなタイミングで強制終了が発生します。 (おそらく、自前のDLL内で落ちている?) デバッグモードのEXEを直接起動しても、強制終了が発生します。 りかし、VSからリリースモード(当然、デバッグモードも)の実行を行うと、エラーが発生しません。 VSから実行する場合、参照するDLLはVSを使用しない場合とは違うDLLを参照するのでしょうか。 その他、このような状況での対処方法について、アドバイスをいただけませんでしょうか。

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

デバッグ情報を付与したら落ちる場所が変わった…なんてこともあるかも知れませんが……。 とりあえず、私ならmapファイルを出力してドコの関数で落ちているのか特定しようとします…かね。 「mapファイル デバッグ」辺りで検索すると情報は見つかるでしょう。 DLLの場合、ベースアドレス(ロードされるアドレス)が変動する場合もありますので、その辺りは注意が必要かも知れません。 # DLL内の関数のエクスポートにDEFファイルを使用しているのであれば、ロードされるデフォルトのベースアドレスは指定できますが…。 # ただし、そのアドレスにロードされるという保証は無い。他のDLLなどがそのアドレスを使用している場合は他の場所にロードされますし。 # DEFファイルでなくても、リンカの/BASEオプションで指定できますけどね。 # http://msdn.microsoft.com/ja-jp/library/f7f5138s%28v=vs.90%29.aspx デバッグ情報付きなら…落ちた時にJust-In-Time デバッグでアタッチできませんかね? http://msdn.microsoft.com/ja-jp/library/5hs4b7a6%28v=vs.90%29.aspx

mtsm
質問者

お礼

mapファイルを利用してデバッグしてみたいと思います。 アドバイスありがとうございます。

noname#214300
noname#214300
回答No.2

どっかでメモリリークでも起こしてるんじゃ無いでしょうか。 ステップ実行で全ての変数やらをひたすら見ていれば、どこかでメモリの中身が腐っていくのがよく分かると思います。 IDEから上げたのと、直接EXEを起動したのでは、VSが居る分若干メモリの使い方(要はEXEやDLLなりが使うメモリのアドレス)が違いますから、そこで落ちたり奇跡的に動いたり……という分岐点があるのでしょう。 昔良くそれで苦労しました。

mtsm
質問者

お礼

ステップ実行で全ての変数やらをひたすら見てみようと思います。 アドバイスありがとうございました。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

まずはどこで強制終了するのか調べるところから。 漠然と「強制終了への対処」とか考えても対処はできないです。

mtsm
質問者

補足

デバッグ上では強制終了しないので。。。 lbn0915さんのいうように、ステップ実行で変数などが腐って行くのを見つけるのが早道なのでしょうか。

関連するQ&A