????gdb??the GNU Debugger????????????UNIX?????????(debugger)?????????C?? C++?? Objective-C?? Java?? Fortran?????debug??
??????gdb?校???????????????(break point)????????????械????????????????????????????????????????????????????IDE?校?gdb?????位????妾�
???????????????gdb????????????????C???????????????????????Mac OS????
???????gdb
???????????????C?????(?????bug?????????gdb???????????械????)
?????????????test.c??????????????main()??mean.c?????卸?????mean()??????????main()?械??谩?
????test.c
#define ARRAYSIZE 4
float mean(float?? float);
int main()
{
int i;
float a=4.5;
float b=5.5;
float rlt=0.0;
float array_a[ARRAYSIZE]={1.0?? 2.0?? 3.0?? 4.0};
float array_b[ARRAYSIZE]={4.0?? 3.0?? 2.0?? 1.0};
float array_rlt[ARRAYSIZE];
for(i = 0; i < ARRAYSIZE - 1; i++) {
array_rlt[i] = mean(array_a[i]?? array_b[i]);
}
rlt = mean(a?? b);
return 0;
}
????mean.c
????float mean(float a?? float b)
????{
????return (a + b)/2.0;
????}
???????gcc????????????????????????gdb????械???????????-g???(??????????debugging???):
????$gcc -g -o test test.c mean.c
????????main??????????
????(???斜???????:
????$chmod +x test
??????????????????????)
????????gdb????????????:
????$gdb test
????????gdb??????????小?
???????????
????????????????????械???????????9?谐???:
????(gdb) list 9
????????????9???????????10?械?????????????????????????????????????????锟�??????????????test.c:
????int main()
????{
????int i;
????float a=4.5;
????float b=5.5;
????float rlt=0.0;
????float array_a[ARRAYSIZE]={1.0?? 2.0?? 3.0?? 4.0};
????float array_b[ARRAYSIZE]={4.0?? 3.0?? 2.0?? 1.0};
??????????mean.c?械?????????????????:
????(gdb) list mean.c:1
??????????????????谐???????械??围:
????(gdb) list 5?? 15
?????????5-15?械????
????????????????????:
????(gdb) list mean
??????????
??????????????谐???:
????(gdb) run
??????????????????
???????谐?????????????????gdb????????????????贸?????????????
???????(break point)?????????械????位?谩???gdb?校??????????械???位????????????????????????????????????????????????
???????????????????????????????:
????(gdb) break 16
????????test.c???16????????
????????????????????:
????(gdb) info break
????????????????????????????????????????????:
????(gdb) delete 1
???????????????卸??:
????(gdb) delete breakpoints
?????????
???????????????run???谐??????????械?16????????gdb???:
????Breakpoint 1?? main () at test.c:16
????16        for(i = 0; i < ARRAYSIZE - 1; i++) {
???????????????:
????(gdb) list
???????????????????:
????(gdb) print a
????(gdb) print array_a
?????????械???????:
????(gdb) info local
?????????????? (???????????????Linux?????????):
????(gdb) info stack
???????????????????
????(gdb) set var a=0.0
????(gdb) set var array_a={0.0?? 0.0?? 1.0?? 1.0}
?????????????????????????????????
?????????????????????:
????(gdb) break mean.c:2
????????????????a?????????main()?????????mean()???????????function::variable????????:
????(gdb) print mean::a
???????锌???
?????贸???????????????????:
????(gdb) step
?????????????????????????????校????????????:
????(gdb) continue
???????run?????????小?
????????
????????????gdb????????????:
????(gdb) help
??????????????????:
????(gdb) help info
???????
??????????????????gdb:
????(gdb) quit
????debug
???????????????bug??C????demo.c
#include <stdio.h>
struct node {
int element;
};
typedef struct node *PNode;
int main()
{
int i;
PNode np=NULL;
for (i=0; i<10; i++) {
printf("Hello World!");
}
printf("%d "?? np->element);
}
??????????????????????薪?????:
????Segmentation fault
???????????gdb??????????
????Updata:
?????????????????: gdb?????????????????????写??????c????continue??b????break??q????quit??