手把手教你玩转GDB(二)—Breakpoint, Watchpoint和Catchpoint

本文是《手把手教你玩转GDB》系列的第二篇,主要内容是用GDB调试程序中比较常用到的断点(breakpoint)、监视点(watchpoint)和捕捉点(catchpoint)。虽然说这三类point的功能是不一样的,但它们的用法却极为相似。因此,本文将以断breakpoint为例,进行详细的介绍,关于watchpoint和catchpoint的介绍就相对比较粗略,相信读者朋友如果能够理解breakpoint的部分,那么便可以触类旁通,学会watchpoint和catchpoint的用法。

   1. Breakpoint: 作用是让程序执行到某个特定的地方停止运行

  • (1)设置breakpoint:

    a. break function: 在函数funtion入口处设置breakpoint
    b. break +offset: 在程序当前停止的行向前offset行处设置breakpoint
    c. break –offset: 在程序当前停止的行向衙offset行处设置breakpoint
    d. break linenum: 在当前源文件的第linenum行处设置breakpoint
    e. break filename:linenum: 在名为filename的源文件的第linenum行处设置breakpoint
    f. break filename:function: 在名为filename的源文件中的function函数入口处设置breakpoint
    g. break *address: 在程序的地址address处设置breakpoint
    h. break … if cond: …代表上面讲到的任意一个可能的参数,在某处设置一个breakpoint, 但且仅但cond为true时,程序停下来
    i. tbreak args: 设置一个只停止一次的breakpoints, args与break命令的一样。这样的breakpoint当第一次停下来后,就会被自己删除
    k. rbreak regex: 在所有符合正则表达式regex的函数处设置breakpoint

  • (2)info breakpoints [n]:

    查看第n个breakpoints的相关信息,如果省略了n,则显示所有breakpoints的相关信息

  • (3)pending breakpoints:

    是指设置在程序开始调试后加载的动态库中的位置处的breakpoints
    a. set breakpoint pending auto: GDB缺省设置,询问用户是否要设置pending breakpoint
    b. set breakpoint pending on: GDB当前不能识别的breakpoint自动成为pending breakpoint
    c. set breakpoint pending off: GDB当前不能识别某个breakpoint时,直接报错
    d. show breakpoint pending: 查看GDB关于pending breakpoint的设置的行为(auto, on, off)

  • (4)breakpoints的删除:

    a. clear: 清除当前stack frame中下一条指令之后的所有breakpoints
    b. clear function & clear filename:function: 清除函数function入口处的breakpoints
    c. clear linenum & clear filename:linenum: 清除第linenum行处的breakpoints
    d. delete [breakpoints] [range…]: 删除由range指定的范围内的breakpoints,range范围是指breakpoint的序列号的范围

  • (5)breakpoints的禁用、启用:

    a. disable [breakpoints] [range…]: 禁用由range指定的范围内的breakpoints
    b. enable [breakpoints] [range…]: 启用由range指定的范围内的breakpoints
    c. enable [breakpoints] once [range…]: 只启用一次由range指定的范围内的breakpoints,等程序停下来后,自动设为禁用
    d. enable [breakpoints] delete [range…]: 启用range指定的范围内的breakpoints,等程序停下来后,这些breakpoints自动被删除

  • (6)条件breakpoints相关命令:

    a. 设置条件breakpoints可以通过break … if cond来设置,也可以通过condition bnum expression来设置,在这里首先要通过(1)中介绍的命令设置好breakpoints,然后用condition命令来指定某breakpoint的条件,该breakpoint由bnum指定,条件由expression指定
    b. condition bnum: 取消第bnum个breakpoint的条件
    c. ignore bnum count: 第bnum个breakpoint跳过count次后开始生效

  • (7)指定程序在某个breakpoint处停下来后执行一串命令:

    a. 格式:commands [bnum]
    … command-list …
    end
    b. 用途:指定程序在第bnum个breakpoint处停下来后,执行由command-list指定的命令串,如果没有指定bnum,则对最后一个breakpoint生效
    c. 取消命令列表: commands [bnum]
    end
    d. 例子:
    break foo if x>0
    commands
    silent
    printf “x is %d\n”,x
    continue
    end
    上面的例子含义:当x>0时,在foo函数处停下来,然后打印出x的值,然后继续运行程序


       2. Watchpoint: 它的作用是让程序在某个表达式的值发生变化的时候停止运行,达到‘监视’该表达式的目的

  • (1)设置watchpoints:

    a. watch expr: 设置写watchpoint,当应用程序写expr, 修改其值时,程序停止运行
    b. rwatch expr: 设置读watchpoint,当应用程序读表达式expr时,程序停止运行
    c. awatch expr: 设置读写watchpoint, 当应用程序读或者写表达式expr时,程序都会停止运行

  • (2)info watchpoints:

    查看当前调试的程序中设置的watchpoints相关信息

  • (3)watchpoints和breakpoints很相像,都有enable/disabe/delete等操作,使用方法也与breakpoints的类似


      3. Catchpoint: 的作用是让程序在发生某种事件的时候停止运行,比如C++中发生异常事件,加载动态库事件

  • (1)设置catchpoints:

    a. catch event: 当事件event发生的时候,程序停止运行,这里event的取值有:

    • 1)throw: C++抛出异常
      2)catch: C++捕捉到异常
      3)exec: exec被调用
      4)fork: fork被调用
      5)vfork: vfork被调用
      6)load: 加载动态库
      7)load libname: 加载名为libname的动态库
      8)unload: 卸载动态库
      9)unload libname: 卸载名为libname的动态库
      10)syscall [args]: 调用系统调用,args可以指定系统调用号,或者系统名称

    b. tcatch event: 设置只停一次的catchpoint,第一次生效后,该catchpoint被自动删除

  • (2)catchpoints和breakpoints很相像,都有enable/disabe/delete等操作,使用方法也与breakpoints的类似
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FME CAD转GDB是指在FME软件中将CAD(计算机辅助设计)文件格式转换为GDB(地理数据库)文件格式。 首先,FME软件是一种强大的数据转换和集成工具,可以处理各种不同的数据格式。CAD文件是一种常见的设计文件格式,用于创建和编辑图形和设计元素。而GDB文件是一种用于存储地理数据的文件格式,通常由地理信息系统(GIS)软件使用。 在FME中进行CAD转GDB的过程包含以下几个步骤: 1. 导入CAD文件:通过FME中的CAD阅读器,将CAD文件导入到FME的工作空间中。 2. 数据转换:使用FME中的转换器和处理器,将CAD数据转换为GDB数据模型。这可能涉及到属性映射、几何转换以及数据清洗等操作,以确保数据的准确性和一致性。 3. 转换参数设置:根据需要,可以通过FME的参数设置来调整转换过程中的各种参数,如坐标系统转换、属性规则、拓扑检查等。 4. 导出GDB文件:使用FME的GDB写入器,将转换后的数据保存为GDB文件格式。在此过程中,可以选择性地创建数据集、要素类和属性表等。 通过FME进行CAD转GDB的优势在于它的灵活性和功能强大性。FME提供了丰富的数据转换和处理功能,可以处理大量的数据和各种数据格式。此外,FME还支持自动化工作流和批量处理,使得大规模数据转换变得更加高效和便捷。 总之,使用FME软件进行CAD转GDB可以帮助用户将CAD文件转换为与GIS软件兼容的GDB文件,以便在地理信息系统中进行分析、查询和可视化等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值