首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

gdb调试函数有关问题

2013-10-06 
gdb调试函数问题代码源文件student.c如下:#include stdio.h#include string.htypedef struct tagStude

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 等*/






热点排行