1. 程式人生 > >Openwrt之gdb除錯

Openwrt之gdb除錯

1. 第一種情況:應用層API(使用者態)【coredump方法

  路由器: 在路由器/tmp執行命令,使其段錯誤的時候生成core檔案;ulimit  -c  unlimited; 

  pc: 把 路由器的/tmp/core檔案複製到 電腦的openwrt原始碼編譯目錄[/home/luo/op](虛擬機器/遠端伺服器)

                開始gdb除錯:

         cd /home/luo/op;          ./staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-1.0.x/bin/mipsel-openwrt-linux-uclibc-gdb 
build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/xxx/可執行檔案     /home/luo/op/core          set sysroot  /home/luo/op/staging_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/root-ralink/          bt          list          frame 1

2. 第二種情況:編譯進核心,核心奔潰除錯(核心態) [看符號表]

               1.看路由器串列埠資訊,在哪裡奔潰

                [   1.452000] Call Trace:


                [   1.452000] [<802735e8>]  flash_otp_init+0x8c/0x1e8
                [   1.452000] [<802735e8>]  xxxx
                [   1.452000] [<802735e8>]  xxxx

                2.進入openwrt編譯目錄除錯

            cd build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/linux-ralink_mt7620/linux-3.14.79;             gdb  vmlinux;  使用X86/64的gdb,而不是mipsel的             list *(flash_otp_init+0x8c
); 這個可以定位到哪一個.c檔案的哪一行;

3. 第三種情況:編譯為模組,核心奔潰除錯(核心態)  [看符號表]

              .ko模組除錯;需要做一個準備動作;

        make menuconfig         Global build settings  --->       Compile the kernel with profiling enabled; [CONFIG_KERNEL_PROFILING]          make V=s -j8要重新編譯核心,燒寫韌體;

               1.看路由器串列埠資訊,在哪裡奔潰

                [   1.452000] Call Trace:
                [   1.452000] [<802735e8>]  xxx_trig_activate+0x2c/0x1e8
                [   1.452000] [<802735e8>]  xxxx
                [   1.452000] [<802735e8>]  xxxx

                2.進入openwrt編譯目錄除錯

            cd  build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/linux-ralink_mt7620/              gdb ledtrig-xxx/ledtrig-xxx.ko;  使用X86/64的gdb,而不是mipsel的             list *(xxx_trig_activate+0x2c); 這個可以定位到哪一個.c檔案的哪一行; gdb build_dir/target-mipsel_24kec+dsp_uClibc-1.0.x/linux-ralink_mt7620/linux-3.14.79/vmlinux list *(flash_otp_init+0x8c)

相關推薦

Openwrtgdb除錯

1. 第一種情況:應用層API(使用者態)【coredump方法】   路由器: 在路由器/tmp執行命令,使其段錯誤的時候生成core檔案;ulimit  -c  unlimited;    pc: 把 路由器的/tmp/core檔案複製到 電腦的openwrt原

linux下c程式設計gdb除錯

之前在個人微信公眾號寫了一篇關於linux下c程式設計之gcc編譯的文章,感興趣可關注我的個人微信公眾號,搜尋移動開發與網路安全技術棧加關注,或掃描本文末尾的微信二維碼加關注。 今天接著說下linu

Linux核心GDB基本除錯方法

Oops[#1]:Cpu 0$ 0   : 00000000 10008d00 00000000 ffffffea$ 4   : fffffdfd 10008d01 00000001 00000000$ 8   : 00000000 7fed2e40 00001cb2 00000b3b$12   : 0003

gdb除錯(四)函式呼叫棧Backtraces

通過產看棧資訊,我們可以瞭解棧內幀的編號或地址,通過選擇幀我們可以移動到指定的幀內去產看資訊。 1、檢視棧資訊 產看函式呼叫棧的幾個函式 bt     顯示所有的函式呼叫棧幀的資訊,每個幀一行。 bt n     顯示棧定的n個幀資訊。 bt -n     顯示棧底

gdb除錯基礎篇》

        這篇文章通過一個簡單的例項描述了gdb的基本用法,並對gdb支援的語言極其基本選項進行了介紹。對於有一定經驗的建議看下一篇文章:《gdb除錯之實用技巧篇》 1. gdb介紹         gdb是GNU釋出的一款功能強大的程式除錯工具,它可以讓我們深入洞悉

linux程式除錯命令addr2line入門簡介(本文先不聊gdb除錯)

       addr2line有什麼作用呢? 可別小瞧它, 它可以定位到程式碼出錯的位置。 下面, 我們來看看這個簡單的程式碼: #include <stdio.h> int main() { int *p = NULL;

linux開發基礎 vi gdb除錯(一)

1)vi vi工作模式:編輯方式、插入方式和命令方式。當執行vi時,首先進入編輯方式 命令列模式功能鍵: yy    :複製游標所在行到緩衝區 [n]yy :例如,6yy 表示拷貝從游標所在的該行“往下數”6行文字 p     :將緩衝區內的字元貼到游標所在位置。注意:所有

