GDB 命令行参数

合集下载

gdb命令行参数

gdb命令行参数

gdb命令行参数GDB(GNU调试器)是一个功能强大的调试工具,可用于调试各种编程语言的源代码。

在GDB中,您可以使用命令行参数来控制它的行为。

本文将引导您了解如何在GDB中使用命令行参数。

步骤1:了解GDB命令行参数的基本语法GDB命令行参数通常用“-”符号开头,后跟一个或多个字母。

有些选项需要一个额外的参数,可以使用单破折号('-')指定。

例如,假设您想要告诉GDB在运行时停止程序的执行,您可以使用命令行参数“-i”:$ gdb -i prog这将向GDB传递一个-i参数,告诉它在运行时停止程序的执行。

步骤2:使用GDB命令行参数来控制调试行为GDB提供了大量的命令行参数,可以用于控制它的行为。

例如,以下是一些常用的选项:• -q:设置GDB的"quiet"模式,以减少输出。

• -e:从指定的文件中读取GDB命令。

• -x:从指定的文件中读取初始化命令。

• -tui:打开GDB的文本用户界面。

• -c:从核心文件调试。

• -p:调试正在运行的进程。

• -s:从标准输入读取GDB命令。

这些选项的具体用法和效果取决于您的需要。

通常,如果您不确定如何使用某个选项,请查看GDB的文档或使用GDB的帮助命令("help ")来获得更多信息。

步骤3:了解GDB环境变量除了命令行参数之外,GDB还提供了一些环境变量可以用于控制其行为。

例如,以下是一些常用的环境变量:• LD_LIBRARY_PATH:指定GDB应搜索的共享库路径。

• SHELL:指定GDB在启动shell进程时使用的shell。

• TERM:指定GDB应使用的终端类型。

• READLINE:指定GDB应使用的Readline库。

• GDBINIT:指定GDB应在启动时读取的命令文件。

这些环境变量的具体用法和效果取决于您的需要。

通常,如果您不确定如何使用某个环境变量,请查看GDB的文档或使用GDB的帮助命令("help ")来获得更多信息。

GDB命令

GDB命令

调试COREDUMP文件
• 当程序由于某种原因崩溃后会生成core dump文件,里面包 含程序崩溃时的堆栈信息和其他信息 • ulimit –c unlimited 要程序崩溃后自动生成core dump文件,需要执行ulimit -c 命令设置core dump文件的大小,一般会在用户配置文件添 加此命令,最后一个参数为设置core dump文件大小,这里 设为不限制大小 • 为了能掌握更多调试信息,我们要添加编译选项-g, 并把优 化选项等级设为最低(-O0, 默认为-O2)
GDB命令
• • • • • • • finish -跳出函数执行体,相当于VS的SHIFT+F11 -跳出循环体 u step -相当于VS的F11键 p [variant] -打印变量的值 info locals -显示当前所有局部变量的值 layout src -显示源代码窗口,调试时会有更新问题,可用CTRL+l更新 b [linenum/func] if [condition] -可以在某条件成立的时候,在某处下断 点 • watch [variant] -类似VS的监视变量,当触发断点时,会打印variant的值 • file [程序名] -当以gdb命令直接进入调试的时候,可以使用该命令加 载所要调试的程序
调试core dump示例
• gdb ./test core • where -显示引起程序崩溃的位置 • ba -打印堆栈信息
Байду номын сангаас
GDB常用命令
启动GDB的方式
• 直接输入gdb • gdb 程序名 • gdb 程序名 core文件
GDB启动示例
• gdb • gdb ./test • gdb ./test core

GDB常用命令

GDB常用命令

GDB常用命令在linux的c编程中大家经常用gdb调试程序,以下是一些常用的指令1.break FUNCTION在某个函数上设置断点。

函数重载时,有可能同时在几个重载的函数上设置了断点break +OFFSETbreak -OFFSET在当前程序运行到的前几行或后几行设置断点break LINENUM在行号为LINENUM的行上设置断点break FILENAME:LINENUM在文件名为FILENAME的原文件的第LINENUM行设置断点break FILENAME:FUNCTION在文件名为FILENAME的FUNCTION函数上设置断点当你的多个文件中可能含有相同的函数名时必须给出文件名。

break *ADDRESS在地址ADDRESS上设置断点,这个命令允许你在没有调试信息的程序中设置断点break当break命令不包含任何参数时,break命令在当前执行到的程序运行栈中的下一条指令上设置一个断点。

除了栈底以外,这个命令使程序在一旦从当前函数返回时停止。

相似的命令是finish,但finish并不设置断点。

这一点在循环语句中很有用。

gdb在恢复执行时,至少执行一条指令。

break ... if COND这个命令设置一个条件断点,条件由COND指定;在gdb每次执行到此断点时COND都被计算当COND的值为非零时,程序在断点处停止ignore BNUM COUNT设置第BNUM号断点的被忽略的次数为COUNT,即断点BNUM 再执行到第COUNT+1次时程序停止tbreak ARGS 或者简写为 tb设置断点为只有效一次。

ARGS的使用同break中的参量的使用hbreak ARGS设置一个由硬件支持的断点。

这个命令的主要目的是用于对EPROM/ROM程序的调试因为这条命令可以在不改变代码的情况下设置断点。

这可以同SPARCLite DSU一起使用。

当程序访问某些变量和代码时,DSU将设置“陷井”。

gdb基本命令

