常用GDB调试方法
gdb 调试方法
gdb 调试方法
GDB 是一款功能强大的调试工具,它可以用于调试C、C++、Python 等编程语言的代码。
下面是一些常用的 GDB 调试方法:
1. 设置断点:可以使用`break` 命令在代码的某一行设置断点,例如 `break main.c:10` 表示在 main.c 文件的第 10 行设置断点。
2. 运行程序:使用 `run` 命令来运行程序,例如 `run arg1 arg2` 表示运行程序并传入参数 arg1 和 arg2。
3. 单步执行:可以使用 `step` 命令以单步方式执行代码,进入
函数时会逐行执行其中的代码。
4. 查看变量值:使用 `print` 命令可以查看变量的值,例如
`print x` 表示打印变量 x 的值。
5. 修改变量值:使用 `set` 命令可以修改变量的值,例如 `set x = 10` 表示将变量 x 的值设置为 10。
6. 查看函数调用栈:使用 `backtrace` 或 `bt` 命令可以打印函数调用栈。
7. 继续执行:使用 `continue` 命令可以继续执行程序直到下一
个断点或程序结束。
8. 异常处理:可以使用 `catch` 命令来设置异常断点,例如
`catch throw` 表示在抛出异常时停止程序执行。
9. 调试多线程程序:GDB 支持调试多线程程序,可以使用
`thread` 命令来操作线程,例如 `thread 2` 表示切换到线程 2 进行调试。
以上是一些常用的 GDB 调试方法,通过掌握这些方法可以更好地使用 GDB 进行程序的调试。
同时,GDB 还提供了更多强大的调试功能,可以根据具体需求来进一步探索和学习。
gdb调试技巧
gdb调试技巧GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。
它是一种强大的命令行调试工具。
一般来说,调试器的功能:能够运行程序,设置所有能影响程序运行的参数;能够让程序在指定条件下停止运行;能够在程序停止时检查所有参数的情况;能够根据指定条件改变程序的运行。
gdb调试源代码流程:1)进入GDB #gdb test只需输入GDB和要调试的可执行文件即可,在GDB的启动画面中指出了GDB的版本号、遵循的许可等信息,接下来就进入了由"(gdb)"开头的命令行界面了;2)查看文件(gdb) l在GDB中键入"l"(list)就可以查看程序的源码了,GDB列出的源代码中明确地给出了对应的行号,方便代码的定位;3)设置断点(gdb) b 6只需在"b"(break)后加入对应的行号即可,在GDB中利用行号设置断点是指代码运行到对应行之前暂停;设置断点可以使程序执行到某个位置时暂停,程序员在该位置处可以方便地查看变量的值、堆栈情况等;一般情况下,源代码中大家行号与用户书写程序的行号是一致的,但有时由于用户的某些编译选项会导致行号不一致的情况,因此,一定要查看在GDB中的行号;4)查看断点处情况(gdb) info b可以键入"info b"来查看断点处情况,可以设置多个断点;5)运行代码(gdb) rGDB默认从首行开始运行代码,键入"r"(run)即可;程序运行到断点处停止。
6)看变量值(gdb) p n在程序暂停之后,程序员可以查看断点处的相关变量值,在GDB 中只需键入"p 变量名"(print)即可;GDB在显示变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引用标记,以后若想再次引用此变量,就可以直接写作"$N",而无需写冗长的变量名;7)观察变量(gdb) watch n在某一循环处,往往希望能够观察一个变量的变化情况,这时就可以键入命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;8)单步运行(gdb) n单步运行是指一次只运行一条语句,这样可以方便查看程序运行的结果,在此处只需键入"n"(next)即可;随着程序的单步运行,当变量n的值发生变化时,GDB就会自动显示出n的变化情况。
gdb调试方法
gdb调试方法
GDB是一款功能强大的调试器,可以帮助开发人员快速定位和解决程序中的错误。
以下是GDB调试的一些常用方法:
1. 启动程序:在终端中输入gdb programname,其中programname 是要调试的程序的名称。
2. 设置断点:使用break命令设置断点,例如break functionname,在函数functionname处设置断点。
3. 运行程序:使用run命令运行程序,程序会在设置的断点处停止执行。
4. 单步执行:使用单步命令step或next执行程序,step命令会进入函数内部,next命令则不会。
5. 查看变量值:使用print命令查看变量的值,例如print varname。
6. 修改变量值:使用set命令修改变量的值,例如set varname=newvalue。
7. 查看函数调用栈:使用backtrace命令查看函数调用栈,可以确定程序执行到哪个函数。
8. 调试多线程程序:可以使用thread命令查看和切换线程,使用info threads命令查看线程的状态。
9. 导出调试信息:使用gdb -batch -ex 'info functions' programname > function_list.txt命令将程序的函数列表导出到文件中。
以上是GDB调试的一些常用方法,熟练掌握这些方法可以帮助开发人员快速排除程序中的错误。
gdb调试案例
gdb调试案例以GDB调试案例为题,我将列举以下10个案例,每个案例将描述GDB的使用场景、调试目标、具体步骤和调试结果,以帮助读者更好地理解和掌握GDB调试工具。
案例一:查看程序崩溃的原因场景:当程序崩溃时,我们需要找出崩溃的原因,以便修复程序中的bug。
目标:在程序崩溃时,使用GDB查看崩溃的原因。
步骤:1. 使用-g选项编译程序,以包含调试信息。
2. 执行gdb命令,加载可执行文件。
3. 在GDB中运行程序,当程序崩溃时,GDB会自动停止程序的执行。
4. 使用backtrace命令查看调用栈,找出导致崩溃的函数和行号。
5. 使用print命令查看变量的值,以便进一步分析崩溃原因。
结果:通过查看调用栈和变量的值,我们可以定位到导致程序崩溃的具体代码行,并进行修复。
案例二:设置断点并跟踪程序执行场景:当程序运行过程中出现问题,我们需要跟踪程序的执行过程,以便找出问题所在。
目标:使用GDB设置断点并跟踪程序执行。
步骤:1. 使用-g选项编译程序,以包含调试信息。
2. 执行gdb命令,加载可执行文件。
3. 使用break命令设置断点,可以选择在特定函数或行号上设置断点。
4. 运行程序,GDB会在断点处停止程序的执行。
5. 使用step命令逐行执行程序,并查看变量的值。
6. 使用continue命令继续程序的执行,直到下一个断点或程序结束。
结果:通过设置断点和逐行执行程序,我们可以跟踪程序的执行过程,找出问题所在。
案例三:查看内存信息场景:当程序出现内存相关的问题时,我们需要查看程序的内存使用情况,以便分析问题所在。
目标:使用GDB查看程序的内存信息。
步骤:1. 使用-g选项编译程序,以包含调试信息。
2. 执行gdb命令,加载可执行文件。
3. 运行程序,GDB会自动停止程序的执行。
4. 使用info breakpoints命令查看已设置的断点。
5. 使用info registers命令查看寄存器的值。
调试器GDB的基本使用方法
调试器GDB的基本使⽤⽅法GDB调试的三种⽅式:1. ⽬标板直接使⽤GDB进⾏调试。
2. ⽬标板使⽤gdbserver,主机使⽤xxx-linux-gdb作为客户端。
3. ⽬标板使⽤ulimit -c unlimited,⽣成core⽂件;然后主机使⽤xxx-linux-gdb ./test ./core。
Brendan Gregg关于gdb介绍《gdb Debugging Full Example (Tutorial): ncurses》。
1. gdb调试构造测试程序如下main.c和sum.c如下:main.c:#include <stdio.h> #include <stdlib.h> extern int sum(int value); struct inout { int value; int result; }; int main(int argc, char * argv[]) { struct inout * io = (struct inout * ) malloc(sizeof(struct inout)); if (NULL == io) { printf('Malloc failed.\n'); return -1; } if (argc != 2) { printf('Wrong para!\n'); return -1; } io -> value = *argv[1] - '0'; io -> result = sum(io -> value); printf('Your enter: %d, result:%d\n', io -> value, io -> result); return0; }sum.c:int sum(int value) { int result = 0; int i = 0; for (i = 0; i < value; i++) result += (i + 1); return result; }然后gcc main.c sum.c -o main -g, 得到main可执⾏⽂件.下⾯介绍了gdb⼤部分功能,1.1 设置断点以及1.3显⽰栈帧是常⽤功能;调试过程中可以需要1.6 单步执⾏,并且1.4 显⽰变量、1.5显⽰寄存器、1.8 监视点、1.9 改变变量的值。
100个gdb小技巧
100个gdb小技巧(最新版4篇)目录(篇1)1.引言2.gdb基本用法3.gdb高级用法4.gdb在调试中的应用5.结论正文(篇1)gdb是一个强大的调试工具,对于程序员来说,熟练掌握gdb的使用技巧是非常重要的。
以下是100个gdb小技巧,帮助您更好地利用gdb进行调试。
1.在gdb启动时,可以指定要调试的可执行文件的路径。
例如,如果可执行文件名为“myprogram”,则可以使用以下命令启动gdb:gdb/path/to/myprogram2.在gdb中,可以使用“run”命令来运行程序,并使用“break”命令在指定的行上设置断点。
例如,如果要在第10行设置断点,则可以使用以下命令:break 103.在gdb中,可以使用“next”命令来逐行执行程序,使用“step”命令来进入函数调用,使用“continue”命令来继续运行程序。
例如,如果要从第10行开始逐行执行程序,则可以使用以下命令:next或step 104.在gdb中,可以使用“delete”命令来删除已经设置的断点。
例如,如果要删除第10行的断点,则可以使用以下命令:delete 105.在gdb中,可以使用“info”命令来查看当前的状态信息,例如变量值、调用栈等。
例如,如果要查看变量x的值,则可以使用以下命令:info variables x6.在gdb中,可以使用“print”命令来查看变量的值。
例如,如果要查看变量x的值,则可以使用以下命令:print x7.在gdb中,可以使用“display”命令来显示变量的值。
例如,如果要显示变量x的值并在程序运行时更新显示结果,则可以使用以下命令:display x8.在gdb中,可以使用“watch”命令来监视一个变量的值的变化。
例如,如果要监视变量x的变化并打印出每次的变化结果,则可以使用以下命令:watch x9.在gdb中,可以使用“set”命令来设置程序的运行环境。
gdb 使用方法
gdb 使用方法GDB是GNUDebugger的缩写,是一种强大的调试工具,可以用于C、C++、汇编等语言的程序调试。
在本文中,我们将介绍 GDB 的一些基本使用方法。
1. 编译程序在使用 GDB 调试程序之前,首先需要编译程序,以便在调试时能够获取程序的符号表信息。
在编译时,需要使用 -g 选项生成调试信息。
例如:```shell$ gcc -g -o my_program my_program.c```2. 启动 GDB启动 GDB 的方法很简单,只需要在命令行中输入 gdb 命令,后跟要调试的程序的名称。
例如:```shell$ gdb my_program```3. 设置断点在程序中设置断点可以帮助我们在程序执行到特定位置时停下来,方便我们进行调试。
在 GDB 中,可以使用 break 命令设置断点。
例如:```shell(gdb) break main```上面的命令会在程序执行到 main 函数时设置一个断点。
4. 运行程序在设置好断点之后,可以使用 run 命令运行程序。
例如:```shell(gdb) run```5. 调试程序程序运行过程中,可以使用 GDB 提供的一些命令进行调试。
例如:- step:单步执行程序,进入函数内部。
- next:单步执行程序,不进入函数内部。
- print:打印变量的值。
- watch:监视一个变量,当变量的值发生变化时停下来。
- continue:继续执行程序直到遇到下一个断点或程序结束。
6. 查看程序状态在调试程序时,可以使用 GDB 提供的一些命令查看程序的状态。
例如:- info breakpoints:查看当前设置的断点。
- info locals:查看当前函数的局部变量。
- info registers:查看当前 CPU 寄存器的值。
- info threads:查看当前程序中的线程信息。
7. 退出 GDB在调试完成后,可以使用 quit 命令退出 GDB。
经典的GDB调试命令,包括查看变量,查看内存
经典的GDB调试命令,包括查看变量,查看内存经典的GDB调试命令,包括查看变量,查看内存在你调试程序时,当程序被停住时,你可以使⽤print命令(简写命令为p),或是同义命令inspect来查看当前程序的运⾏数据。
print命令的格式是:printprint /是表达式,是你所调试的程序的语⾔的表达式(GDB可以调试多种编程语⾔),是输出的格式,⽐如,如果要把表达式按16进制的格式输出,那么就是/x。
⼀、表达式print和许多GDB的命令⼀样,可以接受⼀个表达式,GDB会根据当前的程序运⾏的数据来计算这个表达式,既然是表达式,那么就可以是当前程序运⾏中的const常量、变量、函数等内容。
可惜的是GDB不能使⽤你在程序中所定义的宏。
表达式的语法应该是当前所调试的语⾔的语法,由于C/C++是⼀种⼤众型的语⾔,所以,本⽂中的例⼦都是关于C/C++的。
(⽽关于⽤GDB 调试其它语⾔的章节,我将在后⾯介绍)在表达式中,有⼏种GDB所⽀持的操作符,它们可以⽤在任何⼀种语⾔中。
@是⼀个和数组有关的操作符,在后⾯会有更详细的说明。
::指定⼀个在⽂件或是⼀个函数中的变量。
{}表⽰⼀个指向内存地址的类型为type的⼀个对象。
⼆、程序变量在GDB中,你可以随时查看以下三种变量的值:1. 全局变量(所有⽂件可见的)2. 静态全局变量(当前⽂件可见的)3. 局部变量(当前Scope可见的)如果你的局部变量和全局变量发⽣冲突(也就是重名),⼀般情况下是局部变量会隐藏全局变量,也就是说,如果⼀个全局变量和⼀个函数中的局部变量同名时,如果当前停⽌点在函数中,⽤print显⽰出的变量的值会是函数中的局部变量的值。
如果此时你想查看全局变量的值时,你可以使⽤::操作符:file::variablefunction::variable可以通过这种形式指定你所想查看的变量,是哪个⽂件中的或是哪个函数中的。
例如,查看⽂件f2.c中的全局变量x的值:gdb) p 'f2.c'::x当然,::操作符会和C++中的发⽣冲突,GDB能⾃动识别::是否C++的操作符,所以你不必担⼼在调试C++程序时会出现异常。
gdb调试——精选推荐
gdb调试---恢复内容开始---1.gdb调试的是可执⾏⽂件,在gcc编译时加⼊ -g ,告诉gcc在编译时加⼊调试信息,这样gdb才能调试这个被编译的⽂件 gcc -g tesst.c -o test2. 命令格式:gdb 程序⽂件名 eg:gdb test file testgdb -q test 启动时不输出版权说明quit 退出gdb,结束调试list:查看程序源代码,显⽰10⾏list 5,10:显⽰5到10⾏的代码list test.c:5, 10:显⽰源⽂件5到10⾏的代码,在调试多个⽂件时使⽤list get_sum: 显⽰get_sum函数周围的代码list test,c get_sum: 显⽰源⽂件get_sum函数周围的代码,在调试多个⽂件时使⽤reverse-search 字符串⽤来从当前⾏向前查找第⼀个匹配的字符串run 程序开始执⾏help list/all 查看帮助信息break 设置断点break 7 在第七⾏设置断点break get_sum 以函数名设置断点break ⾏号或者函数名 if 条件以条件表达式设置断点watch 条件表达式条件表达式发⽣改变时程序就会停下来awatch 和watch类似,在表达式值发⽣改变或者表达式值被读取时,暂停next 继续执⾏下⼀条语句,会把函数当作⼀条语句执⾏step 继续执⾏下⼀条语句,会跟踪进⼊函数,⼀次⼀条的执⾏函数内的代码nexti 单步执⾏⼀条机器指令通常⼀条语句由多条机器指令构成,不进函数stepi 单步执⾏⼀条机器指令,跟踪进⼊函数info breakpoints 查看当前设置的中断点Num 断点编号Type 类型breakpoints 说明是中断Disp 指⽰中断点在⽣效⼀次后是否就失去作⽤,是为dis,不是为keepEnb 表明当前中断点是否有效,是为y,不是为nAddress 表⽰中断所处的内存地址What 列出中孤单发⽣在哪个函数的第⼏⾏stop only if result == 5050 表明这是⼀个条件中断disable 断点编号是使某个断点失效enable 断点编号使某个断点恢复clear 删除程序中所有的断点clear ⾏号:删除此⾏的断点clear 函数名删除该函数的断点clear 断点编号删除指定编号的断点,若要⼀次删除多个断点,各个断点编号以空格隔开print ⼀般⽤来打印变量或表达式的值print 变量或表达式打印变量或表达式当前的值print 变量 = 值对变量进⾏赋值print 表达式@n 打印以表达式值开始的n个数whatis 显⽰某个变量或表达式的数据类型set 给变量赋值set variable 变量 =值continue 让程序继续执⾏下去kill ⽤于结束当前程序的调试---恢复内容结束---1.gdb调试的是可执⾏⽂件,在gcc编译时加⼊ -g ,告诉gcc在编译时加⼊调试信息,这样gdb才能调试这个被编译的⽂件 gcc -g tesst.c -o test2. 命令格式:gdb 程序⽂件名 eg:gdb test file testgdb -q test 启动时不输出版权说明quit 退出gdb,结束调试list:查看程序源代码,显⽰10⾏list 5,10:显⽰5到10⾏的代码list test.c:5, 10:显⽰源⽂件5到10⾏的代码,在调试多个⽂件时使⽤list get_sum: 显⽰get_sum函数周围的代码list test,c get_sum: 显⽰源⽂件get_sum函数周围的代码,在调试多个⽂件时使⽤reverse-search 字符串⽤来从当前⾏向前查找第⼀个匹配的字符串run 程序开始执⾏help list/all 查看帮助信息break 设置断点break 7 在第七⾏设置断点break get_sum 以函数名设置断点break ⾏号或者函数名 if 条件以条件表达式设置断点watch 条件表达式条件表达式发⽣改变时程序就会停下来awatch 和watch类似,在表达式值发⽣改变或者表达式值被读取时,暂停next 继续执⾏下⼀条语句,会把函数当作⼀条语句执⾏step 继续执⾏下⼀条语句,会跟踪进⼊函数,⼀次⼀条的执⾏函数内的代码nexti 单步执⾏⼀条机器指令通常⼀条语句由多条机器指令构成,不进函数stepi 单步执⾏⼀条机器指令,跟踪进⼊函数info breakpoints 查看当前设置的中断点Num 断点编号Type 类型breakpoints 说明是中断Disp 指⽰中断点在⽣效⼀次后是否就失去作⽤,是为dis,不是为keepEnb 表明当前中断点是否有效,是为y,不是为nAddress 表⽰中断所处的内存地址What 列出中孤单发⽣在哪个函数的第⼏⾏stop only if result == 5050 表明这是⼀个条件中断disable 断点编号是使某个断点失效enable 断点编号使某个断点恢复clear 删除程序中所有的断点clear ⾏号:删除此⾏的断点clear 函数名删除该函数的断点clear 断点编号删除指定编号的断点,若要⼀次删除多个断点,各个断点编号以空格隔开print ⼀般⽤来打印变量或表达式的值print 变量或表达式打印变量或表达式当前的值print 变量 = 值对变量进⾏赋值print 表达式@n 打印以表达式值开始的n个数whatis 显⽰某个变量或表达式的数据类型set 给变量赋值set variable 变量 =值continue 让程序继续执⾏下去kill ⽤于结束当前程序的调试。
GDB 常用调试命令
layout asm:显示反汇编窗口
layout regs:显示源代码/反汇编和CPU寄存器窗口
layout split:显示源代码和反汇编窗口
Ctrl + L:刷新窗口
quit:简记为 q ,退出gdb
当然,gdb的功能远不止这些,包括多进程/多线程/信号/远程调试等功能在这里均没有提及,有需要的读者可以参考其它信息。
GDB 常用调试命令
调用gdb编译需要在cc后面加 -g参数再加-o;
[root@redhat home]#gdb 调试文件:启动gdb
(gdb) l :(字母l)从第一行开始列出源码
(gdb) break n :在第n行处设置断点
(gdb) break func:在函数func()的入口处设置断点
(gdb) list
1 ../sysdeps/i386/elf/start.S: No such file or directory.
in ../sysdeps/i386/elf/பைடு நூலகம்tart.S
run:简记为 r ,其作用是运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令。
kill:将强行终止当前正在调试的程序
help 命令:help 命令将显示“命令”的常用帮助信息
call 函数(参数):调用“函数”,并传递“参数”,如:call gdb_test(55)
layout:用于分割窗口,可以一边查看代码,一边测试:
layout src:显示源代码窗口
(gdb) set args 参数:指定运行时的参数
(gdb) show args:查看设置好的参数
(gdb) show paths:查看程序运行路径;
比较全面的gdb调试命令
比较全面的gdb调试命令用GDB调试程序GDB是一个强大的命令行调试工具。
大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。
UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。
于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。
而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成。
在这里并不是要和Windows做个什么比较,所谓“寸有所长,尺有所短”,图形化工具还是有不如命令行的地方。
用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。
或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。
所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。
(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。
让我们一一看来。
一个调试示例——————源程序:tst.c1 #include23 int func(int n)4 {5 int sum=0,i;6 for(i=0; i<7; i++) {8 sum+=i;9 }10 return sum;11 }121314 main()15 {16 int i;17 long result = 0;18 for(i=1; i<=100; i++)19 {20 result += i;21 }2223 printf("result[1-100] = %d \n", result );24 printf("result[1-250] = %d \n", func(250) );25 }编译生成执行文件:(Linux下)hchen/test> cc -g tst.c -o tst使用GDB调试:hchen/test> gdb tst <---------- 启动GDBGNU gdb 5.1.1Copyright 2002 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-suse-linux"...(gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。
用GDB调试程序--调试器GDB常用功能
一,GDB调试器简介GDB是Linux下的常用调试器,主要用于调试源代码、调试运行中的进程和查看core dump文件。
Linux下的调试器主要有gdb、cgdb、ddd、eclipse。
GDB调试器的运行速度快、能够进行源代码同步显示。
使用-tui 选项开启gdb命令输入和源代码的分屏显示,tui即Terminal User Interface。
二,GDB常用调试命令a)调试可执行文件以源代码为/home/zebra/目录下的test.c文件产生的可执行文件test为例(可执行文件使用gcc进行编译,并使用-g选项以产生调试信息),进行命令的说明(详细源代码参见第三部分:三,调试实例分析 )。
gdb调试源代码流程:1,开启gdb程序,即运行如下命令:gdb -q (-q用以使得gdb不输出gdb程序的版本等信息)2,指定调试的二进制文件:file test3,list查看源代码4,设定断点breakpoint mainbreakpoint sub上述分别在main函数和sub函数处设定了断点。
断点可以设置在任意已知源代码文件的某一行,某一个函数,同时可以指定是设置在哪个/哪些线程上(见下边描述)。
5,运行可执行文件:run6,这样程序会运行到断点处停止下来,gdb会打印当前断点的信息。
7,使用s 或者n进行单步调试。
s即step,n即next都是执行一条语句,然后停下来。
如果想执行一条汇编语句,则可以使用si ,ni,即step instruction,next instruction。
8,bt命令查看当前的调用栈,bt即backtrace。
9,info frame查看函数帧信息。
10,frame n 进入某个函数帧(编号为n)11,info 命令可以对当前的函数帧的寄存器、局部变量、函数的参数进行查看。
info register;info local;info args。
12,disassemble对当前函数对应的二进制进行反汇编。
GDB调试技巧
现在已完成了调试,可以使用 'quit' 命令退出 gdb。由于程序仍在运行,这个操作会终止它,gdb 将提示您确认。
--------------------------------------------------------------------------------
回页首
更多断点和观察点
{
int value, div, result, i, total;
value = 10;
div = 6;
total = 0;
for(i = 0; i < 10; i++)
{
result = wib(value, div);
total += result;
要查看变量的值,使用 gdb 'print' 命令并指定变量名。输入 'print no1' 和 'print diff',可以相应看到 "no1" 和 "diff" 的值,结果如下:
(gdb) print no1
$5 = 8
(gdb) print diff
$2 = 0
gdb 指出 "no1" 等于 8,"diff" 等于 0。根据这些值和第 7 行中的语句,我们可以推断出算术异常是由除数为 0 的除法运算造成的。清单显示了第 6 行计算的变量 "diff",我们可以打印 "diff" 表达式(使用 'print no1 - no2' 命令),来重新估计这个变量。gdb 告诉我们 wib 函数的这两个自变量都等于 8,于是我们要检查调用 wib() 函数的 main() 函数,以查看这是在什么时候发生的。在允许程序自然终止的同时,我们使用 'continue' 命令告诉 gdb 继续执行。
常用GDB调试方法
常用GDB调试方法GDB(GNU调试器)是一种常用的开源调试工具,用于在开发过程中检测和修复程序错误。
它支持多种编程语言,并且提供了许多功能强大的调试功能。
以下是常用的GDB调试方法:1.启动程序:使用GDB调试程序的第一步是启动程序。
在命令行中键入“gdb”命令,后跟要调试的程序的名称。
例如,要调试名为“my_program”的程序,可以输入“gdb my_program”。
2.设置断点:在程序中设置断点是调试过程中的重要步骤。
在GDB中,断点可以是程序的特定行、函数或地址。
使用“break”命令设置断点,可以指定行数、函数名或地址。
例如,“break fun_name”将在名为“fun_name”的函数上设置断点,“break file_name:line_number”将在指定文件的特定行上设置断点。
3.运行程序:一旦设置了断点,就可以运行程序。
在GDB中,输入“run”命令运行程序。
程序将在达到第一个断点时停止。
4.单步执行:在程序停止时,可以使用“next”命令逐行执行程序。
使用“step”命令逐步进入函数调用。
这两个命令都允许开发人员在程序执行的每一步上检查变量和执行情况。
5.检查变量:GDB允许开发人员在程序执行期间检查变量的值。
使用“print”命令可以输出变量的当前值。
例如,“print var_name”将打印名为“var_name”的变量的值。
6.显示堆栈:使用“backtrace”命令可以查看程序的函数调用堆栈。
这对于定位程序崩溃或错误的根本原因非常有用。
7.查看内存:GDB允许开发人员查看程序中的内存。
使用“x”命令可以查看指定地址的内存内容。
例如,“x/10x address”将显示从指定地址开始的10个字节的十六进制值。
8.修改变量:GDB还可以在程序运行时修改变量的值,以便进行测试和调试。
使用“set”命令可以更改变量的值。
例如,“set var_name = new_value”将将“var_name”的值设置为“new_value”。
GDB调试技巧
1、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来调试他。
启动GDB的方法有以下几种:1、gdb <program>program也就是你的执行文件,一般在当然目录下。
2、gdb <program> core用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。
3、gdb <program> <PID>如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。
gdb会自动attach上去,并调试他。
program应该在PATH环境变量中搜索得到。
GDB启动时,可以加上一些GDB的启动开关,详细的开关可以用gdb -help查看。
我在下面只例举一些比较常用的参数:-symbols <file>-s <file>从指定文件中读取符号表。
-se file从指定文件中读取符号表信息,并把他用在可执行文件中。
-core <file>-c <file>调试时core dump的core文件。
-directory <directory>-d <directory>加入一个源文件的搜索路径。
默认搜索路径是环境变量中PATH所定义的路径。
2、GDB的命令概貌启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示:/home/hchen> gdbGNU gdb 5.1.1Copyright 2002 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-suse-linux".(gdb) helpList of classes of commands:aliases -- Aliases of other commandsbreakpoints -- Making program stop at certain pointsdata -- Examining datafiles -- Specifying and examining filesinternals -- Maintenance commandsobscure -- Obscure featuresrunning -- Running the programstack -- Examining the stackstatus -- Status inquiriessupport -- Support facilitiestracepoints -- Tracing of program execution without stopping the programuser-defined -- User-defined commandsType "help" followed by a class name for a list of commands in that class.Type "help" followed by command name for full documentation.Command name abbreviations are allowed if unambiguous.(gdb)gdb的命令很多,gdb把之分成许多个种类。
常用GDB调试方法
常用GDB调试方法GDB(GNU调试器)是一个命令行调试工具,用于在开发和调试过程中定位和修复程序中的错误。
它具有丰富的功能,如设置断点、单步执行、查看变量和内存、跟踪程序执行流等。
下面是一些常用的GDB调试方法。
1.启动程序调试:要在GDB中调试一个程序,需要先启动GDB并加载要调试的可执行文件。
在命令行中输入“gdb [executable]”来启动GDB,并将可执行文件作为参数传递给它。
2.设置断点:断点是程序执行过程中的一个停止点,用于跟踪程序执行流和查看变量的值。
使用“break [line number]”命令在指定行上设置断点。
例如,“break main”将在程序的主函数上设置一个断点。
3.启动程序:在GDB中使用“run”命令来启动程序的执行。
程序将在遇到断点或程序结束时停止。
4.单步执行:使用“step”命令可以按照程序的执行流,在函数调用之间进行单步执行。
这将进入函数并执行函数内部的代码。
5.继续执行:使用“continue”命令可以让程序继续执行,直到遇到下一个断点或程序结束。
6.查看变量:使用“print [variable]”命令可以查看变量的值。
也可以使用“display [variable]”命令在每次停止时自动显示变量的值。
7.修改变量的值:使用“set [variable]=[value]”命令可以修改变量的值。
这在调试过程中有时很有用。
8.查看函数调用栈:使用“backtrace”命令可以查看函数调用栈。
这将显示当前函数和调用它的函数。
9.查看堆栈帧:使用“frame [n]”命令可以查看调用栈中的特定堆栈帧。
这将显示该堆栈帧中的函数和局部变量。
10.观察程序的执行流:使用“next”命令可以按照程序的执行流在语句之间执行。
这不会进入函数调用。
11.跟踪程序的执行流:使用“trace”命令可以跟踪程序的执行流。
这将显示程序执行的每一步。
12.设置条件断点:使用“break [line number] if [condition]”命令可以在满足特定条件时设置断点。
gdb跟踪调试程序的方法
gdb跟踪调试程序的方法嘿,朋友们!今天咱来聊聊 gdb 跟踪调试程序的那些事儿。
这就好比你在一个神秘的代码世界里探险,而 gdb 就是你手中的神奇魔杖!首先呢,你得把 gdb 这个小工具准备好。
就像战士上战场得有趁手的兵器一样,gdb 就是咱程序员的得力助手。
然后,当你要调试一个程序的时候,就像打开一扇通往奇妙世界的大门。
你可以用 gdb 去加载这个程序,这感觉就像是你进入了一个满是代码宝藏的洞穴。
在这个过程中,你可以设置断点。
哎呀呀,这断点可太重要啦!就好比你在代码的道路上放置了一个个小标记,当程序运行到这里的时候,就会停下来,等你去查看。
这多方便呀,就像你在路上走,突然看到一个有趣的地方,就停下来好好瞧瞧。
还有哦,你可以查看变量的值。
这就像你在这个代码世界里,能清楚地看到每个宝藏的具体模样。
你可以知道这个变量现在是什么状态,是不是符合你的预期。
当程序暂停在断点处时,你可以一步步地执行代码。
这感觉就像是你小心翼翼地在代码的小道上往前走,每一步都看得清清楚楚。
你可以看到每一行代码是怎么影响程序的运行的。
你想想,这多神奇呀!就好像你能掌控整个代码的运行过程,让它按照你的意愿来走。
如果程序出了问题,你就能像侦探一样,通过 gdb 找到问题的根源。
比如说,程序突然崩溃了,别着急,用 gdb 来跟踪呀!看看是在哪一行代码出了岔子,是哪个变量的值变得不对劲了。
这不就像是在黑暗中找到了那一丝光亮吗?而且哦,gdb 还能帮你查看函数的调用栈。
这就像是你能看到整个程序的运行轨迹,从一个函数跳到另一个函数,就像在一个复杂的迷宫中找到正确的路径。
总之呢,gdb 跟踪调试程序就像是一场刺激的冒险。
你要勇敢地面对代码世界里的各种挑战,利用好 gdb 这个神奇的工具。
所以呀,朋友们,别害怕遇到程序中的问题,拿起 gdb 这个法宝,大胆地去探索吧!让我们在代码的海洋里畅游,找到那些隐藏的宝藏,解决那些看似棘手的问题。
相信我,一旦你掌握了 gdb 跟踪调试程序的方法,你就会发现编程变得更加有趣,更加有成就感啦!。
gdb常用调试命令以及多线程堆栈的查看
gdb常⽤调试命令以及多线程堆栈的查看GDB是GNU开源组织发布的⼀个强⼤的UNIX下的程序调试⼯具。
或许,各位⽐较喜欢那种图形界⾯⽅式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试⼯具有⽐VC、BCB的图形化调试器更强⼤的功能。
所谓“⼨有所长,尺有所短”就是这个道理。
⼀般来说GDB主要调试的是C/C++的程序。
要调试C/C++的程序,⾸先在编译时,我们必须要把调试信息加到可执⾏⽂件中。
使⽤编译器(cc/gcc/g++)的 -g 参数可以做到这⼀点。
如:> cc -g hello.c -o hello> g++ -g hello.cpp -o hellogdb +程序名运⾏(gdb main)使⽤ "--tui" 参数,可以在终端窗⼝上部显⽰⼀个源代码查看窗。
gdb --tui mainlist(l) 查看最近10⾏源码list fun 查看fun函数源码list file:fun 查看file⽂件中的fun函数源码list num1 num2 查看num1~num2⾏的源码break ⾏号break fun 在函数处设置断点break file:⾏号break file:funbreak if <condition> 条件成⽴时程序停住info break (i b)查看断点watch expr 当expr的值发⽣改变时,程序停住delete n 删除断点run/r 启动程序continue(c) 运⾏⾄下⼀个断点step(s) 单步跟踪,进⼊函数next(n) 单步跟踪,不进⼊函数finish 运⾏程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数信息until 运⾏程序直到程序退出循环体print i (p i) 查看变量的值ptype 查看变量类型print array 查看数组print *array@len 查看动态内存print x=5 改变运⾏时的数据print &array 查看数组的地址回车代表上⼀个命令core⽂件在程序崩溃时,⼀般会⽣成⼀个⽂件叫core⽂件。
常用GDB调试方法
1.什么是GDBGDB是GNU开源组织发布的一个强大的UNIX下的C/C++程序调试工具。
虽然GDB自身并没有Windows上大多数IDE的调试工具的高可视化和图形化功能,但命令行式调试也具有其很大的优点,如果希望在GDB上提升可视化功能,可以使用vim的gdb插件对gdb进行加强。
顺便提一下调试程序的几大功能:a)自定义方式启动程序;b)可以设置断点,使程序在指定的断点处停住;c)当程序停住时,可以查看程序的运行时数据;d)可以修改程序的运行时数据;2.GDB与编译器的-g和-ggdb参数cc/gcc/g++使用-g参数可以在编译时利用操作系统的“原生格式(native format)”生成调试信息。
这些信息GDB可以直接利用,当然其它的调试工具也能够直接利用。
-g参数是分级别的:a) -g2使用-g的默认的级别,此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息。
如果不使用,则只有内存地址信息,没有响应的标识信息;b)-g3包含级别-g2中的所有调试信息,以及源代码中定义的宏;c)-g1级别1(-g1)不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储之用。
回溯跟踪指的是监视程序在运行过程中的函数调用历史,堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法,两者都是经常用到的调试手段。
-ggdb参数能够为GDB生成更为丰富的调试信息,与-g相同,也有3个级别,如果希望调试宏,则可以使用-ggdb3。
但与-g不同的是,-ggdb生成的信息只能被GDB使用,而不能被其它调试工具使用。
3.使用GDB启动调试使用GDB启动调试的方法有一下几种(只是关联上调试目标程序,并没有开始运行目标程序):a)gdb <program><program>也就是你的执行文件,要在PATH环境变量下能搜索到,一般在当前目录下;b)gdb <program> core_file用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。
Linux命令高级技巧使用gdb命令进行程序调试和分析
Linux命令高级技巧使用gdb命令进行程序调试和分析在Linux环境中,gdb是程序员们常用的工具之一,用于调试和分析程序。
gdb是GNU调试器的缩写,它提供了多种功能和选项,能够帮助程序员追踪程序的执行过程,找出错误并进行修复。
本文将介绍一些使用gdb进行程序调试和分析的高级技巧,希望能对读者有所帮助。
一、gdb简介gdb是一个功能强大的调试工具,它可以在程序执行过程中暂停程序,并允许程序员查看、修改程序状态。
gdb支持多种编程语言,包括C、C++、Fortran等。
使用gdb可以帮助程序员分析程序的执行流程、内存使用情况以及变量状态等,从而帮助定位并解决程序的bug。
二、基本调试技巧1. 启动程序调试使用gdb调试程序时,需要在命令行中输入"gdb 程序名"的命令来启动gdb。
例如,要调试一个名为"test"的程序,可以输入以下命令:```gdb test```2. 设置断点断点是gdb中非常有用的功能,可以在程序中指定位置设置断点,使程序执行到该位置时暂停。
通过暂停程序的执行,可以查看程序中的变量值以及执行流程,有助于定位问题。
设置断点的命令是"break"或"b",后跟着要设置断点的位置。
例如,要在程序的第10行设置断点,可以输入以下命令:```break 10```3. 执行程序在设置好断点后,可以使用"gdb"命令来开始执行程序。
程序将会运行到第一个断点处暂停。
4. 单步执行单步执行是gdb中常用的调试技巧之一,可以逐行执行程序,方便查看程序的执行过程。
gdb提供了多种单步执行的命令,包括"step"和"next"。
- "step"命令用于逐行执行程序,包括进入函数内部。
如果当前行是函数调用语句,gdb将进入该函数,然后停在函数内部的第一行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.什么是GDBGDB是GNU开源组织发布的一个强大的UNIX下的C/C++程序调试工具。
虽然GDB自身并没有Windows上大多数IDE的调试工具的高可视化和图形化功能,但命令行式调试也具有其很大的优点,如果希望在GDB上提升可视化功能,可以使用vim的gdb插件对gdb进行加强。
顺便提一下调试程序的几大功能:a)自定义方式启动程序;b)可以设置断点,使程序在指定的断点处停住;c)当程序停住时,可以查看程序的运行时数据;d)可以修改程序的运行时数据;2.GDB与编译器的-g和-ggdb参数cc/gcc/g++使用-g参数可以在编译时利用操作系统的“原生格式(native format)”生成调试信息。
这些信息GDB可以直接利用,当然其它的调试工具也能够直接利用。
-g参数是分级别的:a) -g2使用-g的默认的级别,此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息。
如果不使用,则只有内存地址信息,没有响应的标识信息;b)-g3包含级别-g2中的所有调试信息,以及源代码中定义的宏;c)-g1级别1(-g1)不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储之用。
回溯跟踪指的是监视程序在运行过程中的函数调用历史,堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法,两者都是经常用到的调试手段。
-ggdb参数能够为GDB生成更为丰富的调试信息,与-g相同,也有3个级别,如果希望调试宏,则可以使用-ggdb3。
但与-g不同的是,-ggdb生成的信息只能被GDB使用,而不能被其它调试工具使用。
3.使用GDB启动调试使用GDB启动调试的方法有一下几种(只是关联上调试目标程序,并没有开始运行目标程序):a)gdb <program><program>也就是你的执行文件,要在PATH环境变量下能搜索到,一般在当前目录下;b)gdb <program> core_file用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。
启动后,gdb将加载core文件保存的堆栈信息,使用bt命令可以查看堆栈信息,后面也将对此进行详细说明;c)gdb <program> <PID>用gdb调试正在运行的进程,<PID>是正在运行的进程ID。
gdb能自动attach到这个进程上,其中<program>要在PATH环境变量下能够搜索到。
也可以使用gdb attach <PID>;4.查看源代码使用list命令,也可以使用缩写l。
list [linenum]查看指定行[linenum]附近的代码。
5.设置断点(Breakpoint)GDB提供break命令来设置断点,有以下几种设置断点的方法:a)break <function>在进入指定函数时停住。
C++中也可以使用class::function,或者类似function(type,type)的方式来指定函数;b)break <filename>:<function>在进入指定源文件的函数时停住。
c)break <linenum>在运行到指定行时停住。
d)break <filename>:<linenum>在运行到指定源文件的指定行时停住。
e)break <offset>在当前行号的前后指定offset处停住,例如当前行为10,运行break +100表示在110处设置断点,运行break -10则表示在90处设置断点;f)break *<address>在程序运行到内存地址<address>处停住。
g)breakbreak后什么都没有,表示在下一条指令处停住。
h)break [where] if <condition>在条件成立时停住。
[where]可以是上述任何break的参数,也可以不设置,不设置则表示条件成立的下一条指令处停住。
例如,break if i=100,表示当i等于100时停住程序。
i)commands <breakpoint num>>[command_list]>end为断点设置自动执行命令。
例如:(gdb) commands 2>print n>end表示在第2个断点时,执行print n操作。
6.查看断点(Breakpoint)info breakpoints [n]info break [n]info b [n]以上[n]表示第n个断点,如果没有,则显示所有断点。
7.删除/修改断点(Breakpoint)GDB提供四个命令来维护断点:delete、clear、disable、enable。
a)delete删除指定断点。
delete [breakpoint num]delete [breakpoint num range][breakpoint num]为断点号,[breakpoint num range]为断点号范围。
如果不指定断点号,则为删除所有断点b)clear清除断点clear清除当前位置断点clear <filename>:<function>clear <function> 清除指定函数位置上的断点clear <filename>:<linenum>clear <linenum> 清除指定行位置上的断点c)disable禁用断点,不删除。
d)enable将禁用的断点启动。
对于条件断点,可以使用condition <breakpoint num> <condition> 修改断点条件。
可以使用ignore <breakpoint num> <count> 来忽略指定断点<count>次8.设置观察点(Watchpoint)观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。
我们有下面的几种方法来设置观察点:a)watch <expr>为表达式(变量)expr设置一个观察点。
一量表达式值有变化时,马上停住程序。
b)rwatch <expr>当表达式(变量)expr被读时,停住程序。
c)awatch <expr>当表达式(变量)的值被读或被写时,停住程序。
9.运行调试程序a)set args [params]设置程序运行参数,例如set args param1 param2b)run/r运行调试程序。
10.单步调试a)step/s [count]单步跟踪,如果有函数调用,他会进入该函数。
进入函数的前提是,此函数被编译有debug信息。
很像VC等工具中的step in。
后面可以加count也可以不加,不加表示一条条地执行,加则表示执行后面的count条指令,然后再停住。
b)next/n [count]同样单步跟踪,如果有函数调用,他不会进入该函数。
很像VC等工具中的step over。
后面可以加count也可以不加,不加表示一条条地执行,加则表示执行后面的count 条指令,然后再停住。
c)finish [count]运行程序,直到当前函数完成返回。
并打印函数返回时的堆栈地址和返回值及参数值等信息。
d)until/u [count]当你厌倦了在一个循环体内单步跟踪时,在循环指令上使用这个命令可以运行程序直到退出循环体。
e)continue/c [ignore-count]当程序被停住了,你可以用continue恢复程序运行,直到程序结束,或是下一个断点到来。
ignore-count表示忽略其后的断点次数。
11.查看运行时数据a)print打印变量,可以使用缩写p。
i.p <expr>基本用法,打印变量或者表达式,如p i、p i+j。
ii.p/<format> <expr>使用指定格式打印。
支持的格式包括:x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
iii.p *<array>@<len>指定长度打印数组。
如有int* array = new int[100];则可以使用p *array@10,查看数组前10个元素的数值。
b)examine查看指定内存地址中的数据,可以使用缩写x,可以在gdb中使用help x查看帮助。
使用方式为:x/<format> <addr>支持的格式除了print中的格式外,还包括:n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。
u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。
当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。
c)display用于自动显示, 当程序停住时,或是在你单步跟踪时,这些变量会自动显示。
使用方式为:display <expr>display/<format> <expr>display/<format> <addr>支持的格式i和s,可以help display查看。
12.修改运行时数据a)修改运行时变量set <var>=<value>set var <var>=<value>如果变量名与gdb的环境变量名冲突时,则需要加var前缀来说明这是要设置一个变量。
b)强制函数返回returnreturn <expression>如果函数需要返回值,则指定<expression>c)强制调用函数call <expression>13.调试多线程多线程调试常用的命令如下:a)info thread查看线程信息。
b)thread <ID>切换到指定ID的线程。
c)break <where> thread all对所有经过的线程都设置断点。
d)set scheduler-locking off|on|step在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。