zoukankan      html  css  js  c++  java
  • 使用gdb添加断点的几种方式

    1. 普通断点

    根据代码行数设置断点是最常见的一种方式,在debug程序运行前就可以进行断点的配置。如:

    (gdb) b src/main.cpp:127
    

    当程序执行到main.cpp文件的第127行时就会出发断点。

    2. 条件断点

    顾名思义,这种断点是当满足一定条件时才会触发,比较适合进行异常排查。设置方式(gdb)break line-or-function if (condition), 如:

    (gdb) b src/main.cpp:127 if cnt==10
    

    3. 数据断点

    就是根据地址来进行设置断点,只能是在debug程序运行之后设置,因为只有运行后,你才能很方便地获知变量的地址。当该地址上的内容发生改变时就会触发断点。
    设置数据断点有两种方式,一种是直接指出地址值,如:

    (gdb) b *0x400522
    

    注意必须加*号。而获取地址值的方法是,先设置普通断点,在断点处print &变量名 就能获取该变量的地址。
    另一种当然就是直接设置变量名了,如:

    (gdb) b &变量名
    

    4. 函数断点

    这种断点是当程序执行到某个程序时就会触发断点。设置方式如:

    (gdb) b funcName
    

    但是函数断点并不是对所有函数都有效,比如优化后的静态函数和inline函数等,可能就无法触发断点。

    5. 监视

    设置监视也必须是在程序运行后才行。如:

    (gdb) watch *地址    # 当地址所指内容发送变化时断点
    (gdb) watch var    #当var值变化时,断点
    (gdb) watch (condition)    #当条件符合时,断点
    

    监视也被称为硬件断点。可以监测栈变量和堆变量值的变化,当被监测变量值发生变化时,程序被停住。

  • 相关阅读:
    ASP.NET MVC3实现无刷新验证码
    关闭数据库的xp_cmdshell命令以防止黑客攻击
    C#实现100万条数据导入SQL SERVER数据库仅用4秒 (附源码)
    asp.net防止刷新时重复提交介绍
    SQL Server数据库开发中的十大问题
    C#实现WebQQ密码MD5加密算法
    JavaSE基础篇
    Jekins安装与配置(基于majaro)
    Jochen的golang小抄基础篇章二
    JavaSE之面向对象
  • 原文地址:https://www.cnblogs.com/xl2432/p/11361997.html
Copyright © 2011-2022 走看看