Re: Question on vector at()
I couldn't have responded better than James did. One note, though:
On Mar 17, 3:22 am, Jeff Schwab <j...@schwabcenter.com> wrote:
By the time you see a stack trace, you're already working
backwards. The best tools for finding and tracking logical
errors are compilers and unit tests. It is uncanny how the
people who are best with the debugger are the worst
developers. (That's not meant as a dig at you, btw; I have no
idea what your day-to-day code looks like, and I'm not in a
position to criticize it.)
I honestly can't understand this opinion.
Developers are humans, and humans make mistakes. No matter how
experienced you are at developing, even if you are the best C++
developer in the world and your code has the best quality in the world,
you will make small mistakes here and there from time to time.
The vast majority of these small mistakes can be found with a proper
debugger almost immediately. You simply have to see the line where the
program crashed in order to immediately see your own mistake and fix it.
Without the aid of a debugger it could take tens of minutes, or even
hours at worst. ("Segmentation fault" is not a very informative error
message. Having to find the place where the fault happens by adding
debugging prints to your program can be a real pain.)
If the error is not exactly at the line where the crash happened, the
debugger is even more useful, exactly because of the stack trace. You
can navigate the call stack down until you find the actual place where
the error happened, you can easily examine the values of the variables
at that place, and in the majority of the cases you will immediately see
what the problem was (usually a small typo or thought mistake).
It is, of course, possible to have really nasty bugs which are
extremely hard, or even impossible, to find with just a debugger.
However, that doesn't mean that the debugger isn't useful.
If I had to develop C++ programs without any kind of debugger, it
would be a real pain. Each small mistake, each small typo, would require
a long and laborious task of manually adding debug prints to try to
binary-search the location of the error... Horrible.
(I have actually had to do this in the past, when developing programs
in a Unix environment using gcc and without gdb or any other kind of
debugger. It was not nice.)