gdb基本命令
查看当前设置了哪些观察点
x
从某个位置开始打印存储单元的内容,全部当成字节来看,而不区分哪个字节属于哪个变量
(gdb) x/7b input
0xbfb8f0a7: 0x31 0x32 0x33 0x34 0x35 0x00 0x00
x命令打印指定存储单元的内容。7b是打印格式,b表示每个字节一组,7表示打印7组
表10.1.gdb基本命令1
命令
描述
backtrace(或bt)
查看各级函数调用及参数
finish
连续运行到当前函数返回为止,然后停下来等待命令
frame(或f)帧编号
选择栈帧
info(或i)locals
查看当前栈帧局部变量的值
list(或l)
列出源代码,接着上次的位置往下列,每次列10行
list行号
表10.2.gdb基本命令2
命令
描述
break(或b)行号
在某一行设置断点
breakLeabharlann 数名在某个函数开头设置断点
break ... if ...
设置条件断点
continue(或c)
从当前位置开始连续运行程序
delete breakpoints断点号
删除断点
display变量名
跟踪查看某个变量,每次停下来都显示它的值
列出从第几行开始的源代码
list函数名
列出某个函数的源代码
next(或n)
执行下一行语句
print(或p)
打印表达式的值,通过表达式可以修改变量的值或者调用函数
quit(或q)
退出gdb调试环境
setvar
修改变量的值
start
开始执行程序,停在main函数第一行语句前面等待命令

gdb命令大全

gdb命令大全

