linux如何調試
⑴ linux shell死了如何調試
方法:
_hell提供了一些用於調試腳本的選項,如:
?1.-n :讀一遍腳本中的命令但不執行,用於檢查腳本中的語法錯誤。
?2.-v :一邊執行腳本,一邊將執行過的腳本命令列印到標准錯誤輸出。
?3.-x :提供跟蹤執行信息,將執行的每一條命令和結果依次列印出來。該選項有三種常見的使用方法:
?1.在命令行提供參數。如:itcast@itcast$ sh -x ./script.sh
?2.在腳本開頭提供參數。如:#! /bin/sh -x
_誚瘧局杏_et命令啟用或禁用參數。如:set -x 和 set +x分別表示啟用和禁用-x參數,這樣可以只對腳本中的某一段進行跟蹤調試。
⑵ 怎麼在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查看。
⑶ linux裡面如何單步調試!
一、GDB 概述
GDB 是 GNU 開源組織發布的一個強大的 UNIX 下的程序調試工具。或許,各位比較喜歡那種圖形界面方式的,像 VC 、 BCB 等 IDE 的調試,但如果你是在 UNIX 平台下做軟體,你會發現 GDB 這個調試工具有比 VC 、 BCB 的圖形化調試器更強大的功能。所謂 「 寸有所長,尺有所短 」 就是這個道理。
一般來說, GDB 主要幫忙你完成下面四個方面的功能:
1 、啟動你的程序,可以按照你的自定義的要求隨心所欲的運行程序。
2 、可讓被調試的程序在你所指定的調置的斷點處停住。(斷點可以是條件表達式)
3 、當程序被停住時,可以檢查此時你的程序中所發生的事。
4 、動態的改變你程序的執行環境。
從上面看來, GDB 和一般的調試工具沒有什麼兩樣,基本上也是完成這些功能,不過在細節上,你會發現 GDB 這個調試工具的強大,大家可能比較習慣了圖形化的調試工具,但有時候,命令行的調試工具卻有著圖形化工具所不能完成的功能。讓我們一一看來。
二、一個調試示例
源程序: tst.c
[cpp] view plain
#include <stdio.h>
int func(int n)
{
int sum=0,i;
for(i=0; i<n; i++)
{
sum+=i;
}
return sum;
}
int main()
{
int i;
long result = 0;
for(i=1; i<=100; i++)
{
result += i;
}
printf("result[1-100] = %d /n", result );
printf("result[1-250] = %d /n", func(250) );
}
編譯生成執行文件:( Linux 下)
hchen/test> cc -g tst.c -o tst
啟動Gdb:
以上是對於gdb的感性認識,接下來系統地認識一下 gdb 吧。
三、使用 GDB
1.基礎
一般來說 GDB 主要調試的是 C/C++ 的程序。要調試 C/C++ 的程序,首先在編譯時,我們必須要把調試信息加到可執行文件中。使用編譯器( cc/gcc/g++ )的 -g 參數可以做到這一點。如:
> cc -g hello.c -o hello
> g++ -g hello.cpp -o hello
如果沒有 -g ,你將看不見程序的函數名、變數名,所代替的全是運行時的內存地址。當你用 -g 把調試信息加入之後,並成功編譯目標代碼以後,讓我們來看看如何用 gdb 來調試他。
啟動 gdb 後,就你被帶入 gdb 的調試環境中,就可以使用 gdb 的命令開始調試程序了, gdb 的命令可以使用 help 命令來查看,
gdb 的命令很多, gdb 把之分成許多個種類。 help 命令只是例出 gdb 的命令種類,如果要看種類中的命令,可以使用 help <class> 命令,如: help breakpoints ,查看設置斷點的所有命令。也可以直接 help <command> 來查看命令的幫助。如下圖所示:
要退出 gdb 時,只用發 quit 或命令簡稱 q 就行了。
2 GDB 中運行 UNIX 的 shell 程序
在 gdb 環境中,你可以執行 UNIX 的 shell 的命令,使用 gdb 的 shell 命令來完成:
shell <command string>
調用 UNIX 的 shell 來執行 <command string> ,環境變數 SHELL 中定義的 UNIX 的 shell 將會被用來執行 <command string> ,如果 SHELL 沒有定義,那就使用 UNIX 的標准 shell : /bin/sh 。(在 Windows 中使用 Command.com 或 cmd.exe )
還有一個 gdb 命令是 make :
make <make-args>
可以在 gdb 中執行 make 命令來重新 build 自己的程序。這個命令等價於 「 shell make <make-args> 」
3 在 GDB 中運行程序
在 gdb 中,運行程序使用 r 或是 run 命令。程序的運行,你有可能需要設置下面四方面的事。
1 、程序運行參數。
set args 可指定運行時參數。(如: set args 10 20 30 40 50 )
show args 命令可以查看設置好的運行參數。
2 、運行環境。
path <dir> 可設定程序的運行路徑。
show paths 查看程序的運行路徑。
set environment varname [=value] 設置環境變數。如: set env USER=hchen
show environment [varname] 查看環境變數。
3 、工作目錄。
cd <dir> 相當於 shell 的 cd 命令。
pwd 顯示當前的所在目錄。
4 、程序的輸入輸出。
info terminal 顯示你程序用到的終端的模式。
使用重定向控製程序輸出。如: run > outfile
tty 命令可以指寫輸入輸出的終端設備。如: tty /dev/ttyb
⑷ 如何調試Linux shell腳本
方法一:
sh
-x
script.sh-x選項會將運行到的腳本內容顯示在屏幕上,前面有個+號。這樣就知道哪句被執行到了。對調試很有幫助。
方法二:在腳本中使用debug開關適用於只調試部分腳本的情況。
set
-x
搜索……(要調試的代碼段)
set
+x
然後sh
script.sh運行腳本
方法三:
在腳本中添加列印比如搞個log輸出函數,專門用於列印調試相關信息。
_log(){
if
[
「$_DEBUG」
=
「true」
];
then
echo
「調試信息」
fi
}只要在外面控制$_DEBUG開關即可。
⑸ 如何從起點調試linux內核
Linux內核調試方法
kdb:只能在匯編代碼級進行調試;
優點是不需要兩台機器進行調試。
gdb:在調試模塊時缺少一些至關重要的功能,它可用來查看內核的運行情況,包括反匯編內核函數。
kgdb:能很方便的在源碼級對內核進行調試,缺點是kgdb只能進行遠程調試,它需要一根串口線及兩台機器來調試內核(也可以是在同一台主機上用vmware軟體運行兩個操作系統來調試)
printk() 是調試內核代碼時最常用的一種技術。在內核代碼中的特定位置加入printk() 調試調用,可以直接把所關心的信息打列印到屏幕上,從而可以觀察程序的執行路徑和所關心的變數、指針等信息。 Linux 內核調試器(Linux kernel debugger,kdb)是 Linux 內核的補丁,它提供了一種在系統能運行時對內核內存和數據結構進行檢查的辦法。Oops、KDB在文章掌握 Linux 調試技術有詳細介紹,大家可以參考。 Kprobes 提供了一個強行進入任何內核常式,並從中斷處理器無干擾地收集信息的介面。使用 Kprobes 可以輕松地收集處理器寄存器和全局數據結構等調試信息,而無需對Linux內核頻繁編譯和啟動,具體使用方法,請參考使用 Kprobes 調試內核。
/proc文件系統
在 /proc 文件系統中,對虛擬文件的讀寫操作是一種與內核通信的手段,要查看內核回環緩沖區中的消息,可以使用 dmesg 工具(或者通過 /proc 本身使用 cat /proc/kmsg 命令)。清單 6 給出了 dmesg 顯示的最後幾條消息。
清單 6. 查看來自 LKM 的內核輸出
[root@plato]# dmesg | tail -5
cs: IO port probe 0xa00-0xaff: clean.
eth0: Link is down
eth0: Link is up, running at 100Mbit half-plex
my_mole_init called. Mole is now loaded.
my_mole_cleanup called. Mole is now unloaded.
可以在內核輸出中看到這個模塊的消息。現在讓我們暫時離開這個簡單的例子,來看幾個可以用來開發有用 LKM 的內核 API。
調試工具
使用調試器來一步步地跟蹤代碼,查看變數和計算機寄存器的值。在內核中使用互動式調試器是一個很復雜的問題。內核在它自己的地址空間中運行。許多用戶空間下的調試器所提供的常用功能很難用於內核之中,比如斷點和單步調試等。
⑹ 在Linux下,不用IDE如何從編輯到調試
剛開始從編輯到調試調試的時候,初學者學這些事有些困難的,那麼作為一個專業從事的這個我來給你幾點建議。首先我給你推薦一個很好用的網上教程,可能標題看上去讓你感覺十分的假,但是內容卻是實打實的。http://akae.github.io/bookLinux C編程一站式學習 。
你可以在教程網頁頁面的基本翻譯和調試這個頁面當中還有第10頁和第20頁和第22頁都能找到答案。第1(基本的編譯和調試), 10(使用gdb進行基本調試), 20(編譯鏈接流程詳解), 22(Makefile基礎) 節找到答案, 如我的描述,都是基礎,但入門應該足矣了。
邊際方面我也不是什麼能手,只能粗略地給你幾點建議,希望能夠幫助到你。我個人覺得入門vim我是看的是自帶的vimtutor(shell里直接執行),到現在水平也沒逃出這個速成的范圍,但是用著挺歡實的。
⑺ 如何在Linux系統上調試雙顯
首先需要在
windows
系統下面安裝一個
c
語言編譯器(例如:visual
c++),然後把
linux
下的
c
源程序拷貝到
windows
系統下面,進入
visual
c++
環境,即可調試
linux
系統上的
c
源程序。但是在這里注意一點就是:如果你使用的
c
語言的庫函數不是標準的
c
庫函數,那麼在
windows
下就無法調試通過,也就是說,你必須保證你的
c
源程序是通用的
c
語言代碼才行。
⑻ linux多線程下怎麼單步調試
方法一:PS
在ps命令中,「-T」選項可以開啟線程查看。下面的命令列出了由進程號為<pid>的進程創建的所有線程。
1.$ ps -T -p <pid>
「SID」欄表示線程ID,而「CMD」欄則顯示了線程名稱。
方法二: Top
top命令可以實時顯示各個線程情況。要在top輸出中開啟線程查看,請調用top命令的「-H」選項,該選項會列出所有Linux線程。在top運行時,你也可以通過按「H」鍵將線程查看模式切換為開或關。
1.$ top -H
要讓top輸出某個特定進程<pid>並檢查該進程內運行的線程狀況:
$ top -H -p <pid>
⑼ linux c語言 網路編程如何調試
可以在兩部主機或者利用抓包軟體測試
⑽ 如何在linux中調試c程序
gcc 編譯的時候加 -g 選項。
用 gdb 進行調試。