色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux內核調試的方式以及工具匯總(下)

jf_78858299 ? 來源:CSDN ? 作者:CHENG Jian ? 2023-05-12 14:59 ? 次閱讀

5 Kprobe && systemtap


5.1 內核kprobe機制


kprobelinux 內核的一個重要特性, 是一個輕量級的內核調試工具, 同時它又是其他一些更高級的內核調試工具(比如 perfsystemtap)的 “基礎設施”, 4.0版本的內核中, 強大的 eBPF 特性也寄生于 kprobe 之上, 所以 kprobe 在內核中的地位就可見一斑了.

Kprobes 提供了一個強行進入任何內核例程并從中斷處理器無干擾地收集信息接口. 使用 Kprobes 可以收集處理器寄存器和全局數據結構等調試信息。開發者甚至可以使用 Kprobes 來修改 寄存器值和全局數據結構的值.

如何高效地調試內核?

printk 是一種方法, 但是 printk 終歸是毫無選擇地全量輸出, 某些場景下不實用, 于是你可以試一下tracepoint, 我使能 tracepoint 機制的時候才輸出. 對于傻傻地放置 printk 來輸出信息的方式,tracepoint 是個進步, 但是 tracepoint 只是內核在某些特定行為(比如進程切換)上部署的一些靜態錨點, 這些錨點并不一定是你需要的, 所以你仍然需要自己部署tracepoint, 重新編譯內核. 那么kprobe 的出現就很有必要了, 它可以在運行的內核中動態插入探測點, 執行你預定義的操作.

它的基本工作機制是 : 用戶指定一個探測點, 并把一個用戶定義的處理函數關聯到該探測點, 當內核執行到該探測點時, 相應的關聯函數被執行,然后繼續執行正常的代碼路徑.

kprobe 實現了三種類型的探測點 : kprobes, jprobeskretprobes(也叫返回探測點). kprobes 是可以被插入到內核的任何指令位置的探測點, jprobes 則只能被插入到一個內核函數的入口, 而 kretprobes 則是在指定的內核函數返回時才被執行.

相關資料鏈接:

kprobe工作原理:http://blog.itpub.net/15480802/viewspace-1162094/

隨想錄(強大的kprobe):http://blog.csdn.net/feixiaoxing/article/details/40351811

kprobe原理解析(一):http://www.cnblogs.com/honpey/p/4575928.html

5.2 前端工具systemtap


SystemTap 是監控和跟蹤運行中的 Linux 內核的操作的動態方法. 這句話的關鍵詞是動態, 因為 SystemTap 沒有使用工具構建一個特殊的內核, 而是允許您在運行時動態地安裝該工具. 它通過一個Kprobes 的應用編程接口 (API) 來實現該目的.

SystemTap 與一種名為 DTrace 的老技術相似,該技術源于 Sun Solaris 操作系統. 在 DTrace 中, 開發人員可以用 D 編程語言(C 語言的子集, 但修改為支持跟蹤行為)編寫腳本. DTrace 腳本包含許多探針和相關聯的操作, 這些操作在探針 “觸發” 時發生. 例如, 探針可以表示簡單的系統調用,也可以表示更加復雜的交互,比如執行特定的代碼行

DTraceSolaris 最引人注目的部分, 所以在其他操作系統中開發它并不奇怪. DTrace 是在 Common Development and Distribution License (CDDL) 之下發行的, 并且被移植到 FreeBSD 操作系統中.

另一個非常有用的內核跟蹤工具是 ProbeVue, 它是 IBMIBM? AIX? 操作系統 6.1 開發的. 您可以使用 ProbeVue 探查系統的行為和性能, 以及提供特定進程的詳細信息. 這個工具使用一個標準的內核以動態的方式進行跟蹤.

考慮到 DTraceProbeVue 在各自的操作系統中的巨大作用, 為 Linux 操作系統策劃一個實現該功能的開源項目是勢不可擋的. SystemTap2005 年開始開發, 它提供與 DTraceProbeVue 類似的功能. 許多社區還進一步完善了它, 包括 Red HatIntelHitachiIBM 等.

這些解決方案在功能上都是類似的, 在觸發探針時使用探針和相關聯的操作腳本.

相關資料鏈接:

SystemTap 學習筆記 - 安裝篇:https://segmentfault.com/a/1190000000671438

