linux調試
1. 如何在linux系統下調試C++程序
http://blog.csdn.net/wfdtxz/article/details/7368357
GDB 是GNU開源組織發布的一個強大的UNIX下的程序調試工具。或許,各位比較喜歡那種圖形界面方式的,像VC、BCB等IDE的調試,但如果你是在 UNIX平台下做軟體,你會發現GDB這個調試工具有比VC、BCB的圖形化調試器更強大的功能。所謂「寸有所長,尺有所短」就是這個道理。 一般來說,GDB主要幫忙你完成下面四個方面的功能:
啟動你的程序,可以按照你的自定義的要求隨心所欲的運行程序。
可讓被調試的程序在你所指定的調置的斷點處停住。(斷點可以是條件表達式)
當程序被停住時,可以檢查此時你的程序中所發生的事。
動態的改變你程序的執行環境。
從上面看來,GDB和一般的調試工具沒有什麼兩樣,基本上也是完成這些功能,不過在細節上,你會發現GDB這個調試工具的強大,大家可能比較習慣了圖形化的調試工具,但有時候,命令行的調試工具卻有著圖形化工具所不能完成的功能。讓我們一一看來。
gdb基本命令列表:
實例:
1 新建一個源文件vi swap.cc
源文件內容如下:
#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
int main()
{
int i,j;
cout<<endl<<"Input two int number:"<<endl;
cin>>i>>j;
cout<<"Before swap(),i="<<i<<" j="<<j<<endl;
swap(i,j);
cout<<"After swap(),i="<<i<<" j="<<j<<endl<<endl;
return 0;
}
直接復制粘貼生成源文件
2.生成可執行文件 g++ -g -o swap swap.cc,注意必須使用-g參數,編譯會加入調試信息,否則無法調試執行文件
3.啟動調試 gdb swap
3.1 查看源文件 list 1,回車重復上一次指令
3.2設置調試斷點 break 16,在第16行設置斷點,info break查看斷點信息(亦可使用縮寫i b )
3.3 調試 運行 輸入run 或者r
3.3 單步調試,step 或者 s進入函數內部
3.4查看變數 print b 或者 p b
3.5查看函數堆棧bt,退出函數finish
3.6 繼續運行直到下一個斷點或主函數結束continue或者c
3.7 退出調試 輸入q
2. 如何調試Linux shell腳本
最簡單的調試命令當然是使用echo命令。您可以使用echo在任何懷疑出錯的地方列印任何變數值。這也是絕大多數的shell程序員要花費80%的時間來調試程序的原因。Shell程序的好處在於不需要重新編譯,插入一個echo命令也不需要多少時間。
shell也有一個真實的調試模式。如果在腳本"strangescript" 中有錯誤,您可以這樣來進行調試:
sh -x strangescript
這將執行該腳本並顯示所有變數的值。
shell還有一個不需要執行腳本只是檢查語法的模式。可以這樣使用:
sh -n your_script
這將返回所有語法錯誤。
linux/unix shell l腳本調試方法
Shell提供了一些用於調試腳本的選項,如下所示:
-n
讀一遍腳本中的命令但不執行,用於檢查腳本中的語法錯誤
-v
一邊執行腳本,一邊將執行過的腳本命令列印到標准錯誤輸出
-x
提供跟蹤執行信息,將執行的每一條命令和結果依次列印出來
使用這些選項有三種方法,一是在命令行提供參數
$ sh -x ./script.sh二是在腳本開頭提供參數
#! /bin/sh -x第三種方法是在腳本中用set命令啟用或禁用參數
#! /bin/sh
if [ -z "$1" ]; then
set -x
echo "ERROR: Insufficient Args."
exit 1
set +x
fiset -x和set +x分別表示啟用和禁用-x參數,這樣可以只對腳本中的某一段進行跟蹤調試。
3. linux 匯編工具以及調試
當然是
gcc
+
gdb
不過gcc/gdb
用
AT&T
風格的匯編,和
dos/win32
下的
Intel
風格不太一樣,你要去了解一下具體區別。
.s
文件表示匯編源碼文件,
可以用gcc
編譯,比如
gcc
-g
a.s
-o
a.exe
然後就可以用
gdb
a.exe
來調試了,用
print
$eax
來顯示
eax
寄存器,等等。
具體
gdb
命令自己搜索了解一下。
下面給個入門例子,把下面代碼存入
a.s
,
就可以在
linux
下用我上面說的方法編譯和調試了:
hello:
.string
"Hello
world\n"
.globl
main
main:
movl
$4,
%eax
movl
$1,
%ebx
movl
$hello,
%ecx
movl
$12,
%edx
int
$0x80
ret
4. linux裡面如何單步調試
1編譯的時候加入調試,2運行時設置斷點或單步執行;
春節時還玩來著,現在.....忘的差不多了
5. Linux下gdb調試的幾個簡單命令
和在IDE上差不多,無非是單步 繼續 斷點之類的
list列出代碼
run運行
step單步
break斷點
watch查看變數
。。。。
6. linux內核調試的主要方法
1。printk ,以及系統日誌。閱讀源碼,想像代碼運行的情況,結合列印的信息,推測問題所在。
2。內核調試器,例如 Kgdb 。
3。user mode linux 。
4。在虛擬機上調試。例如 Bochs 。
7. linux 編程工具怎麼斷點調試
編譯:gcc -o xxx xxx.c 調試:gcc -o xxx -g xxx.c gdb xxx run break line(行數)或函數名 info 查看斷點 n 下一步 print +變數 列印變數值 q 退出調試 c 繼續執行到下一個斷點
8. 怎麼在linux系統下調試程序
(1)假設要debug的進程號為1000,運行如下命令:
$ gdb -p 1000
使用此命令即可使gdb附加到進程。
(2)載入libpython腳本
如果你的gdb是redhat或fedora等廠商修改過的,會有--python選項,使用此選項即可指定gdb啟動時載入的Python擴展腳本(此腳本是擴展gdb的,不是我們需要debug的腳本)。
$ gdb --python /path/to/libpython .py -p 1000
如果安裝的是GNU的gdb,就需要打開gdb後手動載入libpython.py腳本
(gdb) python
> import sys
>sys.path.insert(0, '/path/to/libpython.py' )
> import libpython
>end
(gdb)
這時就可以使用py-bt命令列印當前線程的Python traceback了。libpython還提供很多命令,例如py-print列印變數,py-locals列印所有本地變數等等,詳細可打開libpython.py查看。