Debug実行とRelease実行 – プログラミング – Home

通知
すべてクリア

[解決済] Debug実行とRelease実行


ねこ
 ねこ
(@ねこ)
ゲスト
結合: 22年前
投稿: 94
Topic starter  

VCでの動作確認には

①DebugビルドでVC実行ボタンで実行
②Debugビルドでexeファイルで実行
③ReleaseビルドでVC実行ボタンで実行
④Releaseビルドでexeファイルで実行

の4種類があると思うのですが、この中で④の場合だけ出る不具合があります。

具体的にはダイアログ上のActiveXコントロールの表示がおかしくなります。
(縦横サイズが0になる)

このような場合、どういう原因を考えればいいのでしょうか?
デバッグ方法、注意すべきポイントなど何でもいいので
アドバイスお願いします。

環境は Win2000/VC.NET/MFC です。


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

exeファイルで実行と言うのがよくわからないのですけれど、
エクスプローラーでダブルクリックでもするって事でしょうか?
1、3と2、4は実行時のカレントディレクトリが違うのですが、
これは認識されているでしょうか?
何か必要なファイルが、DebugフォルダにはあってReleaseフォルダにはないとか
ないでしょうか。
書き込まれている内容からはこれくらいしか想像できないです。

あと、丸付き数字は機種依存文字なのでネットワークでは使わないほうがいいです。
Macの人とかは読めませんので。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

> 1、3と2、4は実行時のカレントディレクトリが違う

これはエクスプローラーでダブルクリックで起動した時を想定しています。


返信引用
MASATO
 MASATO
(@MASATO)
ゲスト
結合: 22年前
投稿: 53
 

初期化するべき変数を初期化していない可能性があります。
初期化していない変数を使っていないかチェックしてみて下さい。

例えばこんな感じのコードはないでしょうか。
int x;
if (x < 0) {
// 色々処理
}else {
// 色々処理
};

初期化されていない変数の値は未定義です。
①②③④でそれぞれ異なる値が設定される可能性があります。
(①②ではデバッグ用の値(0xcdcdcdcd...)になる場合が多いようです。)

初期化されてない変数が負の場合は正しく動作し、正の場合はうまく動作しないようなプ
ログラムになっていたりすると、④だけうまく動作しないということがありえます。


返信引用
ねこ
 ねこ
(@ねこ)
ゲスト
結合: 22年前
投稿: 94
Topic starter  

PATIOさんMASATOさん レスありがとうございます。

>>あと、丸付き数字は機種依存文字なのでネットワークでは使わないほうがいいです。
>>Macの人とかは読めませんので。

>①DebugビルドでVC実行ボタンで実行
>②Debugビルドでexeファイルで実行
>③ReleaseビルドでVC実行ボタンで実行
>④Releaseビルドでexeファイルで実行

すいません。以下に修正します。

1.DebugビルドでVC実行ボタンで実行
2.Debugビルドでexeファイルで実行
3.ReleaseビルドでVC実行ボタンで実行
4.Releaseビルドでexeファイルで実行

>exeファイルで実行と言うのがよくわからないのですけれど、
>エクスプローラーでダブルクリックでもするって事でしょうか?

はい。そのとおりです。

>初期化するべき変数を初期化していない可能性があります。
>初期化していない変数を使っていないかチェックしてみて下さい。

1,2と3,4で動作が違うなら初期化を疑うのですが、1,2,3と4で動作が
違うので困っています。
けれど初期化ももう一度チェックしてみます。

>1、3と2、4は実行時のカレントディレクトリが違うのですが、
>これは認識されているでしょうか?
>何か必要なファイルが、DebugフォルダにはあってReleaseフォルダにはないとか
>ないでしょうか。

カレントディレクトリの違いは認識しています。
試しに4.のexeファイルをVCプロジェクトファイルと同じDirに置いて
実行してみたのですが、やはり表示がおかしくなりました。

>書き込まれている内容からはこれくらいしか想像できないです。

あと、メイン画面から二枚ダイアログを表示させているのですが(モーダレス)
一枚目の表示がおかしくなり、二枚目は正常な表示になります。
さらに再表示させると二枚とも正常な表示になります。

このあたりが何かポイントになるのでしょうか?


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

>あと、メイン画面から二枚ダイアログを表示させているのですが(モーダレス)
>一枚目の表示がおかしくなり、二枚目は正常な表示になります。
>さらに再表示させると二枚とも正常な表示になります。
>
>このあたりが何かポイントになるのでしょうか?

であるならば、MASATOさんご指摘の内容が有力です。


返信引用
J
 J
(@J)
ゲスト
結合: 21年前
投稿: 5
 

全体を覆っているようなタブコントロールの様なコントロールがある場合
そのコントロールの後ろに描画されるのが原因かもしれませんね。

描画順を確定させるために一番後ろに描画させたいコントロール(タブコントロールなど)
のZオーダーを変更してみてはどうでしょう。

OnPaint 内で
{
CTabCtrl* ptab = static_cast<CTabCtrl*>(GetDlgItem(IDC_HOGEHOGETAB));

ptab->SetWindowPos(&ChogehogeDlg::wndBottom, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
}


返信引用
ねこ
 ねこ
(@ねこ)
ゲスト
結合: 22年前
投稿: 94
Topic starter  

REE様、J様、レスありがとうございます。

>J様
タブコントロールは使っていません。
しかし(もし使用していたら)そのようなパターンは充分考えられますので
今後の参考にしたいと思います。ありがとうございました。

原因はMASATO様、REE様のご指摘通り、初期化でした。
ShowWindow時に各コントロールのサイズを調整しているのですが、その時に
使用している変数の値が不定だったため、コントロールサイズがマイナスに
なり上記の現象が起こっていたようです。

コンストラクタで変数の初期化を行うことで解決しました。

ただ少し気になるのが、上記の3.(実行ボタンで実行)と4.(exeファイルで実行)
で挙動が違う点です。
初期化を行わない場合、変数に入っている値が3.と4.で違ったのですが(正数と負数でした)
これは「不定」ということで何が入るかわからないからでしょうか?

それとも普通は初期化されない変数は3.と4.で同じ値が入るものなのでしょうか?

後学のためこのあたりをきちんと理解したいのですが、
どなたか解説をお願いできないでしょうか?
もしくはその事について説明しているサイトのURLなどを教えていただけると
幸いです。


返信引用
ねこ
 ねこ
(@ねこ)
ゲスト
結合: 22年前
投稿: 94
Topic starter  

申し訳ありません。
下記についてはMASATO様から既に説明いただいてました。

>初期化を行わない場合、変数に入っている値が3.と4.で違ったのですが(正数と負数でした)
>これは「不定」ということで何が入るかわからないからでしょうか?

>それとも普通は初期化されない変数は3.と4.で同じ値が入るものなのでしょうか?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました