A DLL can have one of 5 states when it comes to debug/release
DLLs:
1. A "non debuggable" DLL:
When opened in ilDasm.exe the manifest does not include
the line:
// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes)
= ( 01 00 XX XX 00 00 00 00 )
When the DLL is dynamically loaded the call to the method:
DebuggableAttribute.GetCustomAttribute(assm, typeof(DebuggableAttribute));
returns null.
2. An optimized debug DLL:
When opened in ilDasm.exe the manifest includes the line:
// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes)
= ( 01 00 03 00 00 00 00 00 )
When the DLL is dynamically loaded the call to the method:
DebuggableAttribute.GetCustomAttribute(assm, typeof(DebuggableAttribute));
returns a DebuggableAttribute object with the flags
IsJITOptimizerDisabled = false;
IsJITTrackingEnabled = true;
3. An optimized release DLL:
When opened in ilDasm.exe the manifest includes the line:
// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes)
= ( 01 00 02 00 00 00 00 00 )
When the DLL is dynamically loaded the call to the method:
DebuggableAttribute.GetCustomAttribute(assm, typeof(DebuggableAttribute));
returns a DebuggableAttribute object with the flags
IsJITOptimizerDisabled = false;
IsJITTrackingEnabled = false;
4. A non-optimized debug DLL:
When opened in ilDasm.exe the manifest includes the line:
// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes)
= ( 01 00 07 01 00 00 00 00 )
When the DLL is dynamically loaded the call to the method:
DebuggableAttribute.GetCustomAttribute(assm, typeof(DebuggableAttribute));
returns a DebuggableAttribute object with the flags
IsJITOptimizerDisabled = true;
IsJITTrackingEnabled = true;
5. A non-optimized release DLL:
When opened in ilDasm.exe the manifest includes the line:
// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes)
= ( 01 00 06 01 00 00 00 00 )
When the DLL is dynamically loaded the call to the method:
DebuggableAttribute.GetCustomAttribute(assm, typeof(DebuggableAttribute));
returns a DebuggableAttribute object with the flags
IsJITOptimizerDisabled = true;
IsJITTrackingEnabled = false;