実行可能ライブラリやダイナミックライブラリなどのバイナリを検査して、リリースバージョンかデバッグバージョンかを判断するための簡単なコマンドラインユーティリティはありますか? * nixやwindowsにそのようなものはありますか?
LinuxのC++の場合、次のことができます。
objdump --source yourbin |grep printf
Printfを、実行する関数呼び出しに置き換えます。デバッグの場合は、実際に行ったすべてのソースコード呼び出しが表示されます。リリースされている場合は、シンボルテーブルから設立されたシンボルが表示されます。
WindowsのC++の場合、depends.exeを使用して、MSVCRT(リリース)またはMSVCRTD(デバッグ)に依存しているかどうかを確認できます。
Linuxでは、ダイナミックライブラリに対しても「file」コマンドを使用できます。 「削除済み」と表示されている場合は、すべてのデバッグシンボルが削除されます。 「剥がされていない」と言っている場合は反対です
Windowsの場合、 Dependency Walker には、exeがロードするすべてのdll(およびそれらの依存関係)を一覧表示するオプションのコマンドライン出力があります。それをgrepで実行し、msvcrt-dllがdでポップアップするかどうかを確認します。
これは、動的にリンクされている場合にのみ機能します。そうでなければ、それはトリッキーかもしれません。
デバッグ/リリースが異なる特定の関数をgrepすることができますifこれらの文字列が実行可能ファイルに表示されます。
アプリがランタイムをまったく使用しない場合は、かなり注意が必要です。
unixの場合:ELF実行可能ファイルでは、objdumpまたはnmを使用して確認できる場合があります。実行可能ファイルのシンボルテーブル(削除しないと、これがはるかにうまく機能することに注意してください)。特定のシンボルの有無は、デバッグまたはリリースビルドを示す傾向があります。 (どちらについては、使用しているライブラリなどによって異なります。一般的なライブラリを見つけるには、少し掘り下げる必要があります。コメントで探すものを自由に提案してください。更新します。回答。)
Windowsの場合:dependencywalkerの提案は適切です。同等のコマンドラインについては、ほとんどのVisual Studioインストールでdumpbinを見つけることができ、* nixのobjdumpとやや同等です。また、たとえば、nmまたはobjdumpを見つけることができる場合があります。一部のWindowsexeファイルで動作するmsysまたはcygwin。
先に進むことはあまりありません。 Reflectorでアセンブリを開くと、アセンブリ属性を探すことができます。
[Assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.EnableEditAndContinue | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.Default)]
しかし、明らかにそれはリリースモードにも追加されています。
独自のアセンブリの場合、解決策はいくつかのプリプロセッサディレクティブを使用することです。
#ifdef DEBUG
[MyAttribute("foo")]
#endif
編集:申し訳ありませんが、私は.NETを想定しました。私のハンマーがあります。
ほとんどの場合、実行可能ファイルとライブラリの両方のデバッグバージョンは、ランタイムのデバッグバージョンに対してリンクされています。 Windowsには、いくつかのデバッグ/リリースバージョンの命名規則があります。その中にはMSがあります。ライブラリのデバッグバージョンの名前はdで終わる必要があります。 Dependency Walker( http://www.dependencywalker.com )などのツールを使用して、実行可能ファイルまたはライブラリが依存しているライブラリを確認できます。ランタイムライブラリのデバッグバージョンが見つかった場合、実行可能ファイルまたはライブラリがデバッグモードでビルドされている可能性が高くなります。
ただし、これは次の場合にのみ機能します
これがどのバージョンであるかを確認するには、depends.exeを使用します。依存ウォーカーを介してファイルを開くと、必要なファイルが表示されます。 system32ファイルのリストを表示することで、デバッグかリリースかを確認できます。
Filever.exeを使用できます。
filever.exe <my binary file>
--a-- W32i APP - 1.0.0.0 shp 25,600 11-03-2013 <my file>
Fileverを入手するには、WindowsXPのサポートツールをダウンロードできます。
(ほとんどのWindowsユーザーのように)Windows 7以降に移行した場合は、ダウンロードしてwinzipで開くことができます。
次に、support.cabからfileverを抽出します。
Windows7でも問題なく動作します。