OutputDebugStringはリリースビルド時に呼び出し削除されない

GUI環境のDebug時に便利なWindowsAPIであるOutputDebugString。
製品リリース時に「そのまま」にしてしまった経験はありませんか。

リリースビルドは、最適化する目的で行うものですが、これにOutputDebugStringの呼び出し削除は当然含まれていません。

デバッグメッセージを必要とする人がいるからです。



さて、完成された実行ファイルにデバッグメッセージはいらないと思う私は、
dumpbin "ファイル名" /IMPORTSで確認してます。

Dump of file FuncTest.exe

File Type: EXECUTABLE IMAGE

  Section contains the following imports:
    KERNEL32.dll
             140004000 Import Address Table
             1400050A8 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

                         1E7 GetLastError
                         33A OutputDebugStringW

—-

これは呼び出しが残っている例です。

実は、C実装では私のような人のために「_RPT系マクロ」が実装されています。

_RPTFW1(_CRT_ASSERT, L"Text : %s", lpszText);

とすれば良いだけ。でも関数名の覚えやすさから、OutputDebugStringを使ってしまう訳です。

ちなみに、実行ファイルで使う全ての関数がインポートヘッダに宣言されてい
るわけではありません、念の為。

P.S.

1人開発なら、この手が有効かも。

#ifndef _DEBUG
#define OutputDebugStringA(x) ((void)0)
#define OutputDebugStringW(x) ((void)0)
#endif

Leave a Reply

最初のコメントを頂けますか?

更新通知を受け取る »
avatar
wpDiscuz