在代码的指定位置中断,使程序在此中断。javascript
案例:html
(gdb) break sc_smartcontract_handler.cpp:45 Breakpoint 4 at 0x424d42: file sc_smartcontract_handler.cpp, line 45.
对断点的相关操做java
捕捉点用来补捉程序运行时的一些事件。如:载入共享库(动态连接库)、C++的异常等。一般也是用来定位bug。编程
捕捉点的命令格式是:catch <event>,event能够是下面的内容数组
能够经过info watchpoints [n]命令查看当前观察点信息函数
最经常使用的查看变量的方法是post
(gdb) print {变量名}ui
(gdb) print argc $1 = 1
若是打印数组,因为默认的设置,可能打印的数组尾部部分没有显示,能够经过以下的命令设置打印数组的最大长度url
(gdb) set print elements 300spa
虽然list已经很方便了, 但仍是不尽人意. 若是可以在运行的同时显示代码就行了, 答案是确定的.
使用以下命令启动gdb: gdb -tui 项目名 或者在启动gdb后, 输入命令focus,如图:
在gdb中,和调试步进相关的命令主要有以下几条:
当程序被停住了,你须要作的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你能够用bt命令来查看当前的栈中的信息。
你能够定义你的断点是否在全部的线程上,或是在某个特定的线程。GDB很容易帮你完成这一工做。
linespec指定了断点设置在的源程序的行号。threadno指定了线程的ID,注意,这个ID是GDB分配的,你能够经过"info threads"命令来查看正在运行程序中的线程信息。若是你不指定thread <threadno>则表示你的断点设在全部线程上面。你还能够为某线程指定断点条件。如:
(gdb) break frik.c:13 thread 28 if bartab > lim
当你的程序被GDB停住时,全部的运行线程都会被停住。这方便你你查看运行程序的整体状况。而在你恢复程序运行时,全部的线程也会被恢复运行。那怕是主进程在被单步调试时。
查看当前程序栈的内容: x/10x $sp-->打印stack的前10个元素
查看当前程序栈的信息: info frame----list general info about the frame
查看当前程序栈的参数: info args---lists arguments to the function
查看当前程序栈的局部变量: info locals---list variables stored in the frame
查看当前寄存器的值:info registers(不包括浮点寄存器) info all-registers(包括浮点寄存器)
查看当前栈帧中的异常处理器:info catch(exception handlers)
参考博客