Releaseバージョンでcrashしたときの場所の特定方法です。minidumpファイルか、最悪落ちた場所のアドレス情報があることが条件です。画像はわざとcrashさせています。

  1. プロジェクトでマップファイルを作成する設定にしておく → プロジェクトのリンカ、デバッグ、マップファイルの作成ではいとする
  2. プロジェクトでcodファイルを作成する設定にしておく → プロジェクトのC/C++、出力ファイル、アセンブリの出力で、アセンブリ コード、コンピュータ語コード、ソース コード(/FAcs)を選択
  3. mapファイルから落ちた関数を特定
    画像だと0x004180ff が落ちた箇所で、mapファイルで、落ちた箇所の範囲の関数を調べる。下のmapファイルの内容では、MsgLoop関数内と分かる。
    0001:000170bd ?MsgLoop省略 004180bd f MainFrm.obj
    0001:000171dd ?省略 004181dd f i MainFrm.obj
  4. 落ちたオフセットを求める 〜 0x004180ffと0x004180bdからオフセットは0x42となる
  5. codファイルでMsgLoopのオフセット0x42を調べる
    下のcodファイルで0x42からソースコードの行が特定できる。
    ; 5971 : *(int*)(0) = 100;

    00042 c7 05 00 00 00
        00 64 00 00 00 mov DWORD PTR ds:0, 100 ; 00000064H

Anciaでは落ちたときのGetExceptionInformation()情報とモジュール一覧、minidumpファイルを出力する予定です。minidumpファイルがあれば、スタックトレースが出るので、かなり状況が分かるはずです。