kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

デバッグ版とリリース版

よくVSUGMSDN forumで「デバッグ版のdllを再配布したい」というQ&Aを見かけます。二か月に1,2度くらい?
しかしよーく聞いてみれば、質問の本質は「デバッグ版DLLを再配布したい」のではなくて、「リリース版だと動かないけど、デバッグ版だと動くからデバッグ版DLLを再配布したい」という話だったりします。少なくとも私が今まで見かけたものは全部そうでした。

そもそもデバッグ版って何?

Visual Studioをそのまま使っているとこういう違いです。

  • _DEBUGシンボルがコンパイラオプションで定義されている(リリース版はNDEBUG)
  • 最適化しないオプションが選択されている
  • デバッグシンボルがexeに含まれる(リリース版は別ファイルになる)
  • デバッグ版ランライムライブラリがリンクされる

リリース版ともっとも大きな違いはリンクされるランタイムライブラリの差です。なので、リリース版のコンパイラオプションでシンボルを生成させて、最適化を外してしまえば、まぁほぼ同じです。リリース版の最適化を外したっていいですし、逆にデバッグ版でリンクされているマルチスレッドデバッグDLLからマルチスレッドDLLにすれば、自分のコードはデバッグ版で、ランタイムはリリース版を遣うことになります。
自分が生成したコード部分はデバッグ版だろうと再配布の制限を受けることはありません。まずはこれで調べてみましょう。もちろんコード中にはASSERT入れるとか、OutputDebugString()使うとか、いろいろ工夫してください。Visual Studioのインストールができないという場合はWinDbgがインストールの敷居も低く、同等以上のデバッグ機能があるのでお勧めです。
参考:シンボルとソース コードの管理
Windows ハードウェア開発 – Windows デベロッパー センター
Windows ハードウェア開発 – Windows デベロッパー センター