• gdb零散学习心得。


    引用:

    记录学习心得。未来将统一整理。

    一、基础知识

    1:细节整理。

      1,启动GDB的前置要求。

        1)使用gcc/g++时,添加-g的指令。例如:g++ -g test.cpp -o test

        2)如没有添加编译信息,可以运行程序,后使用源代码关联。(不确定此方式的具体操作方法

      2,GDB中可以使用shell

        1)例:shell make <make-args> // rebuild source code.

        2)可以忽略shell前置:make <make-args> // rebuild source code.

      3,自动补全和查找功能。

        1)b 'buffer( M-? 可以用来搜索buffer函数的位置。

        2)可以使用TAB键进行自动补全。

      4,调试已运行程序。

        1)查找到进程ID,使用ID来调试

        2)使用gdb <program>来链接源代码,然后attach来链接到进程。

      5,暂停和继续。

        1)断点(breakpoint),观察点(watchpoint),捕捉点(catchpoint),信号(single),线程停止(thread stop)。

        2)继续(continue)

      6,if判断:break/watch支持if判断。catch不支持。

      7,GDB中可以查看三种变量值:

        1)全局变量。

        2)静态全局变量。

        3)局部变量。

    基本命令:

    1 启动GDB
      gdb <program>
      gdb <program> core    // add a core file.。
      gdb <program> <PID>   // if it is a server process. gdb will attach it automitically.
    2 运行参数。
      set args  // 指定运行时参数。
      show args  // 显示运行参数。
    3 运行环境
      path <dir>  // 设置程序运行路径
      show path
      set environment varname [=value]  // 设置环境变量,set env USER=zheng
      show environment [varname]
    4 工作目录
      cd <dir>  // 和shell指令一致。
      pwd
    5 设置程序的输入输出。
      info terminal
      tty <file>/<dev>
    6 断点方式:break
      ~ <function>  // 查看函数
      ~ <+/- offset>  // 从当前行偏移多少行。
      ~ <filename:linenum>  // 源文件 多少行。
      ~ <filename:function>  // 源文件:函数
      ~ <*address>  // 内存地址处停止。
      info ~[n]  // 查看第N个断点
    7 观察点:watch
      watch <expr>  // 表达式发生变化时停止。
      rwatch <expr>  // 表达式被读时停止。
      awatch <expr>  // 表达式被读/写时停止。
      info watchpoints  // 列出当前所设置的所有观察点。
    8 捕捉点:catch
      catch <event>
      // 1 参数event:throw抛出,catch捕捉,exec调用,fork,vfork,un/load 共享库。
    9 清除停止点:clear。
      ~
      ~ <function>
      ~ <linenum>
      ~ <filename:linenum>
      ~ <filename:function>
      delete [breakpoint][range]  // range: 例[2-5][1-3]
      disable/enable    // 使能和失能 停止点。
    10 自动化调试的一个例子(包括if)
      break foo if x>0
      commands
      printf "x is %d
    ", x
      continue
      end
    11 信号处理
      handle <single><keywords>
      no/stop
      no/print
      no/pass
      no/ignore
      info singles
      info handle
    12 线程断点
      break <linespec> thread <threadno>  // break的其他方式也可以使用。
    13 查看栈。
      backtrace(bt)
      bt [n]  // 打印n层信息
      bt [-n] // 打印底下n层信息
      frame(f) [n]  // 查看第N层
      up/down [n]  // 向 上/下 移动 N层。默认为1
      info frame  //  打印更详细的信息。
    14 显示源代码
      list <first>,<last>/<>  // 以参数确定显示位置。break可以使用的参数,list都可以使用
      set listsize <count>  // 设置显示行数。
      show listsize
    15 搜索(正则表达式)
      forward-search <regex>
      search <regex>
      reverse-search <regex>
    16 指定源文件路径。
      directory(dir) <dirname>
      shwo dir
    17 自动显示功能
      display <expr>
      display/<fmt> <expr>/<addr>
      undisplay ...
      delete display ...
    18 GDB环境变量
      set $foo = *obj_ptr
      show convenience
      例:
      set $i = 0;
      print array[$i++]->content
    19 修改程序中的变量:
      print x=4  // X时C/C++中变量
    20 调转,强制调用函数和强制返回。
      jump <linespec>/<address>
      call <expr>
      return <expr>/<>

     三、

  • 相关阅读:
    【java】一种自动生成数据库文档的方法
    sublime vintage mode 按住一个键(比如 j)不会重复的问题
    SQL Service服务更换帐户后无法启动的情况(Security 4625 Type 5)
    隐藏的计划任务运行,导致账户被锁的调查方法
    nodejs 热更新页面
    数组转tree arrToTree
    compose函数
    react 类组件的生命周期
    qiankun 微应用demo
    application 'xxx' died in status LOADING_SOURCE_CODE: [qiankun] You need to export lifecycle functions in xxx entry
  • 原文地址:https://www.cnblogs.com/zheng39562/p/4262370.html
Copyright © 2020-2023  润新知