The problem seems to be that GDB thinks all the code belongs to a single line of text. At first, it was a file of mine, so I presumed I had done something strange and passed it off. I needed to do some more debugging again and my "-g -O0" output still said all code belonged to that one line. So, I made a .i file and compiled that. Different file, but the same problem. The .i file contains the correct preprocessor directives:
# 309 "wrapup.c" static void done_check(void) { but under gdb: (gdb) b done_check Breakpoint 5 at 0x40af44: file /usr/include/gmp.h, line 1661. the break point *is* on the entry to "done_check", but the source code displayed is line 1661 of gmp.h. Not helpful. Further, I cannot set break points on line numbers because all code belongs to the one line in gmp.h. Yes, for now I can debug in assembly code, but it isn't very easy..... $ gcc --version gcc (SUSE Linux) 4.5.0 20100604 [gcc-4_5-branch revision 160292] Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. I've googled for: gcc|gdb wrong source file which only yields how to examine source files in gdb.