On Mon, Dec 17, 2007 at 11:11:46PM -0200, Alexandre Oliva wrote: > Line number information has a well-defined meaning: it ought to > represent the source code line that best represents the source-code > construct that ended up implemented using that instruction.
You implicitly assume that souch a source code line exists. Consider something like int func(bool cond, int a, int b, int c) { int out; if (cond) out = a + b; else out = a + b + c; return out; } The optimizer might produce something that structurally resembles out = a + b; if (!cond) out += c; return out; If you set a breakpoint on the addition of a and b, it will trigger regardless of the value of cond. Furthermore, there isn't a place to put a breakpoint that will trigger only for the case where cond is true, as you can on unoptimized code. So you need to choose between natural debugging and optimization.