g++ -g -std=c++11 main.cpp gdb a.out 常用的指令如下: 01 运行指令: run(简写r): 运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步命令...continue(简写c) : 继续执行,到下一个断点停止(或运行结束) next(简写n) : 单步跟踪程序,当遇到函数调用时,也不进入此函数体;此命令同 step 的主要区别是,step 遇到用户自定义的函数...call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55) quit(简写q) : 退出gdb 02 设置断点: break n (简写b n):在第n行处设置断点...(可以带上代码路径和代码名称:b OAGUPDATE.cpp:578) b fn1 if a>b:条件断点设置 break func(break缩写为b):在函数func()的入口处设置断点,如:break...如:watch a whatis :查询变量或函数 info function:查询函数 扩展info locals:显示当前堆栈页的所有变量 06 查询运行信息 where/bt :当前运行的堆栈列表
断点操作(b) 首先,假如我们没有设置断点,我们输入r(run),此时程序则会从开始,一直运行到结束。假如我们设置了断点,程序则会运行到断点处进行停止。...打断点 r: 运行程序,无断点的话,直接运行到结束,有断点运行到最近的断点处停止(r不能在断点间移动,即运行到最近断点处后,再次输入r,则会重新再次运行) b(break) 行号 :在某一行设置断点...b(break) 函数名 :在该函数处设置断点 查看断点信息(info) 输入info b指令可以查看所有的断点详细信息 这里需要注意,断点的编号是逐渐累加的,也就是说,假如我们将该断点取消...,再次进行设置,那么断点的编号就变成了2,除非退出gdb,否则一直累加。...p 变量 :查看变量信息 display 变量 :常显示变量信息 undisplay 变量编号 :取消常显示 调用堆栈查看(bt) 我们知道,我们在进入main函数之前,main函数的函数栈帧是已经创建好了的
5 设置断点 5.1 简单断点 break 设置断点,可以简写为b b 10 设置断点,在源程序第10行 b func 设置断点,在func函数入口处 5.2 多文件设置断点... 在进入指定函数时停住: C++中可以使用class::function或function(type,type)格式来指定函数名。...设置一个条件断点 b test.c:8 if intValue == 5 7 维护停止点 delete [range...]...删除指定的断点,如果不指定断点号,则表示删除所有的断点。range 表示断点号的范围(如:3-7)。其简写命令为d。 ...简写命令是ena. 8 调试代码 run 运行程序,可简写为r next 单步跟踪,函数调用当作一条简单语句执行,可简写为n step 单步跟踪,函数调进入被调用函数体内,
简介 GDB是GCC的调试工具。其功能如下: 启动程序,使程序按自定义形式运行; 使程序停止指定断点位置; 程序停止后,检查程序执行中的相应情况; 动态改变程序执行环境。...如果之前没有设过断点,则执行完整个程序;如果设过断点,则程序停在第一个断点处。 c:继续执行被调试程序,直到到下一个断点,或程序整体结束。...b:设置断点,包括以下几种: s:执行一行源程序的代码,如果此行代码中存在函数调用,则进入该函数。 n:执行一行源程序的代码,此代码中的函数调用执行完成。...clear:删除一个断点,这个命令需指定代行或者函数名。 set:设置变量的值。...Ctrl + c:在当前位置停止执行正在执行的程序,断点在当前行。 ptype:显示变量的类型 return:强制从当前函数返回。 whatis:显示变量的值和类型。
为何要设置断点 在介绍之前,我们首先需要了解,为什么需要设置断点。...而实际上可以很方便地用来改变断点产生的条件,例如,之前设置b==0时产生该断点,那么使用condition可以修改断点产生的条件。...rwatch和awatch同样可以设置观察点前者是当变量值被读时断住,后者是被读或者被改写时断住。 禁用或启动断点 有些断点暂时不想使用,但又不想删除,可以暂时禁用或启用。...小结 本节主要介绍了一些简单情况的单步调试方法或常见命令使用,但这些已经够用了,毕竟大部分程序的执行或停止都在我们的掌控之中了。...文本将会介绍如何在GDB调试模式下查看源码或对源码进行编辑。
在gdb中,你可以通过设置断点(break point)来控制程序运行的进度,并查看断点时的变量和函数调用状况,从而发现可能的问题。在许多IDE中,gdb拥有图形化界面。...我们使用gdb来查看程序运行的细节) 程序的一个为test.c,其中有主程序main()。mean.c程序中定义了mean()函数,并在main()中调用。...进入gdb,准备调试程序: $gdb test 进入gdb的互动命令行。...显示某个函数,比如: (gdb) list mean 设置断点 我们可以运行程序: (gdb) run 程序正常结束。 运行程序并没有什么有趣的地方。gdb的主要功能在于能让程序在中途暂停。...我们可以在程序的某一行设置断点,比如: (gdb) break 16 将在test.c的第16行设置断点。 你可以查看自己设置的断点: (gdb) info break 每个断点有一个识别序号。
为何要设置断点 在介绍之前,我们首先需要了解,为什么需要设置断点。...rwatch和awatch同样可以设置观察点前者是当变量值被读时断住,后者是被读或者被改写时断住。 禁用或启动断点 有些断点暂时不想使用,但又不想删除,可以暂时禁用或启用。...准备工作 在查看变量之前,需要先启动调试并设置断点,该部分内容可参考《GDB调试指南-启动调试》和《GDB调试指南-断点设置》。后面的内容都基于在某个位置已经断住。...总结 本文主要介绍了一些简单情况的单步调试方法或常见命令使用,但这些已经够用了,毕竟大部分程序的执行或停止都在我们的掌控之中了。...文本将会介绍如何在GDB调试模式下查看源码或对源码进行编辑。
设置观察点 watch expr 值变化时,停止程序 rwatch expr 值被读时,停止程序 awatch expr 值被读或被写时...,停止程序 info watchpoints 查看当前观察点信息 3.反汇编 set disassembly-flavor intel # 设置反汇编格式 disassemble可以反汇编当前函数或者指定的函数...,单独用disassemble命令是反汇编当前函数,如果disassemble命令后面跟函数名或地址则反汇编指定的函数。...恢复运行程序和单步调试程序 continue,继续运行程序 next 单步跟踪,遇到函数不进入函数 step 单步跟踪,遇到函数会进入该函数 finish 直到函数运行完成...(gdb) set follow-fork-mode child 临时进入Shell执行命令,Exit返回。 (gdb) shell 调试时直接调用函数。
,相关命令为: break [函数名,行数或者指令地址] [condi] 在指定地方加上断点 例: (gdb) set $counter = 0 (gdb) break 26 if ++$counter...== 99 在第26行设置断点,每次触发断点的时候执行判断条件,仅在判断条件为真的时候使程序在断点处停止。...rbreak RE: 在所有符合正则表达式RE的函数上加上断点 2).watchpoints: 也称为data breakpoints,在表达式值变化时停止执行的断点。...3).catchpoints: 程序事件断点,如c++异常 catch event :event可以是 throw或catch事件 查看断点: info breakpoint[n] 打印所有...同上,但是不进入函数体 *finish:*往下运行直至当前栈帧(下面解释)中的函数返回 *continue:*往下运行直至遇到断点 打印信息: print/x data: 以x(十六进制)格式打印数据
(11)rbreak 该命令用于给函数加断点, rbreak regex 给所有满足表达式 REGEX 的函数加断点,设置的断点和 break 设置的断点一样。...(14)rwatch 只要程序中出现读取目标变量或表达式的值的操作,程序就会停止运行。(读) (15)awatch 只要程序中出现读取目标变量或表达式的值或者改变值的操作,程序就会停止运行。...catch 捕捉到的异常; ② load 命令或 unload 命令,在动态库加载或卸载时程序停止执行; ③ fork、vfork、exec 系统调用时,程序停止运行; 举个例子测试一下,先准备一个C...⑦ 查看当前函数参数的值 ⑧ 更多用法,请查看帮助手册 (19)del(delete)删除 如果我们使用 quit 退出调试,然后再次启动 gdb 的话,之前设置的所有类型的断点(包括观察点...(20)clear 删除断点,后面加行号或函数名,(delete是按照断点号删除) (gdb)clear func 删除函数 func 处的断点 (gdb)clear num 删除第 num 行的断点
如果目标执行文件要求出入参数(如 argv[] 接收参数),则可以通过三种方式指定参数: 在启动 gdb 时,gdb --args text_file.exe 在进入gdb 之后,运行 set args...查看源代码 list(l):查看最近十行源码 list fun:查看fun函数源代码 list file:fun:查看flie文件中的fun函数源代码 设置断点与观察断点 break 行号/fun设置断点...如: test.c:12表示文件为test.c中的第12行设置一个断点。 threadno 线程的ID。是GDB分配的,通过输入info threads来查看正在运行中程序的线程信息。 if ......不同之处在于,当 step 命令所执行的代码行中包含函数时,会进入该函数内部,并在函数第一行代码处停止执行。...设置断点 b continue Continue [开始,结束] 继续运行 c info Info 变量名 列出信息 i next Next 下一行 n step Step 进入函数(步入) S display
✨【链接(生成可执行文件或库文件)】: 在成功编译之后,就进入了链接阶段。链接阶段将目标代码与程序所需的库(如C标准库libc.so.6)合并,生成最终的可执行文件。...在Debug模式下,编译器会生成包含大量调试信息的二进制文件,这些调试信息包括源代码的行号、变量名、函数名等,这些信息对于使用调试器(如GDB)来跟踪程序执行、检查变量值、设置断点等非常有用。...例如,在程序第10行设置断点: (gdb) b 10 或者,如果知道函数名,也可以直接在函数处设置断点: (gdb) break main 查看断点 使用info breakpoints命令这是查看断点信息的最直接方式...在GDB命令行中输入info breakpoints(或简写为info b),GDB会列出所有已设置的断点信息,包括断点的编号、类型、是否启用、地址以及断点所在的源代码位置等。...list/l 函数名:列出某个函数的源代码。 退出GDB 使用quit(简写为q)命令退出GDB。 【GDB的高级技巧】 条件断点 可以设置仅在特定条件下触发的断点。
经过之前的学习,我们已经能够在Linux上编写代码、运行代码和通过git管理代码了。但是如何在Linux上调式代码我们还不知道,所以今天要学的是Linux调试器——gdb 的基本使用。 1....b(break point)+ 行号/函数名:就可以把指定行或指定函数(打在函数内第一条语句处)设置为断点 如果是多文件的话,我们还可以指定文件去给对应的函数或指定行打断点 b 文件名:行号/...函数名 (其实查看那里也可以这样来指定) 那设置好我们要查看断点,怎么查看呢?...那在gdb中与之对应的操作是什么呢? 首先逐过程: 开始调式,到16行的断点就停止了,对应的是一个函数调用。 如果我想逐过程,直接走到下一句代码呢?...s(step):逐语句(遇到函数会进入) 2.5 查看函数调用堆栈 vs上我们调用一些函数的时候可以通过函数调用堆栈查看它们的调用关系: 那在gdb上如何查看?
gdb的基本调试命令 r(run) : 开始运行程序; c(continue) : 继续运行一直到断点停止 b(break) : 设置程序断点;...p(print) : 打印出变量值;如 p var,会把var变量的值输出 s(step) : 单步跟踪,会进入函数内部 n(next) :...单步跟踪,不进入函数 finish : 跳出函数调试,并打印返回时的信息 u(until) : 跳出循环体 q(quit) :...,后面接断点号 gdb -tui main或者在启动gdb后,输入命令focus或layout: 能够在运行时间的同时显示代码 实验环境搭建 下载内核源代码编译内核 cd ~/LinuxKernel/...# 断点的设置可以在target remote之前,也可以在之后 运行启动 ?
停止:进程已经停止执行,可能是由于程序的完成、异常终止或其他错误导致。...例如:break main单步执行:一旦设置了断点,可以使用step或s命令来单步执行程序。这将使程序执行到下一行,并进入函数调用(如果有的话)。...step如果只想单步执行当前行而不进入函数调用,可以使用next或n命令:next(3)运行到下一个断点:使用continue或c命令可以让程序继续执行,直到下一个断点处。...info breakpoints:查看当前设置的断点信息。step:逐行执行程序,并进入函数内部。next:逐行执行程序,但不进入函数内部。finish:执行完当前函数并返回到调用该函数的位置。...使用gdb启动程序并设置断点,以便在关键代码段中断程序。运行程序并使用gdb的命令分析性能问题,如逐行执行、查看函数列表等。监测程序状态使用gdb的info命令查看变量值、线程信息等。
&ar); } } 只要进入了用户设置的钩子函数,那么我们就可以在这个函数中为所欲为了。...但是,调试操作又需要通过TCP连接与上位机进行通信协议的交互,比如:设置断点、查看变量的值、查看函数信息等等。...当虚拟机执行一条被调试程序的指令码之后,调用钩子函数,在钩子函数中通过coroutine.resume让协程运行,主程序停止。...(2)设置断点 ldb向ldbserver发送设置断点的指令:setb test.lua 10,即:在test.lua文件的第10行设置一个断点,ldbserver接收到指令后,在内存中记录这个信息(文件名...,查找这个line是否被用户设置为断点,如果是那么就通过coroutine.resume让主程序暂停,让协程中的ldbserver执行。
简写 c): 继续执行程序,直到下一个断点或者结束; next(简写 n ):单步执行程序,但是遇到函数时会直接跳过函数,不进入函数; step(简写 s) :单步执行程序,但是遇到函数会进入函数;...r ,其作用是运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。...continue (简写c ):继续执行,到下一个断点处(或运行结束) next:(简写 n),单步跟踪程序,当遇到函数调用时,也不进入此函数体;此命令同 step 的主要区别是,step 遇到用户自定义的函数...call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55) quit:简记为 q ,退出gdb 2、设置断点 break n (简写b n):在第n行处设置断点...如: watch a whatis :查询变量或函数 info function: 查询函数 扩展info locals: 显示当前堆栈页的所有变量 5、查看运行信息 where/bt :当前运行的堆栈列表
设置断点: 用户可以在程序的特定位置(如函数或行号)设置断点,程序运行到断点时会暂停,方便检查当前状态。 单步执行: 支持逐行或逐指令执行代码,便于分析程序逻辑和排查问题。...注意:如果在调试过程中退出,那么再次进入调试环境,上一次的调试信息会丢失,即之前设置的断点都没了。 此时设置完断点之后我们再次运行程序(使用 r命令 ),它就会直接运行至第一个断点处并且停止运行。...n(next):逐过程,单条执行,当有函数调用时,不会进入函数内部。 我们接着上面的代码走。 s(step):逐语句,进入函数调用。 p 变量:打印变量的值。...c 恢复程序运行直到下一个断点 continue step s 单步执行(进入函数调用) step next n 单步执行(跳过函数调用) next finish 无 运行到当前函数返回 finish...until 无 运行到指定行或跳出循环 until 45 quit q 退出 GDB quit 断点操作 break b 设置断点(支持行号、函数、文件等) break main break 25
GDB的功能很强大,开发者可以在执行时修改函数变量的值以及程序的执行顺序,还可以在程序执行期间查看函数的调用过程、堆栈数据等,也可以利用GDB对代码进行断点调试。.../demo GDB调试结果: 注:加一个“-tui"参数可以进入GDB的可视化界面,可以很直观地看到自己标注的断点 "gdb ....clear 删除执行到达时的断点 delete 删除所有断点 disable 禁用断点 enable 启用断点 run(r) 一直执行,直到断点或结束 step(s) 执行下一行代码,遇到函数直接进入...next(n) 执行下一行代码,遇到函数不会进入 continue(c) 继续执行直到下一个断点 jump 直接跳到指定位置继续执行 until 和next一样单步执行,常用于循环体中 disass....进程和线程调试相关的指令 命令全称(命令缩写) 具体含义 backtrace(bt) 打印运行到当前位置的堆栈信息 frame 在函数停止的地方,显示当前堆栈 up 向前移动堆栈地址 down 向后移动堆栈地址
help命令只是例出gdb的命令种类,如果要看种类中的命令,可以使用help 命令,如:help breakpoints,查看设置断点的所有命令。...示例一:在进入函数func时,设置一个断点。...示例四:调试C++的程序时,有可以函数名一样。如: (gdb) b 'bubble( M-? ...在gdb中,我们可以有以下几种暂停方式:断点(BreakPoint)、观察点(WatchPoint)、捕捉点(CatchPoint)、信号(Signals)、线程停止(Thread Stops)。...正面有几点设置断点的方法: break 在进入指定函数时停住。
领取专属 10元无门槛券
手把手带您无忧上云