gdb命令大全gdb 命令大全2011-06-22 21:44 155人阅读评论(0) 收藏举报gdb 命令1.按TAB键两次会将命令或者函数名补齐2.设置断点break functionbreak linenumbreak +offset 当前行号前offset行break -offset 当前行号后offset行break *address 运行内存地址处停止break 下一行break ... if condition ... 可以是上述参数3.设置观察点watch expr 变量有变化停止rwatch expr 变量被读停止awatch expr 变量被读写时停止4.设置捕捉点catch eventevent有如下:throw catch exec fork vfork load unloadCODE:Raised signals may be caught:catch signal - all signalscatch signal <signame> - a particular signalRaised exceptions may be caught:catch throw - all exceptions, when throwncatch throw <exceptname> - a particular exception, when throwncatch catch - all exceptions, when caughtcatch catch <exceptname> - a particular exception, when caughtThread or process events may be caught:catch thread_start - any threads, just after creation catch thread_exit - any threads, just before expirationcatch thread_join - any threads, just after joinsProcess events may be caught:catch start - any processes, just after creationcatch exit - any processes, just before expirationcatch fork - calls to fork()catch vfork - calls to vfork()catch exec - calls to exec()Dynamically-linked library events may be caught:catch load - loads of any librarycatch load <libname> - loads of a particular librarycatch unload - unloads of any librarycatch unload <libname> - unloads of a particular library The act of your program's execution stopping may also be caught:catch stopC++ exceptions may be caught:catch throw - all exceptions, when throwncatch catch - all exceptions, when caught4.停止条件维护可以用condition命令来修改断点的条件,目前只有break watchcondition <bnum> <expression>condition <bnum> 清除停止条件5.为停止点设定运行命令可以用commands命令来设置commands <bnum>.....end6.其他有用的指令finish 运行程序,直到当前函数完成until或u运行程序直到退出循环体,用在for或者while上,比较方便x命令增加如下CODE:Examine memory: x/FMT ADDRESS.ADDRESS is an expression for the memory address to examine.FMT is a repeat count followed by a format letter and a size letter.Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),t(binary), f(float), a(address), i(instruction), c(char) and s(string).Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).The specified number of objects of the specified size are printedaccording to the format.Defaults for format and size letters are those previously used.Default count is 1. Default address is following last thingwith this command or "print".====================================== ====================gdb 命令大全1. 启动gdb 应用程序名gdb 应用程序名 core文件名gdb 应用程序名 pidgdb --args 应用程序名应用程序的运行参数帮助:help 显示帮助info 显示程序状态set 修改show 显示gdb状态运行及运行环境设置:set args # 设置运行参数show args # 显示运行参数set env 变量名 = 值 # 设置环境变量unset env [变量名] # 取消环境变量show env [变量名] # 显示环境变量path 目录名 # 把目录添加到查找路径中show paths # 显示当前查找路径cd 目录 # 切换工作目录pwd # 显示当前工作目录tty /dev/pts/1 # 修改程序的输入输出到指定的ttyset inferior-tty /dev/pts/1 # 修改程序的输出到指定的ttyshow inferior-ttyshow ttyrun 参数 # 运行start 参数 # 开始运行,但是会在main函数停止attach piddetachkill # 退出Ctrl-C # 中断(SIGINT)Ctrl-]线程操作:info threads # 查看所有线程信息thread 线程id # 切换到指定线程thread apply [threadno | all ] 参数 # 对所有线程都应用某个命令子进程调试:set follow-fork-mode child|parent # fork后,需要跟踪谁show follow-fork-modeset detach-on-flow on|off # fork后,需要两个都跟踪吗info forks # 显示所有进程信息fork 进程id # 切换到某个进程detach-fork 进程id # 不再跟踪某个进程delete fork 进程id # kill某个进程并停止对它的跟踪检查点: checkpoint/restart查看停止原因:info program断点(breakpoint): 程序运行到某处就会中断break(b) 行号|函数名|程序地址 | +/-offset | filenam:func [if条件] # 在指定位置设置断点tbreak ... # 与break相似,只是设置一次断点hbreak ... # 与break相似,只是设置硬件断点,需要硬件支持thbreak ... # 与break相似,只是设置一次性硬件断点,需要硬件支持rbreak 正则表达式 # 给一批满足条件的函数打上断点info break [断点号] # 查看某个断点或所有断点信息set breadpoint pending auto|on|off # 查看如果断点位置没有找到时行为show breakpoint pending观察点(watchpoint): 表达式的值修改时会被中断watch 表达式 # 当表达式被写入,并且值被改变时中断rwatch 表达式 # 当表达式被读时中断awatch 表达式 # 当表达式被读或写时中断info watchpointsset can-use-hw-watchpoints 值 # 设置使用的硬件观察点的数show can-use-hw-watchpointsrwatch与awatch需要有硬件支持,另外如果是对局部变量使用watchpoint,那退出作用域时观察点会自动被删除另外在多线程情况下,gdb的watchpoint只对一个线程有效捕获点(catchpoint): 程序发生某个事件时停止,如产生异常时catch 事件名事件包括:throw # 产生c++异常catch # 捕获到c++异常exec/fork/vfork # 一个exec/fork/vfork函数调用,只对HP-UX load/unload [库名] # 加载/卸载共享库事件,对只HP-UXtcatch 事件名 # 一次性catchinfo break断点操作:clear [函数名|行号] # 删除断点,无参数表示删卫当前位置delete [断点号] # 删除断点,无参数表示删所有断点disable [断点号]enable [断点号]condition 断点号条件 # 增加断点条件condition 断点号 # 删除断点条件ignore 断点号数目 # 忽略断点n次commands 断点号 # 当某个断点中断时打印条件条件end下面是一个例子,可以一直打印当前的X值:commands 3printf "X:%d/n",xcontend断点后操作:continue(c) [忽略次数] # 继续执行,[忽略前面n次中断]fg [忽略次数] # 继续执行,[忽略前面n次中断]step(s) [n步] # 步进,重复n次next(n) [n步] # 前进,重复n次finish # 完成当前函数调用,一直执行到返回处,并打印返回值until(u) [位置] # 一直执行到当前行或指定位置,或是当前函数返回advance 位置# 前面到指定位置,如果当前函数返回则停止,与until类似stepi(si) [n步] # 精确的只执行一个汇编指令,重复n次nexti(ni) [n步] # 精确的只执行一个汇编指令,碰到函数跳过,重复n次set step-mode on|off # on时,如果函数没有调试信息也跟进show step-mode信号:info signals # 列出所有信号的处理方式info handle # 同上handle 信号方式 # 改变当前处理某个信号的方式方式包括:nostop # 当信号发生时不停止,只打印信号曾经发生过stop # 停止并打印信号print # 信号发生时打印noprint # 信号发生时不打印pass/noignore # gdb充许应用程序看到这个信号nopass/ignore # gdb不充许应用程序看到这个信号线程断点:break 行号信息 thread 线程号 [if 条件] # 只在某个线程内加断点线程调度锁:set scheduler-locking on|off # off时所有线程都可以得到调度,on时只有当前show scheduler-locking帧:frame(f) [帧号] # 不带参数时显示所有帧信息,带参数时切换到指定帧frame 地址 # 切换到指定地址的帧up [n] # 向上n帧down [n] # 向下n帧select-frame 帧号 # 切换到指定帧并且不打印被转换到的帧的信息up-silently [n] # 向上n帧,不显示帧信息down-silently [n] # 向下n帧,不显示帧信息调用链:backtrace(bt) [n|-n|full] # 显示当前调用链,n限制显示的数目,-n表示显示后n个,n表示显示前n个,full的话还会显示变量信息使用 thread apply all bt 就可以显示所有线程的调用信息set backtrace past-main on|offshow backtrace past-mainset backtrace past-entry on|offshow backtrace past-entryset backtrace limit n # 限制调用信息的显示层数show backtrace limit显示帧信息:info frame # 显示当前帧信息info frame addr # 显示指定地址的帧信息info args # 显示帧的参数info locals # 显示局部变量信息info catch # 显示本帧异常信息显示行号:list(l) [行号|函数|文件:行号] # 显示指定位置的信息,无参数为当前位置list - # 显示当前行之前的信息list first,last # 从frist显示到last行list ,last # 从当前行显示到last行list frist, # 从指定行显示list + # 显示上次list后显示的内容list - # 显示上次list前面的内容在上面,first和last可以是下面类型:行号+偏移-偏移文件名:行号函数名函数名:行号set listsize n # 修改每次显示的行数show listsize编辑:edit [行号|函数|函数名:行号|文件名:函数名] # 编辑指定位置查找:search 表示式 # 向前查找表达式reverse-search 表示式 # 向后查找表达式指定源码目录:directory(dir) [目录名] # 指定源文件查找目录show directories源码与机器码:info line [函数名|行号] # 显示指定位置对应的机器码地址范围disassemble [函数名 | 起始地址结束地址] # 对指定范围进行反汇编set disassembly-flavor att|intel # 指定汇编代码形式show disassembly-flavor查看数据:ptype 表达式 # 查看某个表达式的类型print [/f] [表达式] # 按格式查看表达式内容,/f是格式化set print address on|off # 打印时是不是显示地址信息show print addressset print symbol-filename on|off # 是不是显示符号所在文件等信息show print symbol-filenameset print array on | off # 是不是打印数组show print arrayset print array index on | off # 是不是打印下标show print array index...表达式可以用下面的修饰符:var@n # 表示把var当成长度为n的数组filename::var # 表示打印某个函数内的变量,filename可以换成其它范围符如文件名{type} var # 表示把var当成type类型输出格式:x # 16进制d # 10进制u # 无符号o # 8进制t # 2进制a # 地址c # 字符f # 浮点查看内存:x /nfu 地址 # 查看内存n 重复n次f 显示格式,为print使用的格式u 每个单元的大小,为b byteh 2 bytew 4 byteg 8 byte自动显示:display [/fmt] 表达式 # 每次停止时都会显示表达式,fmt与print 的格式一样,如果是内存地址,那fmt可像 x的参数一样undisplay 显示编号delete display 显示编号 # 这两个都是删附某个显示disable display 显示编号 # 禁止某个显示enable display 显示编号 # 重显示display # 显示当前显示内容info display # 查看所有display项查看变量历史:show values 变量名 [n] # 显示变量的上次显示历史,显示n条show values 变量名 + # 继续上次显示内容便利变量: (声明变量的别名以方便使用)set $foo = *object_ptr # 声明foo为object_ptr的便利变量init-if-undefined $var = expression # 如果var还未定义则赋值show convenience内部便利变量:$_ 上次x查看的地址$__$_exitcode 程序垢退出码寄存器:into registers # 除了浮点寄存器外所有寄存器info all-registers # 所有寄存器into registers 寄存器名 # 指定寄存器内容info float # 查看浮点寄存器状态info vector # 查看向量寄存器状态gdb为一些内部寄存器定义了名字,如$pc(指令),$sp(栈指针),$fp(栈帧),$ps(程序状态)p /x $pc # 查看pc寄存器当前值x /i $pc # 查看要执行的下一条指令set $sp += 4 # 移动栈指针内核中信息:info udot # 查看内核中user struct信息info auxv # 显示auxv内容(auxv是协助程序启动的环境变量的)内存区域限制:mem 起始地址结构地址属性# 对[地始地址,结构地址)区域内存进行保护,如果结构地址为0表示地址最大值0xffffffff delete mem 编号 # 删除一个内存保护disable mem 编号 # 禁止一个内存保护enable mem 编号 # 打开一个内存保护info mem # 显示所有内存保护信息保护的属性包括:1. 内存访问模式: ro | wo |rw2. 内存访问大小: 8 | 16 | 32 | 64 如果不限制,表示可按任意大小访问3. 数据缓存: cache | nocache cache表示充许gdb缓存目标内存内存复制到/从文件:dump [格式] memory 文件名起始地址结构地址 # 把指定内存段写到文件dump [格式] value 文件名表达式 # 把指定值写到文件格式包括:binary 原始二进制格式ihex intel 16进制格式srec S-recored格式tekhex tektronix 16进制格式append [binary] memory 文件名起始地址结构地址 # 按2进制追加到文件append [binary] value 文件名表达式 # 按2进制追加到文件restore 文件名 [binary] bias 起始地址结构地址 # 恢复文件中内容到内存.如果文件内容是原始二进制,需要指定binary参数,不然会gdb自动识别文件格式产生core dump文件gcore [文件名] # 产生core dump文件字符集:set target-charset 字符集# 声明目标机器的locale,如gdbserver所在机器set host-charset 字符集 # 声明本机的localeset charset 字符集 # 声明目标机和本机的localeshow charsetshow host-charsetshow target-charset缓存远程目标的数据:为提高性能可以使用数据缓存,不过gdb不知道volatile变量,缓存可能会显示不正确的结构set remotecache on | offshow remotecacheinfo dcache # 显示数据缓存的性能C预处理宏:macro expand(exp) 表达式 # 显示宏展开结果macro expand-once(expl) 表达式 # 显示宏一次展开结果macro info 宏名 # 查看宏定义追踪(tracepoint): 就是在某个点设置采样信息,每次经过这个点时只执行已经定义的采样动作但并不停止,最后再根据采样结果进行分析。

