When writing code, consider how you're going to be putting breakpoints in there later. This particularly means not overdoing nested function calls - foo(bar(baz)) - and the same for field/method chains - foo().bar().baz(). In general, unless expressions are trivial, it is often worth it to put them on separate lines and assign them to variables, even if the values are only used once - you can then easily step through each, set breakpoint precisely where you want, and you'll have the values around in the watch window. When compiling with optimizations, any such variables will likely be optimized away, especially if you use the const reference trick rather than relying on RVO to kick in.