I have a component which can be referenced in some projects (for example, Component.dll
). I publish it, of course, in release mode.
In another project (for example, Project.exe
) I reference Component.dll
.
If I build Project.exe
in Debug mode, is there a way to find out about that in my Component.dll
library?
To clarify more: if I have a class and a method named Test
within Component.dll
. Can I do something like:
public void Test(){
if(Debug.IsInDebugMode)
...
}
Keep in mind that Component.dll
is built in release mode.
Debugging in release mode has several limitations. The most annoying one is that you can't easily see into MFC because you don't have the symbols included for the MFC DLL. You must add symbols to the release versions of all libraries and DLL's you wish to debug in your release application.
You use a debug dll the same way as a release dll, there is no difference in functionality. Normally, when you have a dll which is compiled in debug mode you have a corresponding pdb (program database) file.
IMHO, when someone asks whether or not an assembly is "Debug" or "Release", they really mean if the code is optimized... Sooo, do you want to do this manually or programmatically? Manually : You need to view the value of the DebuggableAttribute bitmask for the assembly's metadata. Here's how to do it: Look at the DebuggableAttribute bitmask.
The biggest difference is performance. In a debug dll several extra instructions are added to enable you to set a breakpoint on every source code line in for example Visual Studio. Also the code will not be optimized, againg to enable you to debug the code.
Whether your code is built in Release or Debug mode doesn't matter a great deal. The generated IL is very nearly the same. The Debug version will have an attribute that the jitter uses to set compilation defaults, that attribute is missing in yours. The next thing that matters is exactly how you debug or run your application. The setting that's important is Tools + Options, Debugging, General, "Suppress JIT optimization on module load". It is ticked by default.
Which now makes it matter whether your app gets started by a debugger or not. That's easy to find out, use the System.Diagnostics.Debugger.IsAttached
property. When false, the machine code generated from your IL is going to be optimized by the jitter. A degenerate case is attaching a debugger after the code got started. Kinda important that this doesn't make any difference to you btw.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With