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 -0×4(%ebp),%eax
0x004010c4 <+52>: add $0×21,%eax
0x004010c7 <+55>: mov %eax,-0×8(%ebp)12 printf(“%d\n”,y);
0x004010ca <+58>: mov -0×8(%ebp),%eax
0x004010cd <+61>: mov %eax,0×4(%esp)
0x004010d1 <+65>: movl $0×402020,(%esp)
0x004010d8 <+72>: call 0×401198 <printf>13 return 0;
0x004010dd <+77>: mov $0×0,%eax14 }
0x004010e2 <+82>: leave
0x004010e3 <+83>: ret
Note that the assembly language block corresponds to the source line just above it.