gdb调试字符串交换
1 #include <stdio.h>2 char * fan( char *p, int len );3 int main()4 {5 char* p = "123";6 p = fan(p, 3);7 printf( "%s", p );8 return 0;9 }10 char * fan( char *p, int len )(gdb) 11 { 12 char temp; 13 char * n1 = p; 14 char * n2 = p+len-1; 15 while( n1 != n2) 16 { 17 temp = *n1; 18 *n1 = *n2; 19 *n2 = temp; 20 n1++; (gdb) 21 n2--; 22 } 23 return p; 24 } (gdb) b fan Breakpoint 1 at 0x400544: file shiyan.c, line 13. (gdb) run Starting program: /home/sam/oj/shi Breakpoint 1, fan (p=0x40068c "123", len=3) at shiyan.c:13 13 char * n1 = p; (gdb) p *n1 $1 = 72 'H' (gdb) n14 char * n2 = p+len-1;(gdb) p *n2Cannot access memory at address 0xf0b2dd(gdb) p len$2 = 3(gdb) p temp$3 = 0 '\000'(gdb) n15 while( n1 != n2)(gdb) n17 temp = *n1;(gdb) p temp$4 = 0 '\000'(gdb) n18 *n1 = *n2;(gdb) nProgram received signal SIGSEGV, Segmentation fault.0x0000000000400574 in fan (p=0x40068c "123", len=3) at shiyan.c:1818 *n1 = *n2;(gdb) p temp$5 = 49 '1'(gdb) nProgram terminated with signal SIGSEGV, Segmentation fault.The program no longer exists.(gdb)
18 *n1 = *n2;(gdb) nProgram received signal SIGSEGV, Segmentation fault.0x0000000000400574 in fan (p=0x40068c "123", len=3) at shiyan.c:18