• 締切済み

VC++.netでReleaceモードとDebugモードでアプリの動作が違う..

お世話になります。 現在、MS VC++.net Standerd でアプリケーションを構築していますが、 Debugモード で正常に動作している(ように見える)のに、 イザ Releaseモード でビルドを行うと、コンパイルは問題なく通るのですが、 Debugの時とアプリの動作が違うことに気が付きました。正常に動作しません。 コンパイルオプションでも間違ったのかと、いろいろ確認はしているのですが、 うまく見つけることができません。 なにか、考えられる原因とかありますでしょうか?

  • chaff
  • お礼率92% (78/84)

みんなの回答

  • TdnrSym
  • ベストアンサー率0% (0/0)
回答No.2

私も何度か同じような経験をしたことがありますが・・・ 私の場合、本来VERIFYマクロを使うべきところにASSERTマクロを 使ってしまったことがありました。 Releaseモードの設定でデバッグ情報を含めてみると 原因がつかめるのではないでしょうか?

chaff
質問者

お礼

え~...申し訳ありません。 解決しました。 以下のように計算式をはっきり明示させるようにしたら、うまくいったようです。 ありがとうございました。 while(jnllen > 0){ .........  (*(vparams->FldCnt))--;   if (*(vparams->FldCnt) <= 0) {   strcpy(errMsgStr,"");   error_output(errMsgStr);   return -1;   break;  } ......... }

  • shogenji
  • ベストアンサー率31% (31/98)
回答No.1

