zoukankan      html  css  js  c++  java
  • linux下如何用GDB调试c++程序

    [https://www.cnblogs.com/zhoug2020/p/7283169.html]

    进入到测试例子后开gdb
    history命令可以看到前面的cmd

    打印变量的值
    print/p

    打印变量的地址
    print&

    执行下一步
    n/next

    单步进入
    (gdb) step
    这样,也会执行一行代码,不过如果遇到函数的话就会进入函数的内部,再一行一行的执行。

    执行完当前函数返回到调用它的函数
    (gdb) finish
    这里,运行程序,直到当前函数运行完毕返回再停止。例如进入的单步执行如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish.

    设定断点
    break/b
    (gdb) break 46 if testsize100
    这里,如果testsize
    100就在46行处断点。

    检测表达式变化则停住
    (gdb) watch i != 10
    这里,i != 10这个表达式一旦变化,则停住。watch 为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序(也是一种断点)。

    在当前的文件中为某一函数(假设为func)处设定断点
    (gdb) break func

    给指定文件(fileName)的某个行(N)处设置断点
    (gdb) break fileName:N
    这里,给某文件中的函数设置断点是同理的

    显示当前gdb断点信息
    (gdb) info breakpoints
    这里,可以简写为info break.会显示当前所有的断点,断点号,断点位置等等。

    删除N号断点
    (gdb) delete N

    删除所有断点
    (gdb) delete

    显示当前调用函数堆栈中的函数
    (gdb) backtrace
    命令产生一张列表,包含着从最近的过程开始的所有有效过程和调用这些过程的参数。当然,这里也会显示出当前运行到了哪里(文件,行)。

    如果a是一个数组,10个元素,如果要显示则
    (gdb) print *a@10
    这样,会显示10个元素,无论a是double或者是int的都会正确地显示10个元素。

    修改运行时候的变量值
    (gdb) print x=4
    这里,x=4是C/C++的语法,意为把变量x值改为4,如果你当前调试的语言是Pascal,那么你可以使用Pascal的语法:x:=4。

    显示一个变量var的类型
    (gdb) whatis var

    以更详细的方式显示变量var的类型
    (gdb) ptype var
    这里,会打印出var的结构定义。

    在terminal调出代码界面
    (gdb)-
    调出当前运行的cc文件页面
    (gdb)up
    (gdb)do(down)
    在代码页面进入上一个/下一个函数
    关掉代码界面用 ctrl +x+a

    报错后显示卡住的当前函数及调用的子函数
    bt

    print和x的区别
    print i
    x &i

  • 相关阅读:
    activiti并行和串行区别
    SpringMVC 封装返回结果对象
    maven基础
    activiti表
    SpringBoot进阶
    SpringBoot基础
    javascript ES6模块化
    Vuejs搜索下拉框
    Vuejs2.0 + bootstrap demo
    maven settings.xml
  • 原文地址:https://www.cnblogs.com/How-Come/p/11050768.html
Copyright © 2011-2022 走看看