Linux 自檢和 SystemTap 用于動態內核分析的接口和語言:https://www.ibm.com/developerworks/cn/linux/l-systemtap/

Brendan’s blog Using SystemTap:http://dtrace.org/blogs/brendan/2011/10/15/using-systemtap/

內核調試神器SystemTap — 簡介與使用(一):http://blog.csdn.net/zhangskd/article/details/25708441

內核探測工具systemtap簡介:http://www.cnblogs.com/hazir/p/systemtap_introduction.html

SystemTap Beginner:http://blog.csdn.net/kafeiflynn/article/details/6429976

使用systemtap調試linux內核:http://blog.csdn.net/heli007/article/details/7187748

Ubuntu Kernel Debuginfo:http://ddebs.ubuntu.com/pool/main/l/linux

Linux 下的一個全新的性能測量和調式診斷工具 Systemtap, 第 3 部分: Systemtap:https://www.ibm.com/developerworks/cn/linux/l-cn-systemtap3/

6 kgdb && kgtp


6.1 kgdb


  • KDB 和 KGDB 合并, 并進入內核

KGDB 是大名鼎鼎的內核調試工具, 他是由 KDBKGDB 項目合并而來.

kdb 是一個Linux系統的內核調試器, 它是由SGI公司開發的遵循GPL許可證的開放源碼調試工具. kdb 嵌入在Linux 內核中. 為內核&&驅動程序員提供調試手段. 它適合于調試內核空間的程序代碼. 譬如進行設備驅動程序調試. 內核模塊的調試等.

kgdbkdb 現在已經合并了. 對于一個正在運行的kgdb 而言, 可以使用 gdbmonitor 命令來使用 kdb 命令. 比如

(gdb)gdb monitor ps -A

就可以運行 kdbps 命令了.

分析一下 kdb 補丁和合入主線的 kdb 有啥不同

kdbkgdb 合并之后, 也可以使用 kgdbIO 驅動(比如鍵盤), 但是同時也 kdb也喪失了一些功能.合并之后的kdb不在支持匯編級的源碼調試. 因此它現在也是平臺獨立的.

  1. kdump和kexec已經被移除。
  2. 從/proc/meninfo中獲取的信息比以前少了。
  3. bt命令現在使用的是內核的backtracer,而不是kdb原來使用的反匯編。
  4. 合并之后的kdb不在具有原來的反匯編(id命令)

總結一下 : kdbkgdb 合并之后,系統中對這兩種調試方式幾乎沒有了明顯的界限,比如通過串口進行遠程訪問的時候,可以使用 kgdb 命令, 也可以使用 kdb 命令(使用gdb monitor實現)

6.2 KGTP


KGTP 是一個 實時 輕量級 Linux 調試器 和 跟蹤器. 使用 KGTP

使用 KGTP 不需要在 Linux 內核上打 PATCH 或者重新編譯, 只要編譯KGTP模塊并 insmod 就可以.

其讓 Linux 內核提供一個遠程 GDB 調試接口, 于是在本地或者遠程的主機上的GDB可以在不需要停止內核的情況下用 GDB tracepoint 和其他一些功能 調試 和 跟蹤 Linux.