gdb使用教程

gdb使用教程

gdb使用教程GDB是GNU调试器的缩写,是一个功能强大的命令行调试工具,用于帮助开发人员在调试过程中定位和修复程序中的错误。

以下是GDB的使用教程:1. 编译程序时添加调试信息:在使用GDB进行调试之前,需要确保程序在编译时包含了调试信息。

可以通过在编译命令中添加`-g`选项来实现。

例如:`gcc -g main.c -o main`。

2. 启动GDB:在命令行中输入`gdb`命令,然后输入可执行文件的路径作为参数。

例如:`gdb ./main`。

3. 设置断点:断点是在程序执行到指定位置时停下来的标记。

可以使用`break`命令来设置断点。

例如:`break main`可以在`main`函数的开头设置一个断点。

4. 开始执行程序:使用`run`命令来运行程序。

例如:`run`。

5. 执行程序并停在断点处:当程序开始运行后,会在达到断点处停下来等待输入。

此时可以使用一些GDB命令来检查程序的状态,如查看变量的值、栈帧等。

6. 单步执行:使用`next`命令来逐行执行程序。

例如:`next`。

7. 跳出函数:使用`finish`命令可以跳出当前正在执行的函数,并停在调用该函数的上一个函数中。

8. 继续执行:使用`continue`命令可以接着执行程序直到下一个断点或程序结束。

9. 查看变量的值:使用`print`或简写的`p`命令可以查看变量的值。

例如:`print i`可以查看变量`i`的值。

10. 修改变量的值:使用`set`命令可以修改变量的值。

例如:`set i = 10`可以将变量`i`的值修改为10。

11. 查看函数调用栈:使用`backtrace`或简写的`bt`命令可以查看函数调用栈。

12. 退出GDB:使用`quit`命令可以退出GDB。

以上是一些常用的GDB命令,使用GDB进行调试时还有很多其他的功能和命令可以使用,可以通过阅读GDB的文档来更详细地了解。

gdb 使用方法

gdb 使用方法

