To add to Hammer's post, gdb requires that the executable contain its symbol table to have the most useful information. Most (all?) compilers have an option to not include the symbol table so the final executable is smaller. But with the symbol table gdb can tell you all sorts of useful stuff like what value different variables had when the program crashed, etc. From where Hammer left off in gdb the next few logical steps would be to move up one level in the stack frame (with the 'up' command) since you can be pretty certain that the crash wasn't actually caused by strcmp(). Once you move up you can do 'list' to show the code around the point where the program crashed. Then you can 'print <variable name>' to show what its value was when the program crashed.