views:

90

answers:

2

Hi!

I've got a little problem. my application runs without problems in Debug mode, but crashes in release mode. I can't track down the problem, because in release mode all the Debuginfo appears to be nonsense. However - sometimes in other projects the Debug output is also valid in release mode. What projectsettings do I have to change such that the Debug output is valid in release?

thanks!

+1  A: 

Likely, you're making use of uninitialized variables.

In your project settings, set

Configuration Properties > C/C++ > General > Debug Information Format

to Program Database

Then, set

Configuration Properties > Linker > Debugging > Generate Debug Info

to Yes

The good old "debugging with traces" approach may help you having a rough idea of where the problem is. Then read this portion of the code again and chase uninitialized variables.

Gregory Pakosz
hi and thanks! those settings are already set. I also set /ASSEMBLYDEBUG - but the debug output is still not valid
Mat
try to rebuild your project to make sure the pdb is in sync?
Gregory Pakosz
of course i did - but still the same. i can track the passed function attributes, but for all the local variables I get CXX017 Symbol "variablename" not found
Mat
@Mat It's because in Release Mode VC has chosen to keep it in a register, see my answer.
Andreas Brinck
+1  A: 

Even in Release mode "Generate Debug Info" should be set to "Yes" per default. The problem is that when you're running in Release Mode the compiler optimizes the code which makes it hard for the debugger to display the correct values of variables (it may for instance choose to keep some variables in registers etc.).

There's not much to be done about this, you could always turn off optimization either globally or around a specific function using #pragma optimize ("", off) / #pragma optimize ("", on) around it but this essentially means you're running in Debug Mode again and the crash will probably go away...

If you're comfortable with reading assembly code, you can switch over to disassembly mode and through a little investigation find the correct values of your variables.

Andreas Brinck
Well, everything here is correct. However, I don't see how turning optimization off helps solving the real cause of the crash?
Gregory Pakosz
@Gregory No, you're right, it will probably not help you find the crash. It was just an example of how to make the displayed variables reliable, but as I wrote the crash will probably go away.
Andreas Brinck
the crash will probably go away, not its cause :)
Gregory Pakosz