gdb 使用方法一、基本用法1. 启动gdb可以通过在命令行中输入"gdb"命令来启动gdb,并指定要调试的可执行文件作为参数。

例如,要调试名为"program"的可执行文件,可以输入以下命令:```gdb program```2. 设置断点断点是一个程序中的特定位置,当程序执行到该位置时,会暂停执行,从而可以检查程序的状态。

可以使用"gdb"命令设置断点。

例如,要在程序的第10行设置一个断点,可以输入以下命令:```break 10```可以使用"break"命令指定函数名或文件名和行号来设置断点。

3. 运行程序在gdb中运行程序时,可以使用"run"命令。

如果程序需要命令行参数,可以在"run"命令后面添加这些参数。

例如,要运行程序并传递参数"arg1"和"arg2",可以输入以下命令:```run arg1 arg2```4. 执行程序在gdb中执行程序时,可以使用"continue"命令。

该命令会让程序继续执行,直到遇到下一个断点或程序结束。

5. 单步执行在gdb中,可以使用"next"命令逐行执行程序。

该命令会执行当前行,并将程序指针移到下一行。

如果当前行是函数调用,"next"命令会将程序指针移到函数的第一行。

6. 查看变量的值在gdb中,可以使用"print"命令查看变量的值。

例如,要查看变量"var"的值,可以输入以下命令:```print var```7. 修改变量的值在gdb中,可以使用"set"命令修改变量的值。

例如,要将变量"var"的值设置为10,可以输入以下命令:```set var = 10```8. 退出gdb在gdb中退出调试会话时,可以使用"quit"命令。

GDB 命令参考手册

GDB 命令参考手册
报告你进程的一般状态信息。如果进程停止了。这个报告还包括停止的原因和收到的信号
info proc all
显示上面proc命令这些命令返回的所有信息
quit
q
退出调试程式
frame
shell
shell ls
执行shell命令
make
不退出gdb而重新编译生成可执行文件
disassemble
显示反汇编代码
thread
thread thread_no
用来在线程之间的转换
set
set width 70
就是把标准屏幕设为70列
set var=54
设置变量的值。
forward/search
search string
从当前行向后查找匹配某个字符串的程式行
reverse-search
forward/search相反,向前查找字符串。使用格式同上
up/down
上移/下移栈帧,使另一函数成为当前函数
暂停,步进时自动显示表达式的值
finish
执行直到函数返回 执行直到当前stack返回数返回
where
命令用来查看执行的代码在什么地方中止
backtrace
bt
显示函数调用得所有栈框架(stack frames)的 踪迹和当前函数的参数的值。
watch
w
w exp
监视表达式的值
kill
k
k
结束当前调试的程式
print
p
p exp
打印表达式的值
p/fmt exp
fmt为以下值

gdb 带命令行选项的参数

gdb 带命令行选项的参数

gdb 带命令行选项的参数详解GDB(GNU Debugger)是一个用于调试程序的强大工具,它允许你在程序执行过程中观察程序的状态、检查变量的值,以及定位和修复错误。

你可以在命令行中使用一些选项来配置GDB 的行为。

以下是一些常见的GDB 命令行选项:1. 指定要调试的程序:```gdb [program]```这是最基本的用法,`program` 是你要调试的可执行文件的名称。

2. 指定核心转储文件:```gdb [program] core```如果程序崩溃并生成了核心转储文件,你可以使用该选项来调试核心转储文件。

3. 加载符号文件:```gdb [program] -s [symbol-file]```使用`-s` 选项可以指定符号文件,这对于调试没有调试信息的二进制文件很有用。

4. 指定启动参数:```gdb --args [program] [args...]```使用`--args` 选项可以将参数传递给正在调试的程序。

5. 使用批处理模式:```gdb -batch -ex "command1" -ex "command2" [program]````-batch` 选项可以使GDB 在执行完指定命令后立即退出。

`-ex` 选项用于指定在启动GDB 后要执行的命令。

6. 使用交互式Shell:```gdb -i=mi [program]````-i=mi` 选项启用了GDB 的机器接口模式,这对于与其他程序(如IDE)进行集成很有用。

7. 设置断点:```gdb -ex "break [function]" [program]```使用`-ex` 选项可以在启动时设置断点。

8. 设置环境变量:```gdb [program] --eval-command="set environment VARNAME=VALUE"```使用`--eval-command` 选项可以在启动时设置GDB 命令。

命令行中的gdb用法

命令行中的gdb用法

命令行中的gdb用法在命令行中使用GDB(GNU调试器)调试程序可以帮助你理解程序的执行过程,查找和修复错误。

下面是一些常用的GDB命令:1. **启动GDB:**```bashgdb your_program```2. **设置断点:**设置断点可以让程序在特定位置停止执行,以便你可以查看或修改变量的值。

例如,在函数`foo`的开始处设置断点:```gdbbreak foo```或者在特定行设置断点:```gdbbreak your_program.c:23```3. **运行程序:**在GDB中,你可以使用`run`命令来启动你的程序。

你也可以使用`start`命令从程序的开始处运行。

4. **查看变量的值:**在GDB中,你可以使用`print`命令来查看变量的值。

例如,如果你有一个整数变量`x`,你可以使用以下命令查看它的值:```gdbprint x```5. **步进:**使用`next`命令可以执行下一行代码。

如果你想进入一个函数,可以使用`step`命令。

6. **继续执行:**使用`continue`命令可以继续执行程序,直到遇到下一个断点或程序结束。

7. **查看堆栈:**使用`backtrace`命令可以查看当前堆栈的调用情况。

8. **设置条件断点:**你可以设置条件断点,以便在满足特定条件时停止程序。