なぜだかよくわかりませんが,よくあります(^^; 最初から作り直したら問題なかったり, 変数の初期化とかを修正したら直ったり… で,補足要求ですが, どのように動作が違うのでしょうか? 正常に動作しないとは,どういう状態ですか?

chaff
質問者

お礼

え~...申し訳ありません。 解決しました。 以下のように計算式をはっきり明示させるようにしたら、うまくいったようです。 ありがとうございました。 while(jnllen > 0){ .........  (*(vparams->FldCnt))--;   if (*(vparams->FldCnt) <= 0) {   strcpy(errMsgStr,"");   error_output(errMsgStr);   return -1;   break;  } ......... }

chaff
質問者

補足

ありがとうございます お返事送れまして申し訳ありません どのように動作が違うか? 以下の部分で ループの度に"*(vparams->FldCnt)"の値を減算していくのですが、 同じデータに対して、同じソースからDebugとRelease で実行すると 同じタイミングであるにも関わらず Debugでは "*(vparams->FldCnt) <= 0" になる前にループを抜けます Releaseでは "*(vparams->FldCnt) = 0"となってしまいます。 設計上は、Debugでの動きをしてくれることが望ましいのですが... どうでしょうか? 以下、ソースです ----------------------------------------------------- while(jnllen > 0){ .........  *(vparams->FldCnt)--;   if (*(vparams->FldCnt) <= 0) {   strcpy(errMsgStr,"");   error_output(errMsgStr);   return -1;   break;  } ......... } -----------------------------------------------------

関連するQ&A

  • VC Debugモード

    Visual Stdio .NET 2003 環境のDebugモードについて質問があります。 開発言語は C++です。 今、コマンドライン引数を以下のように設定し、ファイルに保存された 情報を処理するプログラムを作成しています。 test1.exe 0 ./input.txt ↑ [実行ファイル名][検索したい文字][処理したいファイルへのパス] 上のように入力した場合、argcは[3]を返すと思うのですが、Debug モードでいざ実行してみると、値は「4」となっていました。 コマンドライン引数はVCの「プロジェクト」→「**のプロパティ」 →左ウィンドウの「デバッグ」→右ウィンドウの「コマンド引数」に 上のように設定しています。 また、Debugモードでargv[0]を調べたところ、実行ファイルまでのパス が保存されていました。 なぜ、このようになるのでしょうか? あと本題からそれるのですが、ソースの中でVCがDebugモードで動作していることを知る方法はないでしょうか? もし、Debugモードなのかどうかがわかるのであれば、ソースをDebug モード用とReleseモード用とに切り替えられるようにしたいのですが。。。 合わせてお教えください。

  • VC++2005で、リリースモードとデバッグモードの2通りをコマンドラインで行いたい。

    VC++2005で、リリースモードとデバッグモードの2通りでコンパイルしたいのですが、GUIでなく、コマンドラインでコンパイルしたいです。 オプションで、リリースモードの時のオプションとデバッグモードの時のオプションが知りたいです。 あと作成した、DLLやEXEからこれはデバックモード、リリースモードとわかる方法が知りたいです。 32/64bitの判定は、 dumpbinコマンドで分かりました。

  • VC++6.0からVC++2010への移行

    マシンAの VC++6.0 から マシンBの VC++2010 へ移行し、Releaseモード でビルドした結果、正常動作しませんでした。 Releaseモード、Debugモード ではエラー、警告ともにありません。 ■ 6.0 と 2010 パラメータ ■ ・共有 DLL で MFC を使う ・マルチスレッド DLL ・警告レベル 3 ■マシンA環境■ ・Windows XP Professional 2002 Service Pack 2 ・.NET Framework 1.1 ・Visual Studio 6.0 Enterprise Edition ■マシンB環境■ ・Windows XP Professional 2002 Service Pack 3 ・.NET Framework 1.1 、2.0 、3.0 、3.5 、4.0 ・Visual Studio 2005 Professional Edition ・Visual Studio 2010 Professional Edition ・Visual C++ 2008 Redistributable 作業の経緯と致しましては、6.0 のプロジェクトを VS2008 でビルドし、 sln ファイルを生成しました。 その後、生成された sln ファイルをもとにVS2010でエラーと警告の解除作業をしました。 Debugモード で エラー、警告 がないことを確認し、Releaseモード でビルドした結果、現状に至っております。 マシンB環境で問題なく 6.0 プログラムが動作している(Debug、Releaseともに)ことから環境面に原因があると考えております。 どのような問題が考えられるのか、また、どのような調査を行うべきか、ご教示頂きたいです。 よろしくお願い致します。

  • 実行ファイル(.exe)が別のPCで実行できない

    お世話になります。 VC++で、MFCアプリケーションプロジェクトより ダイアログベースでアプリを作成したのですが、 その実行ファイル.exeを別のWindowsPCで 実行すると、 ”「MFC71.DLL」が見つからなかったため、このアプリケーションは開始できませんでした。アプリケーションをインストールしなおすことの問題は解決される場合があります。” というエラーメッセージが出て実行できません。 どのようにすれば、実行できるのでしょうか? また、Releaseモードでビルドした場合、 Debugモードでビルドしたときには、出なかった 「error LINK2019:未解決の外部シンボル・・・。」という エラーがでます。 どうぞよろしくお願い致します。

  • VC++6.0へバージョンアップしたら5.0で作ったアプリがエラーになる

    VC++を5.0から6.0にバージョンアップしたのですが。 これで5.0で作ったプロジェクトをビルドしなおしたら、 実行時にアプリケーションエラーになってしまいました。 不正な処理-->ページ違反ですというやつです。 コンパイル時はエラーは何も出ないし、さらにデバックビルド だとちゃんと動き、リリースの時だけこの現象が起きてしまうので、 解析が困難で困っています。 こういった現象に何か心当たりがある方アドバイスをお願いいたします。

  • Debugモードが選択できません

    VS2005(VB)、OSはXPでWindowsサービスで動かすアプリを開発中ですが、 デバッグで開始されているサービスにアタッチするため デバッグモードで一旦exeをコンパイルしなくてはいけません。 ところが、なぜか『標準』ツールバーにDebugモードとReleseモードを 選択するコンボが表示されません。 1ヶ月ほど前にハードをかえたのでその際にOSからいれなおした 影響だとは思うのですが・・・ デバッグモードが選択できるようにするにはどこの設定を行えばよいのでしょうか? ご存知のかたよろしくお願いします。

  • リリースビルドの作成

    VisualC++ 2005 Express Editionを使って、C言語の簡単なプログラムを作りました。コンパイルの際に出てくるエラーや警告は一切ない(デバッグモード、リリースモード両方)のですが、このリリースビルドをVC++をインストールしていないPCで実行しようとすると、「指定されたプログラムは実行できません。」と出て実行できません。コンパイルに使ったPCでは実行できます。 リリースビルドを作成の際、ツールバーにある"Debug"を"Release"に切り替えて、ソリューションをビルドしました。プロジェクトはWin32コンソールにして、空のプロジェクトから始めました。 なぜ、バイナリが実行できないのでしょうか? そもそも、リリースビルドの作成法はこれでいいのでしょうか?

  • VC++ の設定

    VC++ 6.0 を使っています。 ボーランドのコンパイラを長く使っていて VC++のコンパイル時の 設定がよく分からなくて、 URelease のなかで、MBCS , DEBUG などの 設定をしてしまいました。  とりあえず、 Debug 版の設定を MBCS , DEBUG などとして コンパイルできました。予定通り動いています。 Release 版では MBCS , NDEBUG の設定で コンパイルとリンクはできました。 しかし、ハングアップします。  リストコントロールの画面で 項目をクリックするとハングアップします。 デバッグ版ではハングアップしません。  設定、およびソースコードの書き方で ハングアップの原因となりやすい物は何でしょうか? アドバイスをお願いいたします。

  • Release用にもDebug用にも使えるライブラリの作り方

    皆さんこんにちは。 MFCでスタティックライブラリをつくっています。 ライブラリのコンパイルの際に、ReleaseかDebugの いずれかを指定しますが、それぞれのモードで つくったライブラリは、それぞれのモードの実行 ファイルにしかリンクできないのでしょうか? どちらのモードの実行ファイルにもリンク可能な ライブラリをつくることは可能でしょうか? もし可能な場合、どのような手順でつくれば よいのでしょうか? どうぞよろしくお願いいたします。

  • VC++の最適化

    VC++で、最適化のオプションをつけずに、 デフォルトでコンパイルすると動作するのですが、 実行速度の最適化オプション /O2 をつけると、 特定の動作をさせるときにフリーズしてしまいます。 これを回避させるために、問題の発生する動作にかかわる ソースコード部分にだけ、最適化を行わないようにしたいのですが、どのようにすればよいでしょうか? アドバイスいただけますでしょうか? 環境は Win2000 で VC++6.0 SP3 を使用しています。

専門家に質問してみよう