gdb常用命令
Posted 特务小强
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gdb常用命令相关的知识,希望对你有一定的参考价值。
find ./ -name "*.sql" | awk ‘{ cmd_str="\""$0"\""; print cmd_str}‘ | xargs grep -rn IFUSEDESTROUTE
dir /v8t/ngtf/server/trade_server:$cdir:$cwd
break commit_mq_thread.cpp:59 if (processing_idx==636645)
dir /tmp/src/data_pump:$cdir:$cwd
dir /home/yong.liu2/src/arch/offer2/offer/exch_market/offer_test/recv_czcemd:$cdir:$cwd
break zk_mgr.cpp:210
break zk_mgr.cpp:902
gdb -c core文件 执行文件 #查看core文件
gdb -d /tmp/jinyuankehuwenti/src_v8t/product/v8t/trade_server:/tmp/jinyuankehuwenti/src_v8t/ngtf/server/trade_server trade_server
>dir /tmp/jinyuankehuwenti/src_v8t/product/v8t/trade_server:/tmp/jinyuankehuwenti/src_v8t/ngtf/server/trade_server:$cdir:$cwd #设置源代码路径
break process_thread.cpp:123 if ((info.serialno==660390))
>break public_business.cpp:8321 if (FldCancelReturnReq.entrust_no==1)
>display FldShMarginDisSyn.bs_margin_flag
>break public_business.cpp:5774 if ((cur_serial>=854398)&&(cur_serial<=85502))
break sync_hold_handle.cpp:5290 if ((strcmp(req.tx_no.buf, "02200667")==0)&&(strcmp(req.contract_code.buf,"ag1512")==0))
dir /tmp/offer:/tmp/offer/zk_2:$cdir:$cwd
break zk_mgr.cpp:1153
gdb -d /tmp/v8t_8316_test/src/product/v8t/trade_server trade_server
gdb -d {src路径} 程序名|;|core文件
>start #开始运行并在main中停止
>dir /tmp/v8t_8316_test/src/product/v8t/trade_server:/tmp/v8t_8316_test/src/ngtf/server/trade_server/:$cdir:$cwd #设置源代码路径
>list CAppServer::Run() #查看源代码
>ctrl+x+a #显示/隐藏图形化
> break appserver.cpp:318 if ((serialno==101475)||(serialno==105431)) #条件断点
break process_thread.cpp:123 if (nextSequence==25528)
break appserver.cpp:238
> break public_business.cpp:5933 if (FldDoneReturnReq.entrust_no==151940)
> break order_manage.cpp:2045 if (strcmp(FldFundReq.cust_no, "1001101771")==0)
break order_manage.cpp:12530
>break appserver.cpp:318 if ((serialno>=1023942)) #((serialno>=1048506))
break public_business.cpp:10088 if (strcmp(FldDoneReturnReq.exch_done_no, "00000594")==0)
(gdb) call close(1)
(gdb) call close(2)
(gdb) shell tty
/dev/pts/0
(gdb) call open("/dev/pts/0",2)
(gdb) call open("/dev/pts/0",2)
>dir /tmp/v8t_src/v8t_8311/product/v8t/trade_bu
>break entrust.cpp:78
> break module_func.cpp:1258
break trade_pub.cpp:14562
break P_cal_can_open_qty
1.命令:file 文件名
功能:将指定的可执行文件加载到gdb中;
命令:-d {directory}
-directory={directory}
功能:指定源文件和头文件所在的路径
命令:set args 运行参数
show args
功能:设置或查看运行参数
命令:path [directory] #把目录directory加入到搜索可执行文件和符号文件的路径中
show paths #查看程序的运行路径。
功能:设置或查看程序运行路径
命令:-cd={directory}
功能:以指定目录作为当前路径来运行 gdb
命令:
set environment varname [=value] #设置环境变量。如:set env USER=hchen
show environment [varname] #查看环境变量。
功能:设置或查看环境变量
命令:cd
命令:
attach
detach
功能:挂接/取消挂接的进程
命令:info program #查看程序的是否在运行,进程号
info break [n] #查看断点
info breakpoints [n]
info watchpoints #列出当前设置的所有观察点
info locals #打印出当前函数中所有局部变量及其值
info catch #打印出当前的函数中的异常处理信息
info [files/share] #列出当前的文件,共享库
功能:查看程序的是否在运行,进程号
命令:?????
功能:指定工作目录、运行参数
命令:?????
功能:加载可执行文件或依赖的动态库
命令: list
功能: 查看源代码
命令:?????
功能:查看指定文件、指定位置或函数的源代码
命令: b/break [行号] #设置断点
b/break [函数名] #设置断点
b/break [+/-]offset
b/break file:func | file:nth
b/break *address
b/break line-number if condition
b/break line threadthread-number
tbreak #设置临时的断点。中断一次后断点会被删除
命令: d/delete [breakpoint-number]#删除所有断点
d/delete [range]
clear func #清除函数func处的断点
clear nth #清除第nth行处的断点
disable [breakpoint-number | range] #
enable [breakpiont-number | range] #
enable once breakpint-number #设置指定断点有效,当到达断点时置为无效
enable del breakpiont-number #设置指定断点有效,当到达断点时删除它
命令: condition <break_list断点号列表> (condition条件)
功能: 如cond 4 i==3 在断点4上增加中断条件
命令:run
功能:运行
命令:start
功能:运行,单在main处停止;
命令: c
功能:继续运行,直到结束或碰到断点
命令:n/next
n/next number
功能:单步执行
命令:step
s/step number-of-steps-to-perform #
功能:进入函数执行
命令:finish
功能:运行程序,直到当前函数完成返回。
并打印函数返回时的堆栈地址和返回值及参数值等信息
命令:u/until #当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体
u/until line-number #继续运行直到到达指定行号,或者函数,地址等。
u/until line-number ifcondition
功能: 当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体
命令:bt/backtrace [n]
功能:打印当前的函数调用栈的所有信息
n是一个正整数,表示只打印栈顶上n层的栈信息
命令:
watch #为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序
rwatch #当表达式(变量)expr被读时,停住程序
awatch #当表达式(变量)的值被读或被写时,停住程序。
命令:
display #程序停止时显示变量和表达时
info display #显示当前所有的要显示值的表达式。
delete display/undisplay [表达式编号] #删除要显示值的表达式
disable display [表达式编号] #暂时不显示一个要表达式的值
enable display 表达式编号 #与disable display相反,使用表达式恢复显示
whatis #显示变量或函数类型
ptype #比whatis的功能更强,他可以提供一个结构的定义
二、远程调试
1.服务端
gdbserver :2345 [options] trade_server -b
gdbserver [options] COMM PROG [ARGS...]
gdbserver [] --attach COMM PID
gdbserver [] --multi COMM
Options:
--debug
--remote-debug Enable remote protocol debugging output.
2.客户端
gdb
> target remote ip:port
break public_business.cpp:14746 if (strcmp(cust_no, "82070418")==0)
break order_manage.cpp:2103 if(strcmp(req_vector[0].all_contract_code.getValue(),"SR1705-C-7000")==0)
break order_manage.cpp:753
break match_return.cpp:235
break public_business.cpp:6715
以上是关于gdb常用命令的主要内容,如果未能解决你的问题,请参考以下文章