美文网首页软件调试的艺术
第二章 停下来环顾程序

第二章 停下来环顾程序

作者: 叶友华 | 来源:发表于2020-05-05 00:19 被阅读0次
    暂停机制

    1、断点
    2、监视点
    3、捕获点
    以上都可以暂停程序,但是其本意有区别, 都可以用delete删除。

    断点概念

    程序停止点

    跟踪断点

    1、查看断点列表
    info breakpoints

    设置断点

    1、break function
    2、break filename:line number
    3、break filename:function

    断点的持久性

    gdb如果不退出,在修改代码后再执行run,gdb能够感知到代码已修改,并适应新的版本。

    删除和禁用断点
    删除断点

    1、delete breakpoint_list_id
    2、 delete --删除所有断点
    3、clear 清楚gdb将执行的下一个断点。
    4、clear function、clear filename:function、clear linenumber、clear filename:funciton 清楚指定位置的断点。

    恢复执行

    1、step和next , step会进入函数,next跳过函数执行。 注意step不会在不具有调试信息的代码。
    2、continue 或者continue number , number为忽略几个断点,没有number为跳过1个断点。
    3、finish 直接跳到函数尾部。
    4、until 退出循环

    条件断点

    break break-args if condition
    break-args 可以为设置断点的各种方法

    断点命令集

    commands breakpoint-number
    ...
    commands
    ...
    ends
    每当进入断点,将会执行command之间的内容。
    1、命令会一直打印一些附属信息,如果不打印,可以在命令集开头输入slient。
    2、每当进入相同断点就会停止,可以在ends之前添加continue
    另外如果多个command中有相同的命令,可以采用define 将相同点抽出,在每个command中使用。
    可以用show user 列出所有的宏定义。

    监视点

    命令:
    watch i
    或者带复杂表达式:
    watch (i | j >12) ...
    注意监视的是指监视的点的值/表达时有变化,并且退出监视的变量作用域将会自动删除监视点断点。
    监视值变化对于当值赋值给指针,通过指针来修改该值也能监视到!注意这个隐含的特性。

    表达式

    表达式可以包含很多中
    1、gdb 方便变量 方便变量: gdb自己定义的变量。
    2、程序中的任何在作用域内的变量。
    3、任何种类的字符串、数值或者字符常量。
    4、预处理器宏 (指语言中的宏, 但是gcc 需要加 -g3
    5、条件、函数调用、类型强制转换和所有语言定义的运算符。

    相关文章

      网友评论

        本文标题:第二章 停下来环顾程序

        本文链接:https://www.haomeiwen.com/subject/cyxpghtx.html