标签:c 语言 表示 服务 cti 工具 选择 执行 off 调试器
GDB 完成的作用:
常见问题:
gdb
这样可以和 gdb 进行交互了。
gdb -tui
这样,使用了 ‘-tui‘ 选项,启动可以直接将屏幕分成了两个部分,上面显示源代码,比用 list 方便多了。这时候使用上下方向键可以产看源代码,
想要命令行使用上下键就用 [Ctrl + n] 和 [Ctrl + p].
gdb app
这样就在启动 gdb 之后直接载入了 app 可执行程序,需要注意的是,载入的 app 程序必须在编译的时候有 gdb 调试选项,例如 ‘gcc -g app app.c‘,
注意,如果修改了程序的源代码,但是没有编译,那么在 gdb 中显示的会是改动后的源代码,但是运行的是改动前的程序,这样会导致跟踪错乱的。
gdb <program> <PID>
这里,
gdb <PID>
这里,程序是一个服务程序,那么你可以指定这个服务程序运行时的进程 ID,
交互命令支持 tab 补全
(gdb) help
(gdb) file app
这样在 gdb 中载入想要调试的可执行程序 app。如果刚开始运行 gdb 而不是用 gdb app 启动的话可以这样载入 app 程序,当然编译 app 的时候要加入 -g
调试选项。
(gdb) run
要想运行准备调试的程序,可使用 run 命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符 ( < 和 > ) 和 shell 通配符
(*、?、[、])在内。
(gdb) set args no
这里,假设使用 "r yes" 设置程序启动参数为 yes,那么这里的 set args 会设置参数 argv[1] 为 no。
(gdb) show args
(gdb) list n1 n2
这样,list 可以简写为 l,将会显示 n1 和 n2 行之间的代码,如果使用 -tui 启动 gdb,将会在相应的位置显示。如果没有 n1 和 n2 参数,那么就会
默认显示当前行和之后的 10 行,再执行又下滚 10 行。另外,list 还可以接函数名。
一般来说在 list 后面可以跟以下这些参数:
(gdb) next
这样,执行一行代码,如果是函数也会跳过该函数。这个命令简化为 n。
(gdb) next N
(gdb) [Enter]
这里,直接输入回车就会执行上次的命令了。
(gdb) step
这样,也会执行一行代码,不过如果遇到函数的话就会进入函数的内部,再一行一行的执行。
(gdb) finish
这里,运行程序,直到当前函数运行完毕返回再停止。例如进入的单步执行如果已经进入了某函数,而想退出该函数返回到他的调用函数中,可使用 finish。
(gdb) until
简写为 u。这里需要把光标停止在循环的头部,然后输入 u 就自动执行全部的循环了。
(gdb) jump 5
简写为 "j 5"。需要注意的是,跳转到第 5 行执行完毕之后,如果后面没有断电则继续执行,而并不是停在那里了。另外,跳转也不会改变当前堆栈内容,
所以跳到别的函数中就会有奇怪的现象,因此跳转最好在一个函数内部进行,跳转的参数也可以是程序代码行的地址,函数名等等类似 list。
(gdb) return
这样,将会忽略当前函数还没有执行完毕的语句,强制返回。return 后面可以接一个表达式,表达式的返回值就是函数的返回值。
(gdb) call <expr>
这里,
(gdb) print <expr>
这里,print 和 call 的功能类似,不同的是,如果函数的返回值是 void 那么 call 不会打印返回值,但是 print 还是会打印出函数的返回值并且存放到
历史记录中。
(gdb) break 6
(gdb) break 46 if testsize == 100
这里,如果 testsize == 100 就在 46 行处设置断点。
(gdb) watch i != 10
这里,i != 10 这个表达式一旦变化,则停住。watch
(gdb) break func
(gdb) break filename:N
这里,给某文件中的函数设置断点是同理的。
(gdb) info breakpoints
这里,可以简写为 info break。会显示当前所有的断点,断点号,断点位置等等。
(gdb) delete N
(gdb) delete
(gdb) clear N
(gdb) continue
这里,如果没有断点就一直运行.#### 38. 终止一个正在调试的程序
(gdb) kill
这里,输入 kill 就会终止正在调试的程序。
(gdb) print var
这里,print 简写为 p,print 是 gdb 的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外,
还可以包含函数调用,复杂数据结构和历史等等。
(gdb) backtrace
简写 bt。命令产生一张列表,包含着从最近的过程开始的所有有效过程和调用这些过程的参数。当然,这里也会显示出当前运行到了哪里(文件,行)。
(gdb) show language
这里,如果 gdb 不能识别你所调试的程序,那么默认是 c 语言。
(gdb) info frame
(gdb) info source
这样会显示当前所在的源代码文件信息,例如文件名称,程序语言等。
(gdb) set language c++
这里,如果 gdb 没有检测出你的程序语言,你可以这样设置。
(gdb) set language
这里,使用没有参数的 set language 可以查看 gdb 中可以设置的程序语言。
(gdb) kill
这里,输入 kill 就会终止正在调试的程序。
(gdb) print var
这里,print 简写为 p,print 是 gdb 的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外,
还可以包含函数调用,复杂数据结构和历史等等。
(gdb) print /x var
print 可以执行显示的格式,这里用 ‘/x‘ 表示 16 进制的格式。
可以支持的变量显示格式有:
(gdb) print *a@10
这样,会显示 10 个元素,无论 a 是 double 或者是 int 的都会正确地显示 10 个元素。
(gdb) print x=4
这里,x=4 是 C/C++ 的语法,意为把变量 x 值改为 4,如果你当前调试的语言是 Pascal,那么你可以使用 Pascal 的语法:x:=4。
(gdb) whatis var
(gdb) ptype var
这里,会打印出 var 的结构定义。
标签:c 语言 表示 服务 cti 工具 选择 执行 off 调试器
原文地址:https://www.cnblogs.com/jimodetiantang/p/9170645.html