With the latest version of gdb (version 7 and above), one can easily map the source code and the assembly listing. The /m switch when used with the disassemble command gives the assembly listing along with the source code when available.
(gdb) help disassemble
Disassemble a specified section of memory.
Default is the function surrounding the pc of the selected frame.
With a /m modifier, source lines are included (if available).
A sample listing of the disassemble command with the /m switch is pasted below:
(gdb) disassemble /m
11 int y = x +33; 0x004010c1 <+49>: mov -0x4(%ebp),%eax 0x004010c4 <+52>: add $0x21,%eax 0x004010c7 <+55>: mov %eax,-0x8(%ebp) 12 printf("%d\n",y); 0x004010ca <+58>: mov -0x8(%ebp),%eax 0x004010cd <+61>: mov %eax,0x4(%esp) 0x004010d1 <+65>: movl $0x402020,(%esp) 0x004010d8 <+72>: call 0x401198 <printf> 13 return 0; 0x004010dd <+77>: mov $0x0,%eax 14 } 0x004010e2 <+82>: leave 0x004010e3 <+83>: ret
Note that the assembly language block corresponds to the source line just above it.