Visual Studio User Group

   ホーム      
 | 
  
   イベント      
 | 
  
   フォーラム      
 | 
  
   VSUG キャスト      
 | 
  
   記事      
 | 
  
   About VSUG   
会員サービス
メンバー ログイン
新規会員登録はこちら
MENU
ホーム
イベント
VSUG アカデミー
VSUG Day
Bar VSUG
過去のイベント
フォーラム
初心者フォーラム
Visual Studio
.NET 開発
プラットフォーム運用
フリートーク・お知らせ
フォーラムの利用案内
VSUG キャスト
第 1 回 近藤 和彦 氏
第 2 回 長沢 智治 氏
記事
連載
コラム
About VSUG
VSUGとは
フォーラムリーダー紹介
ガジェット
スタッフ日記
フォーラムグループ
初心者フォーラム
初心者なんでも相談室
Visual Studio
Visual Studio 2005
Visual Studio 旧環境
.NET 開発
Visual Basic
Visual C#
Visual C++/CLI その他
Web アプリケーション
リッチクライアント・UI コントロール
データベース・データアクセス
モバイル・スマートクライアント
.NET Framework
開発プロセス
マイグレーション・COM 相互運用
Office 開発・VSTO
Web ホスティングアプリケーション
ライティング・セキュアコード
プラットフォーム運用
運用管理
フリートーク・お知らせ
談話室
VSUGからのお知らせ
フォーラムの利用案内
インフォメーション
会員規約
会員登録
プライバシーポリシー
リンクポリシー
著作権について
スポンサーについて
お問い合わせ
オンライン状態
オンライン状況 オンライン状態:
未登録ユーザー 未登録ユーザー: 222
登録ユーザー 登録ユーザー: 0
計 計: 222

オンライン中のユーザー オンライン中のユーザー:

 
  VSUG フォーラム  初心者フォーラム  初心者なんでも相談室  Relese/Debugの違い
前へ 前へ
 
次へ 次へ
新しい投稿 2009/10/29 16:05
ユーザーはオフラインです。 kuroneko
3件の投稿
ランキングデータがありません


Relese/Debugの違い 
言語:VC++ / Ver:2005 / プラットフォーム:Windows Server 2008

初心者です。

OS:windows server2008 x64、VisualStudio2005SP1の環境でVC6クラサバのサーバモジュールをVS2005 x64に移植中です。

あるサーバモジュール(コンソールタイプのEXE)で動的メモリの確保と開放を行っています。

この部分がDebug環境だと問題なく動作するのですがRelease環境だと例外が発生します。

変数の初期化などは行っています。原因が特定できなくて困っています。何かヒントをご教授いただけるとありがたいです。

 

 
新しい投稿 2009/10/29 18:57
ユーザーはオフラインです。 渋木宏明(ひどり)
10件の投稿
hidori.jp/
ランキングデータがありません


Re: Relese/Debugの違い 

よくある手は、段階的に Release ビルドにデバッグ情報することです。

開発環境で実行可能であるなら、Relase ビルドにデバッグ情報を付加した状態で Visual Studio からデバッグ実行してみてください。

その状態で問題個所の特定が困難な場合、段階的にコンパイラの最適化を弱めつつデバッグ実行していくとよいです。

 

 
新しい投稿 2009/10/30 11:43
ユーザーはオフラインです。 kuroneko
3件の投稿
ランキングデータがありません


Re: Relese/Debugの違い 

情報ありがとうございます。

mallocで確保したメモリをfreeで開放している箇所で問題が発生しています。Debugの場合は正しく動作しますが、Releaseの場合はここで例外がでます。メモリは正しく取得されていますのでなぜはじかれてしまうのかわかりません。

Releaseの構成で該当するモジュールのNDEBUGを_DEBUGにしたところ動作はします。MFC80D.DLLが呼ばれた場合はOK、MFC80.DLLが呼ばれた場合はNGとなります。PROJECTの設定はNDEBUGを_DEBUGにしたところ以外は同じにしてビルドしています。また他のDLLを使っている関係上MFCをスタテッィクライブラリにできません。

free関数でこのような現象は初めてでどう対応すべきでしょうか。ご教授をお願いいたします。

 

 
新しい投稿 2009/10/30 14:17
ユーザーはオフラインです。 とっちゃん
118件の投稿
blogs.wankuma.com/tocchann/
10位


Re: Relese/Debugの違い 

構造体の境界設定が異なっているということはないでしょうか?

Debug版では、4バイト(あるいは、2バイトや1バイト)だったものが、Release版では規定値であるとか。

アロケートしたサイズがいっけん同じでも、内部利用が異なっているとエラーになります。

以前、MFC拡張DLLでエクスポートされたクラスを利用していた個所、この設定の違いで不可解な不具合に見舞われたことがあります。

あと、Release版のNDEBGUG を _DEBUG にすると、動くということは、部分的にデバッグ版じゃないと参照できないものを見ているとかそういうバグである可能性が非常に高いと思います。

一度vcprojレベルでソースにコンパイルオプションが付いているところがないかを確認し、参照しているすべてのvcprojのビルドオプションをチェックしなおすこととお勧めします。

 


とっちゃん(高萩 俊行)@わんくま同盟
とっちゃん'Blog
Microsoft MVP for Development Tools - Visual C++(Oct 2005 -)
WindowsInstaller の話題は WindowsInstaller/WiX/InstallShield メーリングリスト まで
 
新しい投稿 2009/10/30 14:27
ユーザーはオフラインです。 渋木宏明(ひどり)
10件の投稿
hidori.jp/
ランキングデータがありません


Re: Relese/Debugの違い 

>mallocで確保したメモリをfreeで開放している箇所で問題が発生しています。
>Debugの場合は正しく動作しますが、Releaseの場合はここで例外がでます。

ヒープ破壊の可能性が高いように思います。
どこかに、取得したメモリ領域の範囲を超える書き込み操作があるんじゃないでしょうか。

>メモリは正しく取得されていますのでなぜはじかれてしまうのかわかりません。

ヒープの管理情報が部分的に破壊されても、すぐに破たんしたりはしません。
破壊された管理情報を参照して何らかの動作を行う時、はじめて影響が露呈します。

>free関数でこのような現象は初めてでどう対応すべきでしょうか。ご教授をお願いいたします。

free 呼び出し死そのものに問題があるのではなく、free 呼び出しよりも前の動作によってヒープ破壊が生じ、その結果 free 内部で例外が発生しているんでしょう。

 
 1/2ページ12次へ 
前へ 前へ
 
次へ 次へ
  VSUG フォーラム  初心者フォーラム  初心者なんでも相談室  Relese/Debugの違い
ログイン | © Visual Studio User Group. All rights reserved. 著作権について | プライバシーポリシー | リンクポリシー | お問合せ