2009-10-30 09:09:16 / 個(gè)人分類(lèi):工具使用
gdb filename
list/l 查看文檔
search string 查找匹配的字符串
break/b line-number/function-name/line-or-function if condition/routine-name 設置斷點(diǎn)
tbreak 設置臨時(shí)斷點(diǎn)
condition breakpoint 條件表達式:設置斷點(diǎn)在一定條件下才能生效
info break/b 查看斷點(diǎn)
clear line-number清除該行所有斷點(diǎn)
delete breakpoint取消斷點(diǎn)
disable/enable breakpoint 禁能/使能斷點(diǎn)
ignore breakpoint n:忽略斷點(diǎn)
countinue/c 從斷點(diǎn)繼續執行
awatch 變量或表達式:用來(lái)增加一個(gè)觀(guān)察點(diǎn),當表達式的值發(fā)生改變或表達式的值被讀取時(shí),程序就會(huì )停止運行
watch 變量或表達式:用來(lái)增加一個(gè)觀(guān)察點(diǎn),當表達式的值發(fā)生改變時(shí),程序就會(huì )停止運行
commands breakpoint:設置在遇到斷點(diǎn)后執行特定的指令
run/r 執行程序
next/n 不進(jìn)入的單步執行
step 進(jìn)入的單步執行
finish 結束執行當前函數,顯示其返回值
call name 調用和執行一個(gè)函數
jump line-number 讓程序跳到指定行開(kāi)始調試
kill:結束當前程序的調試
print/p 查看變量值
----------------------------
print 是gdb的一個(gè)功能很強的命令,利用它可以顯示被調試的語(yǔ)言中任何有效的表達式。表達式除了包含你程序中的變量外,還可以包含以下內容:
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 人為數組
人為數組提供了一種去顯示存儲器塊(數組節或動(dòng)態(tài)分配的存儲區)內容的方法。早期的調試程序沒(méi)有很好的方法將任意的指針換成一個(gè)數組。就像對待參數一樣,讓我們查看內存中在變量h后面的10個(gè)整數,一個(gè)動(dòng)態(tài)數組的語(yǔ)法如下所示:
base@length
因此,要想顯示在h后面的10個(gè)元素,可以使用h@10:
(gdb)print h@10
$13=(-1,345,23,-234,0,0,0,98,345,10)
------------------------------------
whatis 顯示某個(gè)變量的類(lèi)型
ptype 比whatis的功能更強,他可以提供一個(gè)結構的定義
display:增加要顯示值的表達式
set args 修改發(fā)送給程序的參數
show args 查看其缺省參數的列表
backtrace/bt 顯示程序中的當前位置和表示如何到達當前位置的棧跟蹤(同義詞:where) ;
打印指定個(gè)數的棧幀(stack frame)
down 下移棧幀,使得另一個(gè)函數成為當前函數
up 上移棧幀,使另一函數成為當前函數
frame 選擇下一條continue命令的幀 ;打印棧幀
signal 將一個(gè)信號發(fā)送到正在運行的進(jìn)程
until 結束當前循環(huán)
make 在不退出 gdb 的情況下運行 make 工具
-------------------------------
info files 顯示被調試文件的詳細信息。
info func 顯示所有的函數名稱(chēng)。
info local 顯示當函數中的局部變量信息。
info prog 顯示被調試程序的執行狀態(tài)。
info var 顯示所有的全局和靜態(tài)變量名稱(chēng)。
--------------------------------
在 gdb 提示符處鍵入help,將列出命令的分類(lèi),主要的分類(lèi)有:
* aliases:命令別名
* breakpoints:斷點(diǎn)定義;
* data:數據查看;
* files:指定并查看文件;
* internals:維護命令;
* running:程序執行;
* stack:調用棧查看;
* statu:狀態(tài)查看;
* tracepoints:跟蹤程序執行。
鍵入 help 后跟命令的分類(lèi)名,可獲得該類(lèi)命令的詳細清單。
--------------------------------------------------------
--------------------------------------------------------
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;
}
聯(lián)系客服