gdb filename
list/l 查看文档
search string 查找匹配的字符串
break/b line-number/function-name/line-or-function if condition/routine-name 设置断点
tbreak 设置临时断点
condition breakpoint 条件表达式:设置断点在一定条件下才能生效
info break/b 查看断点
clear line-number清除该行所有断点
delete breakpoint取消断点
disable/enable breakpoint 禁能/使能断点
ignore breakpoint n:忽略断点
countinue/c 从断点继续执行
awatch 变量或表达式:用来增加一个观察点,当表达式的值发生改变或表达式的值被读取时,程序就会停止运行
watch 变量或表达式:用来增加一个观察点,当表达式的值发生改变时,程序就会停止运行
commands breakpoint:设置在遇到断点后执行特定的指令
run/r 执行程序
next/n 不进入的单步执行
step 进入的单步执行
finish 结束执行当前函数,显示其返回值
call name 调用和执行一个函数
jump line-number 让程序跳到指定行开始调试
kill:结束当前程序的调试
print/p 查看变量值
----------------------------
print 是gdb的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外,还可以包含以下内容:
l 对程序中函数的调用
(gdb) print find_entry(1,0)
l 数据结构和其他复杂对象
(gdb) print *table_start
$8={e=reference=’\000’,location=0x0,next=0x0}
l 值的历史成分
(gdb)print $1 ($1为历史记录变量,在以后可以直接引用 $1 的值)
l 人为数组
人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。早期的调试程序没有很好的方法将任意的指针换成一个数组。就像对待参数一样,让我们查看内存中在变量h后面的10个整数,一个动态数组的语法如下所示:
base@length
因此,要想显示在h后面的10个元素,可以使用h@10:
(gdb)print h@10
$13=(-1,345,23,-234,0,0,0,98,345,10)
------------------------------------
whatis 显示某个变量的类型
ptype 比whatis的功能更强,他可以提供一个结构的定义
display:增加要显示值的表达式
set args 修改发送给程序的参数
show args 查看其缺省参数的列表
backtrace/bt 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where) ;
打印指定个数的栈帧(stack frame)
down 下移栈帧,使得另一个函数成为当前函数
up 上移栈帧,使另一函数成为当前函数
frame 选择下一条continue命令的帧 ;打印栈帧
signal 将一个信号发送到正在运行的进程
until 结束当前循环
make 在不退出 gdb 的情况下运行 make 工具
-------------------------------
info files 显示被调试文件的详细信息。
info func 显示所有的函数名称。
info local 显示当函数中的局部变量信息。
info prog 显示被调试程序的执行状态。
info var 显示所有的全局和静态变量名称。
--------------------------------
在 gdb 提示符处键入help,将列出命令的分类,主要的分类有:
* aliases:命令别名
* breakpoints:断点定义;
* data:数据查看;
* files:指定并查看文件;
* internals:维护命令;
* running:程序执行;
* stack:调用栈查看;
* statu:状态查看;
* tracepoints:跟踪程序执行。
键入 help 后跟命令的分类名,可获得该类命令的详细清单。
--------------------------------------------------------
--------------------------------------------------------
RTPSession sess;
RTPSessionParams sessparams;
RTPSession sess;
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_list.h:347
RTPSession sess;
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_list.h:347
main () at rtptransmitter.h:220(RTPTransmissionParams)
main () at rtpudpv4transmitter.h:64(RTPUDPv4TransmissionParams)
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_list.h:347
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_list.h:348
main () at rtpudpv4transmitter.h:64(RTPUDPv4TransmissionParams)
RTPSessionParams sessparams;
status = sess.Create(sessparams,&transparams);
main () at rtpaddress.h:87(RTPAddress)
main () at rtpipv4address.h:60(RTPIPv4Address)
main () at rtpsessionparams.h:90(RTPSessionParams)
main () at rtpudpv4transmitter.h:73(SetPortbase)
status = sess.Create(sessparams,&transparams);
checkerror(status);
main () at rtptimeutilities.h:233(nanosleep)
#0 0x0804912a in fclose@plt ()
#1 0x08049819 in main () at Send.cpp:95
int main(void)
{
RTPSession sess;
RTPUDPv4TransmissionParams transparams;
RTPSessionParams sessparams;
uint16_t portbase=8000,destport=9000;
uint8_t localip[]={127,0,0,1};
RTPIPv4Address addr(localip,destport);
int status,len,i=0;
char str[1210];
FILE *fp;
sessparams.SetOwnTimestampUnit(1.0/8000.0);
transparams.SetPortbase(portbase);
status = sess.Create(sessparams,&transparams);
checkerror(status);
status = sess.AddDestination(addr);
checkerror(status);
fp=fopen("/root/Desktop//Lws.txt","r+");
if(fp==NULL)
{
printf("open /root/Desktop/Lws.txt failed!");
exit(0);
}
while((len=fread(&str, sizeof(char), 1200, fp))!=0)
{
// send the packet
status = sess.SendPacket((void *)str,len,0,false,10);
checkerror(status);
i++;
RTPTime::Wait(RTPTime(0,10));
}
fclose(fp);
printf("Send %d packet!\n",i);
status = sess.Poll();
checkerror(status);
RTPTime::Wait(RTPTime(1,0));
sess.BYEDestroy(RTPTime(10,0),0,0);
return 0;
}