分享

gdb调试命令(转)

 Tornador 2013-04-08

gdb调试命令(转)

2009-10-30 09:09:16 / 个人分类:工具使用

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;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多