例如,以下命令将在变量`x`等于5时停止程序:```gdbbreak x=5```9. **列出源代码:**使用`list`命令可以显示当前执行的代码。

你可以使用`list your_function`来查看特定函数的源代码。

10. **查看和修改变量的值:**使用`set`命令可以修改变量的值。

例如,以下命令将变量`x`的值设置为10:```gdbset x=10```11. **退出GDB:**使用`quit`或`exit`命令可以退出GDB。

如果你想在不保存更改的情况下退出,可以使用`q`或`x`。

GDB命令笔记

GDB命令笔记

GDB命令笔记1我们可以设置gdb的屏幕大小。

键入:(gdb)set width 70就是把标准屏幕设为70列。

2设置断点。

设置方法很简单:break或简单打b后面加行号或函数名3运行的命令是run或rgdb提供两种方式:1. 单步进入,step into就是跟踪到函数内啦。

命令是step或s2.单步,next,就是简单的单步,不会进入函数。

命令是next或n这两个命令还有别的用法以后再说。

5 用l/list命令来显示原代码2.c或continue命令让我们继续被中断的程序3.bt或backtrace命令。

这个命令可以显示栈中的内容。

4.检查表达式的值的命令是p或print格式是p <表达式>5.l或list显示原代码符号,l或list加<行号>就显示从<行号>开始的原代码。

6.最通常的命令就是使用一个参数:$gdb <可执行文档名>你还可以同时为你的执行文件指定一个core文件:$gdb <可执行文件名> core你也可以为你要执行的文件指定一个进程号:$gdb <可执行文件名> <进程号> 如:&gdb os 1234将使gdb与进程1234相联系(attach)7空行(直接回车)表示重复上一个命令。

7.如果你只想看看命令的列表或选项,你可以在命令行下打M-?(就是按着ESC键同时按SHIFT和?键)。

你可以直接在命令行下打试试。

(gdb)<M-?>8.除了使用'help'你还可以使用gdb的命令'info'和'show'来查询你程序的状态,每个命令可以查询一系列的状态。

这些命令以恰当的方式显示所有的子命令。

