• 用gdb调试C程序的简单介绍


    
    
    1.安装gdb 
    引用
    # yum install gbd
    
    
    
    
    这里用的是CentOS或者RedHat的yum来安装,如果是Ubuntu的话就可以用apt-get来安装。 
    
    
    2.编译可调试的C程序 
    要用gdb调试C程序,在编译C程序的时候就要变成成debug的本版,很简单在gcc编译的时候加上“-g”的参数就可以了(trig.c代码请参考前一篇文章http://lveyo.iteye.com/blog/240578) 
    
    
    引用
    # gcc -o trig -g trig.c
    
    
    
    
    3.用gdb调试 
    
    
    引用
    # gdb trig 
    GNU gdb Red Hat Linux (6.5-37.el5_2.2rh) 
    Copyright (C) 2006 Free Software Foundation, Inc. 
    GDB is free software, covered by the GNU General Public License, and you are 
    welcome to change it and/or distribute copies of it under certain conditions. 
    Type "show copying" to see the conditions. 
    There is absolutely no warranty for GDB.  Type "show warranty" for details. 
    This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". 
    
    
    (gdb)
    GDB显示其默认提示符并等待你的命令。首先使用list命令来查看这次调试会话的一部分源代码: 
    
    
    引用
    (gdb) list 
    13              if(!fgets(input, MAX_INPUT, stdin)){ 
    14                      perror("an error occurred.
    "); 
    15              } 
    16              angle = strtod(input, NULL); 
    17 
    18              printf("sin(%e) = %e
    ", angle, sin(angle)); 
    19 
    20              return 0; 
    21      } 
    (gdb)
    
    
    在mian函数入口设置断点,然后用run命令运行程序 
    
    
    引用
    (gdb) break main 
    Breakpoint 1 at 0x80484c5: file trig.c, line 12. 
    (gdb) run 
    Starting program: /tmp/cpro/trig 
    
    
    Breakpoint 1, main () at trig.c:12 
    12              printf("Give me an angle (in radians) ==>"); 
    (gdb)
    
    
    运行到main函数的第一条指令时暂停程序,此时程序暂停在第12行。可以使用list命令来显示main函数中的源代码。每一行代码可以使用step和next命令来单步执行——前者会在执行每一条机器指令之后暂停,后者的执行方式类似,但它不会进入外部函数的内部,而是把函数调用语句当作一条普通语句来执行。 
    
    
    先执行next命令运行printf语句 
    
    
    引用
    (gdb) next 
    13              if(!fgets(input, MAX_INPUT, stdin)){ 
    (gdb) 
    Give me an angle (in radians) ==>3.14 
    16              angle = strtod(input, NULL); 
    (gdb)
    gdb在它调用库函数strtod()将字符串转换为双精度浮点数之前暂停了程序的运行。你可以使用gdb的print命令在调用这个函数前后查看angle变量的值: 
    
    
    引用
    (gdb) print angle 
    $1 = 1.9580527709081361e-305
    
    
    
    
    可以用contuinue命令完成程序运行,知道遇到下一个断点,continue命令简写为c 
    
    
    引用
    (gdb) c 
    Continuing. 
    sin(3.140000e+00) = 1.592653e-03 
    
    
    Program exited normally.
    用q命令推出gdb。


  • 相关阅读:
    [唐胡璐]QTP框架 关键字驱动测试框架之二 框架目录管理
    [唐胡璐]测试用例设计 错误推测方法
    [唐胡璐]测试用例设计 边界值分析方法
    [唐胡璐]QTP框架 关键字驱动测试框架之三 对象库管理
    [唐胡璐]QTP框架 关键字驱动测试框架之一 框架思想
    [唐胡璐]VS技巧 C# Winform界面中的分隔线
    [唐胡璐]QTP框架 关键字驱动测试框架之四 测试用例管理
    [唐胡璐]VS技巧 两个ListBox中的项左右移动
    [唐胡璐]测试用例设计 等价类划分
    [唐胡璐]QTP技巧 利用脚本从excel导入Data Table
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318365.html
Copyright © 2020-2023  润新知