常見的應用除錯方法

2021-09-28 14:45:51 字數 2694 閱讀 9156

(1)printf和串列埠,在有終端的情況下使用printf列印除錯;

(2)led,在硬體上使用led作為程式的除錯,檢視程式的運**況;

獲取有關檔案系統支援,可用記憶體,cpu,執行程式的核心狀態等資訊 例如:查詢 /proc 檔案系統。

(1)/proc/cmdline -> 核心命令列

(2)/proc/cpuinfo -> 關於處理器的品牌,型號資訊等

(3)/proc/filesystems -> 檔案系統的核心支援的資訊

(4)/proc//cmdline -> 命令列引數傳遞到當前程序

(5)/proc//mem -> 當前程序持有的記憶體

(6)/proc//status -> 當前程序的狀態

strace的和ltrace是兩個在linux中用來追蹤程式的執行細節的跟蹤工具。

1.strace:系統呼叫

用來監控使用者空間程序和核心的互動,比如攔截和記錄系統呼叫 、訊號傳遞、程序狀態變更等。

它顯示了系統呼叫、傳遞給它們的引數和返回值。當發現程序或服務異常時,我們可以通過strace來跟蹤其系統呼叫,「看看它在幹啥」,進而找到異常的原因  (更多的是用在運維的問題診斷)

工具的好處是不需要源**,程式也不需要重新編譯。

2.ltrace:程序呼叫庫函式的情況

首先ltrace開啟elf檔案,對其進行分析。在elf檔案中,出於動態連線的需要,需要在elf檔案中儲存函式的符號,供聯結器使用。 這樣一來ltrace就能夠獲得該檔案中所有函式呼叫的符號,以及對應的執行指令。然後ltrace將該指令所對應的4個位元組替換成斷點。 這樣在程序執行到相應的庫函式後,就可以通知到了ltrace,ltrace將對應的庫函式列印出來之後,繼續執行子程序。

常用指令:'-i' 選項在呼叫庫時列印指令指標;  '-s' 選項被用來現實系統呼叫和庫呼叫。

實際上ltrace與strace使用的技術大體相同,但ltrace在對支援fork和clone方面,不如strace;strace在收到frok和clone等系統呼叫後,做了相應的處理,而ltrace沒有。

多用於檢測記憶體洩漏、重釋放、訪問越界、使用未初始化的記憶體、記憶體讀寫越界(訪問了不該訪問或者沒有許可權訪問的位址空間,動態記憶體訪問時超出了申請的大小範圍)、記憶體覆蓋、使用已經釋放了的記憶體等。

但是它增加了記憶體占用,會減慢程式。有時會造成誤報和漏報。不能檢測出靜態分配的陣列的訪問越界問題。

常見的命令:valgrind --tool=memcheck --leak-check=full ./test

給使用者以控制權而去執行各種動作,例如:啟動程式、停止在規定的位置、在指定條件下停止、檢查所需要的資訊、改變程式中的資料等。

1.原理:

2.安裝步驟:

(1)pc機安裝gdb的步驟:

(2)編譯gbd和gdbserver

(4)以下的所有目錄在你解壓之後開啟的gdb原始碼目錄中完成

tar xjf gdb...

gdb-7.4/

./configure --target=arm-linux

make

mkdir tmp

make install prefix=$pwd/tmp

cp /tmp/bin/arm-linux-gdb /bin

(5)把arm-linux-gdb複製到/bin目錄。

3.開發板安裝的步驟:(將編譯好的工具放在nfs的掛載目錄下,然後開發板就可以使用)

cd ./gdb/gdbserver

./configure --host=arm-linux

cp gdbserver /home/zdh128/nfs_dir/rootfs_aston

將拷過來的gdbserver檔案放在開發板的/usr/bin 目錄下 (庫檔案放在bin目錄下)。

4.除錯:

arm-linux-gcc -g -o test_debug test_debug.c

cp test_debug /home/zdh128/nfs_dir/rootfs_aston/

(1)在arm板上:gdbserver 192.168.1.129:2345 ./test_debug

(2)在pc上:/bin/arm-linux-gdb ./test_debug

輸入: target remote 192.168.1.129:2345

然後:使用gdb命令來控制程式

輸入l:檢視原始碼

輸入break 打斷點 break main 在main裡面打斷點

輸入c:continue

break test_debug.c:31 在31行打斷點

(3)通過core dump檔案直接分析錯誤,進行除錯:讓程式在開發板上直接執行當他發生錯誤時,令它產生core dump檔案然後使用gdb來根據core dump檔案找到發生錯誤的地方。

①ulimit -c unlimited 不限制產生core dump檔案的大小

②執行應用程式,錯誤發生時在當前目錄下產生了名為core 的core dump檔案。

在pc上:  cp /work/nfs_root/../core .     /bin/arm-linux-gdb ./test_debug ./core

Pycharm的常見Debug除錯方法(持續更新)

一 常規步驟 1.操作步驟 1 1.新增斷點 直接在標記處點選滑鼠左鍵即可。刪除斷點只需再點選斷點處即可 1 2.debug下執行 七星瓢蟲 1 3.按照所需除錯進行 除錯。分別為 1.show execution point f10 顯示當前所有斷點 2.step over f8 單步除錯。若函式...

ssh登入的除錯方法和常見問題

ssh登入伺服器是程式猿日常生活必不可少的一部分,也時不時的會遇到自己配置ssh登入的問題,拿日常使用的git來講,不管使用github也好,還是自己搭建的gitlab等等,如果不能很好的理解ssh的原理,極容易遇到各種問題。這篇文章就嘗試向大家簡單講解下ssh的原理 除錯方式和常見問題。這裡要講的...

xslt 語法簡單應用及除錯方法

公司用到應用整合平台,有webservice介面卡,用起來還算方便,其中會接觸到xslt的語法 維基百科的解釋 就是根據模板將xml 報文轉換成mml串 a 1,b 2,c 3 語法到也算簡單,不過開始除錯的時候很費力,後來發現 xmlspy工具非常好用,下面就介紹下使用方法。2.選擇轉換,或者按f...