`info'此命令(可以缩写为'i')用来显示你程序的状态。

比如,你可以使用info args 列出你程序所接受的命令行参数。

gdb常用命令详解

gdb常用命令详解

一、显示源代码GDB 可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中。

不然就看不到源程序了。

当程序停下来以后,GDB会报告程序停在了那个文件的第几行上。

你可以用list命令来打印程序的源代码。

还是来看一看查看源代码的GDB命令吧。

list显示程序第linenum行的周围的源程序。

list显示函数名为function的函数的源程序。

list显示当前行后面的源程序。

list -显示当前行前面的源程序。

一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是10行,当然,你也可以定制显示的范围,使用下面命令可以设置一次显示源程序的行数。

set listsize设置一次显示源代码的行数。

show listsize查看当前listsize的设置。

list命令还有下面的用法:list ,显示从first行到last行之间的源代码。

list ,显示从当前行到last行之间的源代码。

list +往后显示源代码。

一般来说在list后面可以跟以下这们的参数:行号。

<+offset> 当前行号的正偏移量。

<-offset> 当前行号的负偏移量。

哪个文件的哪一行。

函数名。

哪个文件中的哪个函数。

<*address> 程序运行时的语句在内存中的地址。

二、搜索源代码不仅如此,GDB还提供了源代码搜索的命令:forward-searchsearch向前面搜索。

reverse-search全部搜索。

其中,就是正则表达式,也主一个字符串的匹配模式,关于正则表达式,我就不在这里讲了,还请各位查看相关资料。

三、指定源文件的路径某些时候,用-g编译过后的执行程序中只是包括了源文件的名字,没有路径名。

GDB提供了可以让你指定源文件的路径的命令,以便GDB进行搜索。

directorydir加一个源文件路径到当前路径的前面。

如果你要指定多个路径,UNIX下你可以使用“:”,Windows下你可以使用“;”。

gdb命令详解

gdb命令详解

gdb 命令详解awatch 指定一个变量,如果这个变量被读或者被写,则暂停程序运行,在调试器中显示信息,并等待下一个调试命令。

参考rwatch和watch命令。

backtrace 显示函数调用得所有栈框架(stack frames)的 踪迹和当前函数的参数的值,bt是这个命令的简写。

break 设置一个断点,这个命令需要指定代码行或者函数名作为参数clear 删除一个断点,这个命令需要制定代码行或者函数名作为参数continue 调试器停止的地方继续执行Ctrl-C 在当前位置停止执行正在执行的程序,断点在当前行disable 禁止断点功能,这个命令需要禁止的断点在断点列表索引值作为参数display 在断点的停止的地方,显示指定的表达式的值。

(显示变量)enable 允许断点功能,这个命令需要允许的断点在断点列表索引值作为参数finish 继续执行,知道当前函数返回ignore 忽略某个断点制定的次数。

例:ignore 4 23 忽略断点4的23次运行,在第24次的时候中断info breakpoints 查看断点信息info display 查看设置的需要显示的表达式的信息 kill 终止当前debug的进程list 显示10行代码。

如果没有提供参数给这个命令,则从当前行开始显示10行代码。

如果提供了函数名作为参数,则从函数开头显示。

如果提供代码行的编号作为参数,这一行作为开头显示。

load 动态载入一个可执行文件到调试器。

next 执行下一行的源代码的所有指令。

如果是函数调用,则也当作一行源代码,执行到此函数返回nexti 执行下一行的源代码中的一条汇编指令print 显示变量的值ptype 显示变量的类型return 强制从当前函数返回run 从程序开始的地方执行rwatch 指定一个变量,如果这个变量被读,则暂停程序运行,在调试器中显示信息,并等待下一个调试命令。

参考rwatch 和watch命令。

linux系统调试工具GDB 命令详细解释..

linux系统调试工具GDB 命令详细解释..

Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。

和所有常用的调试工具一样,gdb提供了以下功能:# 监视程序中变量的值# 在程序中设置断点# 程序的单步执行在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc或cc编译时就需要用-g参数来打开程序的调试选项。

调试开始时,必须先载入要进行调试的程序,可以用以下两种方式:* 在启动gdb后执行以下命令:file 可执行文件路径* 在gdb启动时就载入程序:gdb 可执行文件路径载入程序后,接下来就是要进行断点的设置,要监视的变量的添加等工作,下面对在这个过程中常会用到的命令逐一进行介绍:* list:显示程序中的代码,常用使用格式有:list输出从上次调用list命令开始往后的10行程序代码。

list -输出从上次调用list命令开始往前的10行程序代码。

list n输出第n行附近的10行程序代码。

list function输出函数function前后的10行程序代码。

* forward/search:从当前行向后查找匹配某个字符串的程序行。

使用格式:forward/search 字符串查找到的行号将保存在$_变量中,可以用print $_命令来查看。

* reverse-search:和forward/search相反,向前查找字符串。

使用格式同上。

* break:在程序中设置断点,当程序运行到指定行上时,会暂停执行。

使用格式:break 要设置断点的行号* tbreak:设置临时断点,在设置之后只起作用一次。

使用格式:tbreak 要设置临时断点的行号* clear:和break相反,clear用于清除断点。

使用格式:clear 要清除的断点所在的行号* run:启动程序,在run后面带上参数可以传递给正在调试的程序。

gdb 带命令行选项的参数

gdb 带命令行选项的参数

gdb 带命令行选项的参数
摘要:
1.概述GDB
2.GDB 的命令行选项参数
3.常用的GDB 命令行选项参数
4.GDB 命令行选项参数的使用方法
5.总结
正文:
GDB 是一种强大的调试工具,可以用于调试C 和C++程序。

在使用GDB 时,我们可以通过命令行选项参数来控制GDB 的行为和输出。

GDB 的命令行选项参数可以在GDB 命令行界面中使用,它们通常以“-”开头,后面跟参数名。

例如,“-g”选项表示以调试模式启动程序,“-p”选项表示指定程序的入口点。

下面是一些常用的GDB 命令行选项参数:
- -g:以调试模式启动程序
- -p:指定程序的入口点
- -c:指定调试程序的命令行参数
- -s:指定调试程序的源文件路径
- -O:设置调试选项
- -v:显示版本信息
使用GDB 命令行选项参数的方法非常简单,只需在GDB 命令行界面中
输入选项参数即可。

例如,如果想以调试模式启动程序,可以输入“-g”选项,如果想指定程序的入口点,可以输入“-p”选项,并跟入口点的文件路径和行号。

GDB使用说明

GDB使用说明

GDB使用说明文档一、简介:GDB能让你观察一个程序在执行时的内部活动,或程序出错时发生了什么。

GDB主要能为你做以下四件事,帮助你找出程序中的错误。

1.运行你的程序,设置所有的能影响程序运行的东西。

2.保证你的程序在指定的条件下停止。

3.当你程序停止时,让你检查发生了什么。

4.改变你的程序。

那样你可以试着修正某个bug引起的问题,然后继续查找另一个bug.二、GDB运行方式1.通常的调试可执行程序:gdb <可执行文档名>2.调试执行文件指定一个core文件:gdb <可执行文件名> core3.为执行的文件指定一个进程号:gdb <可执行文件名> <进程号>三、GDB常用命令下面先说明GDB的基本指令:(大部分命令使用时只要输入第一个字母就好了,同时支持TAB的自动补全,与shell相类似)1.help:查看帮助2.file:指定一个可执行文件进行调试,gdb将读取些文件的调试信息3.list:列出程序源文件4.run:装载完要调试的可执行文件后,可以用run命令运行可执行文件5.break:设置断点breakpoint,如b 25,则在源程序的第25行设置一个断点,当程序执行到第25行时,就会产生中断;也可以使用b funcname,funcname为函数的名称,当程序调用些函数时,则产生中断6.continue:c命令可以使中断的程序继续执行,直到下一个中断点或程序结束7.print:输入某个变量的值,如程序定义了一个int aa的就是,p aa就会输出aa的当前值8.next:程序执行到断点时中断执行,可以用n指令进行单步执行9.step:程序执行到断点时中断执行,可以用s指令进行单步执行进某一函数,如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish10.attach:命令为attach PROCESS-ID,这个命令把一个已经运行的进程(在gdb外启动)连接入gdb,以便调试。

gdb bt 参数-概述说明以及解释

gdb bt 参数-概述说明以及解释

gdb bt 参数-概述说明以及解释1.引言1.1 概述引言部分是文章的开篇,用于介绍文章的概述,为读者提供一个整体的认识。

在本文中,我们将着重介绍GDB调试工具中的bt参数。

GDB 是一款功能强大的调试器,可帮助开发人员在程序出现问题时进行调试和定位错误。

而bt参数是GDB提供的一个重要命令,用于显示函数调用栈信息。

通过理解和掌握bt参数的使用方法,我们可以更加高效地进行程序调试和错误排查。

在本篇文章中,我们将首先对GDB进行简要的介绍,包括它的基本功能和使用场景。

然后,我们将详细介绍GDB的调试命令,包括常用的调试命令和调试技巧。

接着,我们将重点探讨GDB中的bt参数,解释它的作用和用法,并通过实例来演示如何使用bt参数进行函数调用栈的跟踪。

最后,我们将总结GDB的重要性,分析bt参数的作用,并给出一些建议,帮助读者更好地利用GDB进行程序调试。

通过阅读本文,读者将能够了解GDB调试工具的基本原理和使用方法,掌握bt参数的基本用法,以及在实际的程序调试过程中如何高效地利用GDB进行错误定位和排查。

希望本文能够对读者在日常的开发工作中有所帮助,提升程序调试的效率和准确性。

1.2 文章结构文章结构部分的内容应该包括对整篇文章的组织和结构进行说明。

下面是一个可能的描述:文章结构部分介绍了整篇文章的组织和结构。

本文共分为三个主要部分:引言、正文和结论。

引言部分包括文章的概述、文章结构和目的。

在概述部分,将简要介绍GDB及其在调试过程中的重要性。

在文章结构部分,将说明整篇文章按照引言、正文和结论的结构进行组织。

在目的部分,将阐述本文的目标和意义,即分析GDB中的bt参数对调试的作用。

正文部分是本文的主要内容,将详细介绍GDB的简介、GDB调试命令和GDB中的bt参数。

在GDB简介部分,将介绍GDB的定义、功能和用途,以便读者对GDB有一个初步的了解。

在GDB调试命令部分,将介绍一些常用的GDB调试命令,以帮助读者更好地使用GDB进行调试。

GDB 命令行参数

GDB 命令行参数

GDB 命令行参数
启动 GDB:
l gdb executable
l gdb -e executable -c core-file
l gdb executable -pid process-id
(使用命令 'ps -auxw' 可以查看进程的 pid)
GDB命令
GDB 操作提示
l 在编译可执行文件时需要给 gcc 加上 "-g" 选项,这样它才会为生成的可执行文件加入额外的调试信息。

l 不要使用编译器的优化选项,比如: "-O","-O2"。

因为编译器会为了优化而改变程序流程,那样不利于调试。

l 在 GDB 中执行 shell 命令可以使用:shell command
l GDB 命令可以使用 TAB 键来补全。

按两次 TAB 键可以看到所有可能的匹配。

l GDB 命令缩写:例如 info bre 中的 bre 相当于 breakpoints。

gdb命令总结

gdb命令总结

gdb命令总结gdb 中可以使⽤ Linux 中的 shell 命令,需要使⽤ gdb 中的 shell 命令实现,使⽤⽅法如下:shell <command string>u 直接执⾏到那⼀⾏,在循环当中,if I==3000,可以停⽌到这⾥。

b 892 if i==5530u 892 if i==5530编译程序时需要加上-g,之后才能⽤gdb进⾏调试:gcc -g main.c -o maingdb中命令:回车键:重复上⼀命令(gdb)help:查看命令帮助,具体命令查询在gdb中输⼊help + 命令,简写h(gdb)run:重新开始运⾏⽂件(run-text:加载⽂本⽂件,run-bin:加载⼆进制⽂件),简写r(gdb)start:单步执⾏,运⾏程序,停在第⼀执⾏语句(gdb)list:查看原代码(list-n,从第n⾏开始查看代码。

list+ 函数名:查看具体函数),简写l(gdb)set:设置变量的值(gdb)next:单步调试(逐过程,函数直接执⾏),简写n(gdb)step:单步调试(逐语句:跳⼊⾃定义函数内部执⾏),简写s(gdb)backtrace:查看函数的调⽤的栈帧和层级关系,简写bt(gdb)frame:切换函数的栈帧,简写f(gdb)info:查看函数内部局部变量的数值,简写i(gdb)finish:结束当前函数,返回到函数调⽤点(gdb)continue:继续运⾏,简写c(gdb)print:打印值及地址,简写p(gdb)quit:退出gdb,简写q(gdb)break+num:在第num⾏设置断点,简写b(gdb)info breakpoints:查看当前设置的所有断点(gdb)delete breakpoints num:删除第num个断点,简写d(gdb)display:追踪查看具体变量值(gdb)undisplay:取消追踪观察变量(gdb)watch:被设置观察点的变量发⽣修改时,打印显⽰(gdb)i watch:显⽰观察点(gdb)enable breakpoints:启⽤断点(gdb)disable breakpoints:禁⽤断点(gdb)x:查看内存x/20xw 显⽰20个单元,16进制,4字节每单元(gdb)run argv[1] argv[2]:调试时命令⾏传参(gdb)set follow-fork-mode child#Makefile项⽬管理:选择跟踪⽗⼦进程(fork())core⽂件:先⽤$ ulimit -c 1024 开启core,当程序出错会⾃动⽣成core⽂件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GDB 命令行参数
启动 GDB:
l gdb executable
l gdb -e executable -c core-file
l gdb executable -pid process-id
(使用命令 'ps -auxw' 可以查看进程的 pid)
GDB命令
GDB 操作提示
l 在编译可执行文件时需要给 gcc 加上 "-g" 选项,这样它才会为生成的可执行文件加入额外的调试信息。

l 不要使用编译器的优化选项,比如: "-O","-O2"。

因为编译器会为了优化而改变程序流程,那样不利于调试。

l 在 GDB 中执行 shell 命令可以使用:shell command
l GDB 命令可以使用 TAB 键来补全。

按两次 TAB 键可以看到所有可能的匹配。

l GDB 命令缩写:例如 info bre 中的 bre 相当于 breakpoints。

相关文档
最新文档