Chinaunix首页 | 论坛 | 博客
  • 博客访问: 247714
  • 博文数量: 36
  • 博客积分: 743
  • 博客等级: 中士
  • 技术积分: 846
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-26 01:02
文章分类

全部博文(36)

文章存档

2014年(3)

2013年(4)

2012年(29)

分类: C/C++

2012-11-12 16:13:46

近日,调试一个带有复杂数据接口的程序,顺便了解了以下gdb的自定义函数,以下以打印一个链表为例子,说明一下gdb如何使用gdb的自定义函数

测试代码(test.c)如下

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef struct node{
  4.     int val;
  5.     struct node * next;
  6. }node_list_t;


  7. typedef node_list_t* pnode_list_t;
  8. typedef node_list_t** ppnode_list_t;

  9. void create_list( ppnode_list_t ppnode);
  10. void destroy_list( ppnode_list_t ppnode);

  11. int main( int argc, char **argv ){

  12.     pnode_list_t list=NULL;
  13.     
  14.     create_list(&list);
  15.     destroy_list(&list);

  16.     return 0;
  17. }


  18. void create_list( ppnode_list_t ppnode){
  19.     int count=10;
  20.     pnode_list_t temp=NULL;

  21.     while(count){
  22.         temp=(pnode_list_t)malloc(sizeof(node_list_t));
  23.         if(temp){
  24.             temp->val=count;
  25.             temp->next=*ppnode;
  26.             *ppnode=temp;
  27.         }

  28.         --count;
  29.     }
  30. }


  31. void destroy_list( ppnode_list_t ppnode){
  32.     pnode_list_t temp=NULL;

  33.     if(!ppnode){
  34.         return;
  35.     }

  36.     while(*ppnode){
  37.         temp=*ppnode;
  38.         *ppnode=(*ppnode)->next;

  39.         free(temp);
  40.         temp=NULL;
  41.     }
  42. }
在~/.gdbinit下加入如下代码(如果没有此文件,需要手工建立):

点击(此处)折叠或打开

  1. define print_list
  2. set $list=$arg0
  3. while($list)
  4. printf "%d\t",$list->val
  5. set $list=$list->next
  6. end
  7. printf "\n"
  8. end
以上代码定义了一个gdb的自定义函数:print_list,后续调试的时候会用到

编译源代码test.c

点击(此处)折叠或打开

  1. gcc -g -o test test.c
使用gdb调试test程序:

点击(此处)折叠或打开

  1. gdb ./test
在源代码21行的destroy_list处下断点,然后运行

点击(此处)折叠或打开

  1. (gdb) b 21
  2. (gdb) r
程序运行之后,断点处停住,调用自定义函数print_list,有如下输出:

点击(此处)折叠或打开

  1. (gdb) print_list list
  2. 1    2    3    4    5    6    7    8    9    10    
  3. (gdb)




阅读(2828) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~