從 0 開始學習 Linux 系列「08.15 個 gdb 除錯基礎命令」

gdb 簡介 gdb 是 UNIX 及 UNIX-like 下的除錯工具,在 Linux 下一般都直接在命令列中用 gdb 來除錯程式,相比 Windows 上的整合開發環境 IDE 提供的圖形介面除錯,一開始使用 gdb 除錯可能會讓你感到生無可戀,但是隻要

linux cgdb常用斷點除錯總結

1 、安裝GDB sudo apt-get install gdb 2 、怎麼打斷點 1 、原始檔的某一行設定斷點 break 行號 2、一個特定的函式設定斷點 break 函式名 3、設定條件斷點 break 行號 if 條件 3、舉例分析 hello2.

Nginx學習十四-GDB除錯Nginx初試

本文的測試環境: Win7+虛擬機器VMWareVMware-workstation-full-7.1.4-385536+Ubuntu12.04 Nginx-1.4.0 要想有效的研究Nginx原始碼,必須要動手除錯,GDB就是有用的利器。下面簡要介紹用GDB除錯Ngi

GDB除錯系列瞭解GDB

想要熟練利用GDB進行程式除錯,首先要了解什麼是GDB。 1. 什麼是GDB GDB (the GNU Project Debugger) 是一個可以執行在大多數常見的UNIX架構、Windows、Mac OSX等系統上的跨平臺偵錯程式,允許我們檢視另一個程式在執行過程中內部發生了什麼——或者另一個程式崩潰時

初玩OpenWRT編譯TP-Link WR841N V8固件

lan targe 分享 .com log 編輯 nwr 技術 blog 占坑,待編輯,先放一張圖 初玩OpenWRT之編譯TP-Link WR841N V8固件

linux學習gdb調試工具篇

poi info 令行 啟用 繼續 ext delete fork mod gdb 1.gdb介紹 本章介紹一種很強大的調試工具gdb,可以完全操控程序的運行,使得程序就像你手裏的玩具一樣,叫它走就走,叫它停就停,並且隨時可以查看程序中所有的內部狀態,比如各變量的值、傳給函

移動端Web開發除錯Weinre除錯教程

在設計師與前端開發人員的努力下,一個WebApp出爐了,可是測試人員說了一堆的問題:某某機型下頁面表現不一致,某某系統下頁面如何如何,某某系統瀏覽器下頁面怎麼怎麼滴。看著滿滿的測試彙總文件,我們曾經在一個又一個知名或不知名的手機終端上重複著這些工作:仔細的排查程式碼,alert可疑的變數,甚至不惜重

Linux程式設計——gdb除錯

    上一篇文章中,我們學習了gcc編譯器的使用。本文,我們就講解 gdb 偵錯程式(Debug)的使用,它可以幫助我們找出程式之中的錯誤和漏洞等等。     當程式編譯完成後,它可能無法正常執行;或許程式會徹底崩潰;或許只是不能

使用gdb除錯死鎖執行緒

1.除錯檔案 lock.c   #include <stdio.h> #include <pthread.h> #include <unistd.h> void *work_thread(void *arg) { pthread_mutex_

iOS 以優雅的方式跟後臺聊3840 介面除錯“搖一搖”

背景 3840是除錯介面時,經常遇到的問題 每次除錯,都只能在 Xcode 的控制檯檢視日誌 這意味著,每次都要先執行程式,才能檢視具體原因 有沒有一種方式 不用每次都在控制檯看日誌看資料 就能找具體的原因呢? 產生 經後臺同事的提醒 想寫一個除

Linux入門級gdb除錯--C/C++語言

Linux上面一般使用gdb來進行程式碼的除錯,除錯我目前知道的方法是:首先將寫好的LinuxC/C++程式碼編譯成可執行檔案,注意編譯的時候生成目標檔案.o的時候必須加上-g引數,-g引數是表示生成的.o檔案是包含有列印資訊的,如果不加的話,無法進行除錯,因為沒有任何列印資訊。下面我將根據一個

Linux下使用gdb除錯C/C++程式

在筆者工作實踐中,使用gdb除錯C++程式和除錯C程式,他們稍有不同,下面是使用總結。 一、編譯選項 -g         生成除錯資訊 -gstabs+   以stabs格式生成除錯資訊,並且包含僅供gdb使用的額外除錯資訊生成除

Ubuntu下GDB除錯C語言程式

轉自:http://zhgeaits.me/other/2013/03/17/gdb-study-notes.html,感謝博主。 1.GDB是什麼 GDB是GNU開源組織釋出的一個UNIX下的程式除錯工具,專門用來除錯C,C++這些程式的了,而且都是命令列模式的。 2.準備工作 平