读书人

gdb调试函数有关问题

发布时间: 2013-10-06 18:25:14 作者: rapoo

gdb调试函数问题

代码源文件student.c如下:#include <stdio.h>#include <string.h>typedef struct tagStudent{int  id;char name[10];}Student_S;void operateStudent(Student_S *psStudent, int id, char *name){psStudent->id = id;strcpy(psStudent->name, name);printf("id   = %d\nname = %s\n", psStudent->id, psStudent->name);}void doSomething(){}int main(int argc, char *argv[]){for (;;){doSomething();}return 0;}

程序编译:gcc -g -o student student.c

程序运行:./student


下面主要介绍如何对运行中的系统student的特定函数operateStudent进行调试

具体过程如下:

1. ps aux | grep student => 查看进程pid

2. gdb attach pid => 本质调用ptrace

3. 设置断点

(gdb) b main /*系统主流程中设置断点主要是为了让系统在断点处停下来,为被调试的函数构造参数*/

(gdb) b operateStudent

4. (gdb) continue /*让程序继续向下运行*/

5. 程序在主流程main断点处停下来,此时给需要gdb调试的函数operateStudent构造入参

(gdb) set $stu = (Student_S *) malloc(sizeof(Student_S)) /*变量操作同程序中一样set $stu->id = 1 set strcpy($stu->name, "me") 等*/

(gdb) call operateStudent($stu, 1, "who") /*函数调用同程序中一样*/

此时,程序会在operateStudent函数断点处停下来

6. (gdb) n /*执行常规调试过程 n s p /x 等*/






读书人网 >其他数据库

热点推荐