Chinaunix首页 | 论坛 | 博客
  • 博客访问: 609344
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-23 13:53
个人简介

linux

文章分类

全部博文(66)

文章存档

2016年(1)

2015年(14)

2014年(32)

2013年(19)

分类: LINUX

2014-11-07 16:26:55

    1. 1.执行gdb命令的方式:

    2.     1.1 gdb prog
    3.     调试应用程序 prog
    4.     1.2 gdb prog core_file
    5.     调试程序 prog 和由 prog 异常终止产生的 core dump 文件
    6.     1.3 gdb prog pid
    7.     调试一个正在运行的程序, pid 是进程的 id
    8.     1.4 gdb
    9.     进入 gdb 后执行 file prog ,调试程序 prog

    10. 2.查看程序代码:
    11.     使用 list 命令

    12.     命令                     说明
    13.     list                     列出当前行前后共 10 行(默认)代码
    14.     list n                   列出第 n 行前后共 10 行(默认)代码
    15.     list ,n                  列出当前行到第 n 行前后共 10 行(默认)代码
    16.     list n,m                 列出第 n 行到第 m 行前后共 10 行(默认)代码
    17.     list +/ list ?n         列出当前行以上、以下 n 行代码
    18.     list file:n              列出文件 file 的第 n 行前后共 10 行(默认)代码
    19.     list *address            列出指定地址的行代码
    20.     list function            列出函数 function 的代码
    21.     list file:function       列出文件 file 中 function 的代码
    22.     注:当前行是指程序运行中正在执行的代码所在的行

    23. 3.查看代码()
    24.     使用directory 命令指定程序的源文件路径
    25.     3.1 directory dir1:dir2:...
    26.     设置源文件搜索路径为 dir1:dir2:... ,多个目录用 : (冒号)分隔
    27.     3.2 directory
    28.     清除源文件搜索路径
    29.     3.3 info directory
    30.     显示程序的源文件路径
    31.     

    32. 4.中断程序的运行
    33.     4.1设置断点
    34.     命令                         说明
    35.     break function             在函数 function 处设置断点
    36.     break function(type,...)   在原型为 function(type,...) 的函数处设置断点
    37.     break class::function      在类 class 的 function 函数处设置断点
    38.     break                      在下一个指令处设置断点
    39.     break n                    在第 n 行设置断点
    40.     break ?n / break +n        在当前行以上、以下 n 行处设置断点
    41.     break *address             在指定内存地址的行处设置断点
    42.     break file:n               在文件 file 的第 10 行设置断点
    43.     break file:function        在文件 file 中的函数 function 处设置断点
    44.     break expr if condition    符合条件处中断,可与上述各种表达式联合使用
    45.     info break / info break n  显示所有 / 第 n 个断点的信息

    46.     4.2设置观察点( watchpoints ,另外一种形式的中断点)
    47.     观察点是监控指定的变量或表达式的变化,一旦监控的表达式或
    48.     变量被访问或被改变,程序即暂停

    49.     watch expr
    50.     当 expr 的值发生变化时,程序暂停

    51.     rwatch expr
    52.     当 expr 被访问时,程序暂停

    53.     awatch expr
    54.     当 expr 被改变或被访问时,程序暂停

    55.     info watch
    56.     显示所有 watchpoint

    57.     4.3清理或禁止中断点( breakpoints 、 watchpoints )
    58.     clear :清理中断点(只处理 break ,不能处理 watch )
    59.         不带参数表示清理当前行中断点
    60.         带参数执行方式同 break 指令,如 clear 6 表示清除第 6 行的断点
    61.     
    62.     delete :删除中断点(针对断点号操作)
    63.     不带参数表示删除所有断点
    64.         delete n :删除断点号为 n 的断点
    65.         delete n?-:删除断点号从 n 到 m 的所有断点

    66.     disable :禁用中断点(执行方式同 delete )
    67.     enable :启用被禁用的断点(执行方式类似 disable )

    68. 5.查看程序运行期变量
    69.     打印表达式或变量的值: print ,可简写为 p
    70.         print expr :打印变量或表达式 expr 的值

    71. 6.查看程序运行期变量
    72.     命令                             说明
    73.     display expr                 自动显示变量或表达式的值
    74.     display/fmt expr             按指定的格式自动显示变量或表达式的值
    75.     undisplay num1 ...           删除一个或多个自动显示的变量或表达式
    76.     delete display num1 ...      删除一个或多个自动显示的变量或表达式
    77.     disable display num1 ...     禁止自动显示一个或多个变量或表达式
    78.     enable display num1 ...      重新启用被禁止自动显示的一个或多个变量或表达式
    79.     info display                 显示所有自动显示的变量或表达式
    80.     
    81.     查看栈信息: backtrace ,简写为 bt

    82. 7.改变程序的运行
    83.     设置变量
    84.         如: set var i = 3 ,将 i 的值重新赋值为 3
    85.     强制函数返回
    86.          return
    87.          结束当前函数的执行,函数中为执行的语句忽略,函数直接返回
    88.          return result
    89.          结束当前函数的执行,函数中为执行的语句忽略,函数直接返回且将 result 作为返回值

    90.     强制调用函数
    91.          call function
    92.          调用函数 function ,打印函数返回值

    93. 8.调试多线程程序
    94.     8.1查看线程信息:注意带 * 号的为当前线程
    95.     (gdb) r
    96.     Starting program: 
    97.     /home/kwarph/Training/Module02/context/gdb/thread_test 
    98.     [Thread debugging using libthread_db enabled]
    99.     [New Thread 0xb7fe8b70 (LWP 2855)]
    100.     [Switching to Thread 0xb7fe8b70 (LWP 2855)]
    101.     ......
    102.     (gdb) info threads # 查看线程信息
    103.     [New Thread 0xb77e7b70 (LWP 2856)]
    104.      3 Thread 0xb77e7b70 (LWP 2856) 0x007ba7d8 in clone ()
    105.      from /lib/tls/i686/cmov/libc.so.6
    106.     * 2 Thread 0xb7fe8b70 (LWP 2855) count (id=1) at 
    107.     thread_test.cpp:9
    108.      1 Thread 0xb7fe96d0 (LWP 2852) 0x007ba7d8 in clone ()
    109.      from /lib/tls/i686/cmov/libc.so.6

    110.     8.2切换线程: thread n
    111.     (gdb) thread 3 # 切换到线程 3
    112.     [Switching to thread 3 (Thread 0xb77e7b70 (LWP 2856))]#
    113.     0x007ba7d8 in clone
    114.      () from /lib/tls/i686/cmov/libc.so.6
    115.     (gdb) info threads
    116.     * 3 Thread 0xb77e7b70 (LWP 2856) 0x007ba7d8 in clone ()
    117.      from /lib/tls/i686/cmov/libc.so.6
    118.      2 Thread 0xb7fe8b70 (LWP 2855) count (id=1) at 
    119.     thread_test.cpp:9
    120.      1 Thread 0xb7fe96d0 (LWP 2852) 0x007ba7d8 in clone ()
    121.      from /lib/tls/i686/cmov/libc.so.6

    122. 9.使用 gdb ? 调用 shell 命令
    123.     调用 shell 命令
    124.         shell :切换到 shell
    125.         shell command :临时执行 shell 命令 command

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