2016年10月07日

[.net]デバッグビルドでは問題が出ないのにリリースビルドだと不具合。しかも Framework2.0 をターゲットにした場合だけ

。。。という件で、ターゲットフレームワーク2.0という環境での動作も切り捨てられず、一日中 デバッグしました。 リリースビルドに OutputDebugString を突っ込んでモニターしながら。

以下のようなところで不具合が出ていました。この場合、classBのオブジェクトを取得します。
Dim o as object
IF false Then
o = classA.getObject()
Else
o = classB.getObject()
Endif

classA,classBはともに static な function です。
このようなロジックの部分で、classA で参照している 外部ライブラリーの参照ができずにエラーとなっていました。
結局いろいろ試した結果、テスト的に以下のように書き換えるとエラーはなくなりました。
Dim o as object
IF false Then
o = Nothing
Else
o = classB.getObject()
Endif

そこで試しに、と classA.getObject()の代わりに
Private function getAObject() as Object
   return classA.getObject()
End Function
とした関数を定義し、

Dim o as object
IF false Then
o = getAObject()
Else
o = classB.getObject()
Endif
上記のようにしたところ、classA にかかわる参照エラーがなくなりました。
ちなみにこれが発生したのは ターゲットフレームワークが 2.0 のリリースビルドだけで
デバッグビルドの場合、もしくは フレームワークが4.0 の場合には リリース・デバッグどちらも問題なしでした。

debugではバッチリ。releaseしたら不具合が発覚。 • C言語交流フォーラム 〜 mixC++ 〜

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/177172584
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

・おすすめ楽天ショップ1:trendyimpact楽天市場店
・おすすめサプリショップ:iHerb.com
・おすすめ楽天ショップ2:上海問屋
Powered by さくらのブログ