2007年4月11日水曜日

DEBUGで動いてRELEASEで動かない

くだらないプログラムを作っていて大体動いてきたのでDEBUG版をRELEASE版にしたら動かない。昔もそんなことがあってそのときは
・Message MAPの定義が狂っていた

が原因だった。今回もそれが原因か?と思って見直してみたのだがどうも一応あっている。それでAfxMessageBox()をそこここに入れてどこで落ちているかを調べた。なんとm_wndXX.SetWindowText("*")で落ちてる。なぜに?しばらくしてOnChangeEditXX()が動いていることが分かったのだがなんとreturn後に落ちている。訳わからん。でも関数の定義を見直していて分かった、なんかオリジナル定義と違って引数が多い!!真の原因はこれだ
・オリジナルは.hでafx_msg void OnChangeEditXX();となっていたのを他の処理と共用するために
afx_msg void OnChangeEditXX(BOOL bCompati=FALSE);
と定義し直してあった。そう言えばそんなことしてたっけ。随分ほったらかしにしていて忘れてたよ。素直に
.h
afx_msg void OnChangeEditXX();
void OnChangeEditXX(BOOL bCompati);
.cpp
void Cxx::OnChangeEditXX()
{
  OnChangeEditDigits(FALSE);
}
void Cxx::OnChangeEditXX(BOOL bCompati)
{
 …
}
のようにしたら動いた

が、これで終わりではなかった。このあと次々に
・なぜかRelease版だけ/0で落ちる→除数にコンストラクタで1を入れておいた(どうせ一時的だし)
・なぜかRelease版でAfxGetMainWnd()がCMainFrameではなくて途中でnewしたダイアログを示す→ダイアログをnewする場所を移動させた

ここまでやるとさすがに動いたw

0 件のコメント: