网站怎么排名,商城网站建设视频,自媒体是做什么的,男女插孔做暖暖的试看网站大全gdb简介
gdb是 GNU 开发的一个Unix/Linux下强大的程序调试工具。 使用 gdb 进行程序调试之前#xff0c;gcc编译选项加上 -g 选项来讲调试信息加到可执行文件里 一般来说#xff0c;GDB主要帮助你完成下面四个方面的功能#xff1a; 1、启动你的程序#xff0c;可以按照你…gdb简介
gdb是 GNU 开发的一个Unix/Linux下强大的程序调试工具。 使用 gdb 进行程序调试之前gcc编译选项加上 -g 选项来讲调试信息加到可执行文件里 一般来说GDB主要帮助你完成下面四个方面的功能 1、启动你的程序可以按照你自定义的要求随心所欲的运行程序。 2、可以让调试程序在你所指定的位置的断点处停止。 3、当程序停止时可以检查此时你的程序里所发生的事情。 最后动态的改变你程序的执行环境。
使用GDB
一般来说GDB主要调试的是C/C程序。要调试C/C程序首先在编译时我们需要把调试信息加到可执行文件里。使用编译器cc/gcc/g的-g参数可以做到这一点如 $ cc –g hello.c –o hello $ g -g hello.cpp –o hello 如果没有-g你将看不见程序的函数名变量名所代替的全是运行的内存地址。当你用-g把调试信息假如之后并成功编译目标代码以后可以用GDB调试它。
一.运行
run(简记为 r)其作用是运行程序当遇到断点后程序会在断点处停止运行等待用户输入下一步的命令。continue (简写c )继续执行到下一个断点处或运行结束next(简写 n)单步跟踪程序当遇到函数调用时也不进入此函数体此命令同 step 的主要区别是step 遇到用户自定义的函数将步进到函数里去运行而 next 则直接调用函数不会进入到函数体内。step(简写s)单步调试如果有函数调用则进入函数与命令n不同n是不进入调用的函数的until当你厌倦了在一个循环体内单步跟踪时这个命令可以运行程序直到退出循环体。until行号运行至某行不仅仅用来跳出循环finish运行程序直到当前函数完成返回并打印函数返回时的堆栈地址和返回值及参数值等信息。call函数(参数)调用程序里可见的函数并传递“参数”如call gdb_test(55)quit(简记为 q)退出gdb
二.设置断点
break n (简写b n)在第n行处设置断点可以直接对某个cpp设置断点 b xxx.cpp:36 36行设置断点b fn1 if ab条件断点设置break func(break缩写为b)在函数func()的入口处设置断点如break cb_buttondelete 断点号n删除第n个断点disable 断点号n暂停第n个断点enable 断点号n开启第n个断点clear 行号n清除第n行的断点info b (info breakpoints)显示当前程序的断点设置情况delete breakpoints清除所有断点
三.查看源代码
list (简记为 l )其作用就是列出程序的源代码默认每次显示10行。list 行号将显示当前文件以“行号”为核心的前后10行代码如list 12list 函数名将显示“函数名”所在函数的源代码如list mainlist不带参数将接着上一次 list 命令的输出下边的内容。
四.打印表达式
print 表达式(简记为 p)其“表达式”可以为任何当前正在被测试程序的有效表达式比如当前正在调试C语言的程序那么“表达式”可以是任何C语言的有效表达式包括数字变量甚至是函数调用。print a将显示整数 a 的值print a将把 a 里的值加1,并显示出来print name将显示字符串 name 的值print gdb_test(22)将以整数22作为参数调用 gdb_test() 函数print gdb_test(a)将以变量 a 作为参数调用 gdb_test() 函数display 表达式在单步运行时将非常有用使用display命令设置一个表达式后它将在每次单步进行指令后紧接着输出被设置的表达式及值。如 display awatch 表达式设置一个监视点一旦被监视的“表达式”的值改变gdb将强行终止正在被调试的程序。如 watch awhatis查询变量或函数info function查询函数扩展info locals显示当前堆栈页的所有变量
五.查询运行信息
where/bt当前运行的堆栈列表bt backtrace显示当前调用堆栈up/down改变堆栈显示的深度set args 参数指定运行时的参数show args查看设置好的参数info program来查看程序的是否在运行进程号被暂停的原因