• gdb调试


     编译 

    gcc -g test.c -o test

    启动 

    gdb test

    • 1:查看代码

    (gdb) list 行号
    查看指定行号附近的代码。
    (gdb) search KeyWord
    查找当前文件下一个KeyWord
    (gdb) reverse-search KeyWord
    查找当前文件上一个KeyWord

    • 2:执行程序

    (gdb) run 可执行程序名
    执行准备调试的程序
    同时可以
    使用(gdb) set args -x -y 来修改参数
    使用(gdb) show args 获取参数

    • 3:数据显示/修改

    (gdb) print p
    可以显示当前变量p的值
    同时可以
    print Fun( 1, 2 ) 可以输出函数返回值
    print *pMyPtr 可以输出复杂对象的值
    print $1 可以输出历史记录变量的值
    (gdb) whatis p
    可以显示当前变量p的类型(对自定义结构无效)
    (gdb) set variable 
    对指定变量赋值
    (gdb) ptype p
    获取一个变量p的类型。(对自定义结构有效)
    $pc 寄存器-程序计数器
    $fp 寄存器-当前堆栈帧指针
    $sp 寄存器-栈指针
    $ps 寄存器-处理器状态

    • 4:断点

    (gdb) break FileName.cpp:2202
    可以让程序在FileName.cpp的2202行设置断点
    (gdb) breal FileName.cpp:Myfun if pParam==100
    可以让程序在FileName.cpp文件中的MyFun函数处设置断点,该断点触发条件为 pParam==100 为真时才有效。
    通常断点后可以使用
    (gdb) backtrace 命令查看调用堆栈表。
    <上文中的break允许用一个字符b替代>
    我们可以查看当前程序项目的所有断点列表,命令为
    (gdb) info break
    删除全部断点,可使用下面命令
    (gdb) delete breakpoint
    删除一个断点,可以使用下面命令
    (gdb) delete breakpoint 1
    则删除了编号为1的断点。
    禁止使用断点 (gdb) disable breakpoint 1
    允许使用断点 (gdb) enable breakpoint 1
    删除指定行上的断点 (gdb) clean 2204
    则删除了2204行上的断点。

    • 5:流程控制

    (gdb) next
    不进入函数内部的单步执行,可用一个字符n替代。
    (gdb) step
    进入函数内部的单步执行,可用一个字符s替代。
    (gdb) finish
    若进入了某函数,则直接执行至退出该函数体并显示其返回值。(void不显示)。
    (gdb) call FunName( 167 )
    直接调用执行一个函数FunName,括号内加参数
    (gdb) continue
    当进入断点后,希望继续执行下去,则使用continue

    • 6:多线程

    (gdb) info threads
    获取当前程序的所有线程列表
    (gdb) thread ID
    切换指定ID的线程为当前调试线程
    (gdb) break FileName.cpp:1122 thread all
    在所有线程的FileName.cpp文件中1122行设置断点
    (gdb) thread apply ID1 ID2 ID3 command
    在ID1,ID2,ID3等一个或多个线程中执行GDB的command命令
    (gdb) thread apply all command
    在所有线程中执行GDB的command命令
    (gdb) set scheduler-locking off (或on或step)
    当off时,意味着所有线程正常执行。这个是默认状态
    当on时,意味着只有当前调试的线程正常执行,其他线程将中断。

    当step时,意味着只有当前调试的线程正常执行,但当next过一个函数后,所有线程正常执行。 

    • 查看信息
    info functions 查看函数信息
  • 相关阅读:
    深入理解javascript中的立即执行函数(function(){…})()
    多行文本溢出省略号显示
    JS学习思路
    canvas画圆
    软件需求与软件评估
    parawork功能使用说明
    ”0元中标的商业逻辑“ -- 如何更好防范项目风险(北京软件造价评估技术创新联盟:李培圣)
    parawork平台介绍
    基准化的软件绩效和成本度量
    jQuery对表格的操作及其他应用
  • 原文地址:https://www.cnblogs.com/ahuo/p/2570997.html
Copyright © 2020-2023  润新知