即使板子上沒有 GDB 而且其沒有可用的遠程接口, KGTP 也可以用離線調試的功能調試內核(見http://code.google.com/p/kgtp/wiki/HOWTOCN#/sys/kernel/debug/gtpframe和離線調試)。

KGTP支持 X86-32 , X86-64 , MIPS 和 ARM

KGTP在Linux內核 2.6.18到upstream 上都被測試過。

而且還可以用在 Android 上(見 http://code.google.com/p/kgtp/wiki/HowToUseKGTPinAndroid)

相關資料鏈接:

github-KGTP:https://github.com/teawater/kgtp

KGTP內核調試使用:http://blog.csdn.net/djinglan/article/details/15335653

KGTP中增加對GDB命令“set trace-buffer-size”的支持 - Week 5:http://blog.csdn.net/calmdownba/article/details/38659317

7 perf


Perf 是用來進行軟件性能分析的工具。

通過它, 應用程序可以利用 PMU, tracepoint 和內核中的特殊計數器來進行性能統計. 它不但可以分析指定應用程序的性能問題 (per thread). 也可以用來分析內核的性能問題, 當然也可以同時分析應用代碼和內核,從而全面理解應用程序中的性能瓶頸.

最初的時候, 它叫做 Performance counter, 在 2.6.31 中第一次亮相. 此后他成為內核開發最為活躍的一個領域. 在 2.6.32 中它正式改名為 Performance Event, 因為 perf 已不再僅僅作為 PMU 的抽象, 而是能夠處理所有的性能相關的事件.

使用 perf, 您可以分析程序運行期間發生的硬件事件,比如 instructions retired , processor clock cycles 等; 您也可以分析軟件事件, 比如 Page Fault 和進程切換。

這使得 Perf 擁有了眾多的性能分析能力, 舉例來說,使用 Perf 可以計算每個時鐘周期內的指令數, 稱為 IPC, IPC 偏低表明代碼沒有很好地利用 CPU.

Perf 還可以對程序進行函數級別的采樣, 從而了解程序的性能瓶頸究竟在哪里等等. Perf 還可以替代 strace, 可以添加動態內核 probe 點. 還可以做 benchmark 衡量調度器的好壞.

人們或許會稱它為進行性能分析的”瑞士軍刀”, 但我不喜歡這個比喻, 我覺得 perf 應該是一把世間少有的倚天劍.

金庸筆下的很多人都有對寶刀的癖好, 即便本領低微不配擁有, 但是喜歡, 便無可奈何. 我恐怕正如這些人一樣, 因此進了酒館客棧, 見到相熟或者不相熟的人, 就要興沖沖地要講講那倚天劍的故事.

相關資料鏈接:

Perf – Linux下的系統性能調優工具,第 1 部分:https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/index.html

perf Examples:http://www.brendangregg.com/perf.html

改進版的perf, Performance analysis tools based on Linux perf_events (aka perf) and ftrace:https://github.com/brendangregg/perf-tools

Perf使用教程:http://blog.chinaunix.net/uid-10540984-id-3854969.html

linux下的內核測試工具——perf使用簡介:http://blog.csdn.net/trochiluses/article/details/10261339

perf 移植:http://www.cnblogs.com/helloworldtoyou/p/5585152.html

8 其他Tracer工具


8.1 LTTng


LTTng 是一個 Linux 平臺開源的跟蹤工具, 是一套軟件組件, 可允許跟蹤 Linux 內核和用戶程序, 并控制跟蹤會話(開始/停止跟蹤、啟動/停止事件 等等). 這些組件被綁定如下三個包 :

圖片

相關資料鏈接:

Linux 平臺開源的跟蹤工具:LTTng:http://www.open-open.com/lib/view/open1413946397247.html

用 lttng 跟蹤內核:http://blog.csdn.net/xsckernel/article/details/17794551

LTTng and LTTng project:http://blog.csdn.net/ganggexiongqi/article/details/6664331

8.2 eBPF


extended Berkeley Packet Filter(eBPF)是一個可以在事件上運行程序的高效內核虛擬機(JIT)。它可能最終會提供 ftrace 和 perf_events 的內核編程,并強化其他的 tracer。這是 Alexei Starovoitov 目前正在開發的,還沒有完全集成,但是從4.1開始已經對一些優秀的工具有足夠的內核支持了,如塊設備I/O的延遲熱圖。可參考其主要作者 Alexei Starovoitov 的BPF slides和eBPF samples。

8.3 Ktap


ktap 在過去是一款前景很好的 tracer,它使用內核中的 lua 虛擬機處理,在沒有調試信息的情況下在嵌入式設備上運行的很好。它分為幾個步驟,并在有一段時間似乎超過了 Linux 上所有的追蹤器。然后 eBPF 開始進行內核集成,而 ktap 的集成在它可以使用 eBPF 替代它自己的虛擬機后才開始。因為 eBPF 仍將持續集成幾個月,ktap 開發者要繼續等上一段時間。我希??今年晚些時候它能重新開發。

8.4 dtrace4linux


dtrace4linux 主要是 Paul Fox 一個人在業余時間完成的,它是 Sun DTrace 的 Linux 版本。它引入矚目,還有一些 provider 可以運行,但是從某種程度上來說還不完整,更多的是一種實驗性的工具(不安全)。我認為,顧忌到許可問題,人們會小心翼翼的為 dtrace4linux 貢獻代碼:由于當年 Sun 開源DTrace 使用的是 CDDL 協議,而 dtrace4linux 也不大可能最終進入 Linux kernel。Paul 的方法很可能會使其成為一個 add-on。我很樂意看到 Linux 平臺上的 DTrace 和這個項目的完成,我認為當我加入 Netflix 后將會花些時間來協助完成這個項目。然而,我還是要繼續使用內置的 tracers,如 ftrace 和 perf_events。

8.5 OL DTrace


Oracle Linux DTrace為了將 DTrace 引入 Linux,特別是 Oracle Linux,做出了很大的努力。這些年來發布的多個版本表明了它的穩定進展。開發者們以一種對這個項目的前景看好的態度談論著改進 DTrace 測試套件。很多有用的 provider 已經完成了,如:syscall, profile, sdt, proc, sched 以及USDT。我很期待 fbt(function boundary tracing, 用于內核動態跟蹤)的完成,它是 Linux 內核上非常棒的 provider。OL DTrace 最終的成功將取決于人們對運行 Oracle Linux(為技術支持付費)有多大興趣,另一方面取決于它是否完全開源:它的內核元件是開源的,而我沒有看到它的用戶級別代碼。

8.6 sysdig


sysdig是一個使用類tcpdump語法來操作系統事件的新tracer,它使用lua提交進程。它很優秀,它見證了系統跟蹤領域的變革。它的局限性在于它只在當前進行系統調用,在提交進行時將所有事件轉儲為用戶級別。你可以使用系統調用做很多事情,然而我還是很希望它能支持跟蹤點、kprobe和uprobe。我還期待它能支持eBPF做內核摘要。目前,sysdig開發者正在增加容器支持。留意這些內容。

原文作者:CHENG Jian 原文鏈接:https://kernel.blog.csdn.net/article/details/68948080

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1372

    瀏覽量

    40298
  • Linux
    +關注

    關注

    87

    文章

    11310

    瀏覽量

    209597
  • 開發
    +關注

    關注

    0

    文章

    370

    瀏覽量

    40847
收藏 人收藏

    評論

    相關推薦

    Linux內核開發工具介紹

    進行嵌入式Linux產品開發,往往需要對內核進行裁剪和定制,以滿足嵌入式產品的功能和性能需求。本文介紹幾種閱讀Linux內核源碼的工具和方法
    發表于 12-29 15:20 ?4711次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>開發<b class='flag-5'>工具</b>介紹

    Linux內核鏡像bzImage和rootfs的制作、安裝及調試過程

    一個最小可運行Linux操作系統需要內核鏡像bzImage和rootfs,本文整理了其制作、安裝過程,調試命令,以及如何添加共享磁盤。
    發表于 10-14 17:28 ?6646次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>鏡像bzImage和rootfs的制作、安裝及<b class='flag-5'>調試</b>過程

    Linux內核學習筆記:printk調試

    很多內核開發者喜歡的調試工具是printk,在Linux內核中,使用printk()函數來打印信息,它與C庫的printf()函數類似。
    發表于 06-01 15:14 ?1166次閱讀

    請問linux內核怎么調試

    問個問題,怎么調試linux內核,百度了一,結果還是不會使用gdb調試內核。希望大蝦幫忙指點一
    發表于 02-25 07:32

    學會Linux內核調試方法!

    內核開發比用戶空間開發更難的一個因素就是內核調試艱難。內核錯誤往往會導致系統宕機,很難保留出錯時的現場。調試
    發表于 05-07 11:01 ?2345次閱讀

    Linux:QEMU調試內核的步驟

    Linux:QEMU調試內核的步驟
    的頭像 發表于 06-23 09:03 ?3157次閱讀
    <b class='flag-5'>Linux</b>:QEMU<b class='flag-5'>調試</b><b class='flag-5'>內核</b>的步驟

    快速理解什么是Linux內核以及Linux內核的內容

    01 前言 本文主要講解什么是Linux內核以及通過多張圖片展示Linux內核的作用與功能,以便于讀者能快速理解什么是
    的頭像 發表于 10-21 12:02 ?4300次閱讀
    快速理解什么是<b class='flag-5'>Linux</b><b class='flag-5'>內核</b><b class='flag-5'>以及</b><b class='flag-5'>Linux</b><b class='flag-5'>內核</b>的內容

    嵌入式LINUX系統內核內核模塊調試教程

    本文檔的主要內容詳細介紹的是嵌入式LINUX系統內核內核模塊調試教程。
    發表于 11-06 17:32 ?21次下載
    嵌入式<b class='flag-5'>LINUX</b>系統<b class='flag-5'>內核</b>和<b class='flag-5'>內核</b>模塊<b class='flag-5'>調試</b>教程

    Linux內核開發框架學習資料匯總

    Linux內核開發框架學習資料匯總
    發表于 06-17 09:29 ?24次下載

    嵌入式LINUX系統內核內核模塊調試

    嵌入式LINUX系統內核內核模塊調試(嵌入式開發和硬件開發)-嵌入式LINUX系統內核
    發表于 07-30 13:55 ?10次下載
    嵌入式<b class='flag-5'>LINUX</b>系統<b class='flag-5'>內核</b>和<b class='flag-5'>內核</b>模塊<b class='flag-5'>調試</b>

    Linux內核調試方式以及工具集錦

    內核總是那么捉摸不透, 內核也會犯錯, 但是調試卻不能像用戶空間程序那樣, 為此內核開發者為我們提供了一系列的工具和系統來支持
    的頭像 發表于 02-20 17:56 ?869次閱讀

    Linux內核調試方式以及工具匯總(上)

    內核總是那么捉摸不透, 內核也會犯錯, 但是調試卻不能像用戶空間程序那樣, 為此內核開發者為我們提供了一系列的工具和系統來支持
    的頭像 發表于 05-12 14:58 ?928次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b><b class='flag-5'>調試</b>的<b class='flag-5'>方式</b><b class='flag-5'>以及</b><b class='flag-5'>工具</b><b class='flag-5'>匯總</b>(上)

    Linux內核調試方式以及工具總結

    內核總是那么捉摸不透, 內核也會犯錯, 但是調試卻不能像用戶空間程序那樣, 為此內核開發者為我們提供了一系列的工具和系統來支持
    的頭像 發表于 05-22 14:37 ?1471次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b><b class='flag-5'>調試</b><b class='flag-5'>方式</b><b class='flag-5'>以及</b><b class='flag-5'>工具</b>總結

    內核調試工具printkprintk的輸出格式

    很多內核開發者喜歡的調試工具是printk,在Linux內核中,使用printk()函數來打印信息,它與C庫的printf()函數類似。 printk()與printf()的一個重要
    的頭像 發表于 09-27 16:09 ?1063次閱讀

    如何使用linuxgdb來調試python程序

    如何使用linuxgdb來調試python程序? 在Linux,可以使用GDB(GNU調試
    的頭像 發表于 01-31 10:41 ?2636次閱讀
    主站蜘蛛池模板: 九九在线免费视频| 国产第一页在线视频| 芭乐视频免费资源在线观看| 极品少妇高潮XXXXX| 少妇无码太爽了视频在线播放 | 亚洲午夜福利未满十八勿进| xxxxx俄罗斯| 男女肉大捧进出全过程免费| 在线播放av欧美无码碰| 国产中文视频| 神电影院午夜dy888我不卡| www.中文字幕在线观看| 欧美日韩一二区旡码高清在线| 777精品久无码人妻蜜桃| 久久视频在线视频观看天天看视频| 亚洲伊人久久网| 和搜子的日子 在线观看| 亚洲免费视频在线| 国产午夜在线精品三级a午夜电影 国产午夜在线观看视频播放 | 中文人妻熟妇精品乱又伦| 久久九九青青国产精品| 亚洲一区成人| 解开美女胸衣2破解版| 亚洲精品国产国语| 精品一区二区三区在线成人| 曰本老头同性xxxxx| 么么哒日本影院| 97se se| 日本黄 色大片全| 第一次处破女高清电影| 忘忧草秋观看未满十八| 国产精品色欲AV亚洲三区软件| 亚洲AV无码专区国产精品99| 国产又色又爽又刺激在线播放| 亚洲视频黄| 久久综合网久久综合| 99精彩视频在线观看| 日韩欧美三区| 国产亚洲精品线观看不卡| 伊人网综合网| 女人高潮特级毛片|