Quote:
Originally Posted by
drbones
So the title kinda says it all. I was getting a SEGfault, so I decided to compile with the -g option to find where, and low and behold the SEGfault doesn't occur.
I suppose the answer is "Problem solved! You fixed yet another SEGfault." But I am very curious how this could have happened.
Enabling debugging likely disabled some optimizations, altering the way the code was generated and perhaps the pattern of memory use.
Imagine you're using an uninitialized variable. It may just happen to always be zero when the code isn't optimized since it wasn't used before. But optimize it and it decides it doesn't need a variable at all and puts it in a register! Suddenly you're using an uninitialized register, which could be anything, and it crashes...
Or you're overflowing the end of an array, and the arrangement of memory is different when the executable's optimized. When it's not optimized, you might be corrupting empty space and not care. When it's optimized, you could be munging something important, like pointers to somewhere else, or even your stack frame...
Can you debug it when it's not compiled for debugging? The information you get might be limited, but limited's better than nothing.