2010年12月2日

.net裡debug 和 release的分別

編譯器在Debug mode會發佈System.Diagnostics.DebuggableAttribute的事例。在Release版本則無。
在debug 版本,  IsJitOptimizerEnabled 設為 True, 在 release版本設為 False.  用ildasm.exe 打開Debug版本可以看到這屬性。Debug版本不會 優化binary, 並移動code像loop-invariant hoisting那樣。 在selecte 的指令,在這兩種模式效能上表現可能會有很大變化。但這不是絕對。

Debugger會對應執行breakpoint地的址。 它使用.pdb文件和在程式裡安插訊息, 以提供IL instruction地址的對應。 如果您寫自己的Debugger可用 ICorDebugCode ::GetILToNativeMapping ()。

 

要知道你的EXE或DLL檔是DUBUG 或RELEASE

請依以下步驟操作;
1.  visual studio 2005/2003命令字元 à 輸入ILDASM->檔案->開啟->選你的dll or exe
2. 輸入Crtl+M, 打開以下視窗, 尋找DebuggableAttribute,
如果有找到就是DEBUG模式, 沒找到就是RELEASE模式
clip_image002
ILDASM也可以作反組譯

 

如何設定debug and release的參考

你可以增加以下code到AssemblyInfo.cs :
#if DEBUG
[assembly: AssemblyDescription("Debug")]
#else
[assembly: AssemblyDescription("Release")]
#endif

如何根據debug and release輸出不同名稱

編輯  project file . 找到 <AssemblyName> 並加以下參數:
<AssemblyName Condition="'$(Configuration)'=='Debug'">MyApp_Debug.exe</AssemblyName> <AssemblyName Condition="'$(Configuration)'=='Release'">MyApp_Release.exe</AssemblyName

參考資料:

http://social.msdn.microsoft.com/Forums/en-US/clr/thread/4de6861f-e723-4def-bcaf-aa717a3e1897
http://stackoverflow.com/questions/1093338/vs2008-outputting-a-different-file-name-for-debug-release-configurations

沒有留言:

張貼留言