0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux内核调试方式以及工具总结

嵌入式情报局 来源:CSDN-CHENG Jia 2023-05-22 14:37 次阅读

1 内核调试以及工具总结

内核总是那么捉摸不透, 内核也会犯错, 但是调试却不能像用户空间程序那样, 为此内核开发者为我们提供了一系列的工具和系统来支持内核的调试.

内核的调试, 其本质是内核空间与用户空间的数据交换, 内核开发者们提供了多样的形式来完成这一功能.

bea2d5ca-f717-11ed-90ce-dac502259ad0.jpg

beabc2fc-f717-11ed-90ce-dac502259ad0.jpg

2 用户空间与内核空间数据交换的文件系统

内核中有三个常用的伪文件系统: procfs, debugfs和sysfs.

beb2f8ec-f717-11ed-90ce-dac502259ad0.jpg

它们都用于Linux内核和用户空间的数据交换, 但是适用的场景有所差异:

procfs历史最早, 最初就是用来跟内核交互的唯一方式, 用来获取处理器、内存、设备驱动、进程等各种信息.

sysfs跟kobject框架紧密联系, 而kobject是为设备驱动模型而存在的, 所以sysfs是为设备驱动服务的.

debugfs从名字来看就是为debug而生, 所以更加灵活.

relayfs是一个快速的转发(relay)数据的文件系统, 它以其功能而得名. 它为那些需要从内核空间转发大量数据到用户空间的工具和应用提供了快速有效的转发机制.

2.1 procfs文件系统

ProcFs介绍

procfs是比较老的一种用户态与内核态的数据交换方式, 内核的很多数据都是通过这种方式出口给用户的, 内核的很多参数也是通过这种方式来让用户方便设置的. 除了sysctl出口到/proc下的参数,procfs提供的大部分内核参数是只读的. 实际上, 很多应用严重地依赖于procfs, 因此它几乎是必不可少的组件. 前面部分的几个例子实际上已经使用它来出口内核数据, 但是并没有讲解如何使用, 本节将讲解如何使用procfs.

2.2 sysfs文件系统

内核子系统或设备驱动可以直接编译到内核, 也可以编译成模块, 编译到内核, 使用前一节介绍的方法通过内核启动参数来向它们传递参数, 如果编译成模块, 则可以通过命令行在插入模块时传递参数, 或者在运行时, 通过sysfs来设置或读取模块数据.

Sysfs是一个基于内存的文件系统, 实际上它基于ramfs,sysfs提供了一种把内核数据结构, 它们的属性以及属性与数据结构的联系开放给用户态的方式, 它与kobject子系统紧密地结合在一起, 因此内核开发者不需要直接使用它, 而是内核的各个子系统使用它. 用户要想使用sysfs读取和设置内核参数, 仅需装载sysfs就可以通过文件操作应用来读取和设置内核通过sysfs开放给用户的各个参数:

mkdir -p /sysfs
mount -t sysfs sysfs /sysfs

注意, 不要把sysfs和sysctl混淆,sysctl是内核的一些控制参数, 其目的是方便用户对内核的行为进行控制, 而sysfs仅仅是把内核的kobject对象的层次关系与属性开放给用户查看, 因此sysfs的绝大部分是只读的, 模块作为一个kobject也被出口到sysfs, 模块参数则是作为模块属性出口的, 内核实现者为模块的使用提供了更灵活的方式, 允许用户设置模块参数在sysfs的可见性并允许用户在编写模块时设置这些参数在sysfs下的访问权限, 然后用户就可以通过sysfs来查看和设置模块参数, 从而使得用户能在模块运行时控制模块行为.

2.3 debugfs文件系统

内核开发者经常需要向用户空间应用输出一些调试信息, 在稳定的系统中可能根本不需要这些调试信息, 但是在开发过程中, 为了搞清楚内核的行为, 调试信息非常必要, printk可能是用的最多的, 但它并不是最好的, 调试信息只是在开发中用于调试, 而printk将一直输出, 因此开发完毕后需要清除不必要的printk语句, 另外如果开发者希望用户空间应用能够改变内核行为时,printk就无法实现.

因此, 需要一种新的机制, 那只有在需要的时候使用, 它在需要时通过在一个虚拟文件系统中创建一个或多个文件来向用户空间应用提供调试信息.

有几种方式可以实现上述要求:

使用procfs, 在/proc创建文件输出调试信息, 但是procfs对于大于一个内存页(对于x86是4K)的输出比较麻烦, 而且速度慢, 有时回出现一些意想不到的问题.

使用sysfs(2.6内核引入的新的虚拟文件系统), 在很多情况下, 调试信息可以存放在那里, 但是sysfs主要用于系统管理,它希望每一个文件对应内核的一个变量,如果使用它输出复杂的数据结构或调试信息是非常困难的.

使用libfs创建一个新的文件系统, 该方法极其灵活, 开发者可以为新文件系统设置一些规则, 使用libfs使得创建新文件系统更加简单, 但是仍然超出了一个开发者的想象.

为了使得开发者更加容易使用这样的机制,Greg Kroah-Hartman开发了debugfs(在2.6.11中第一次引入), 它是一个虚拟文件系统, 专门用于输出调试信息, 该文件系统非常小, 很容易使用, 可以在配置内核时选择是否构件到内核中, 在不选择它的情况下, 使用它提供的API的内核部分不需要做任何改动.

2.4 relayfs文件系统

relayfs是一个快速的转发(relay)数据的文件系统, 它以其功能而得名. 它为那些需要从内核空间转发大量数据到用户空间的工具和应用提供了快速有效的转发机制.

Channel是relayfs文件系统定义的一个主要概念, 每一个channel由一组内核缓存组成, 每一个CPU有一个对应于该channel的内核缓存, 每一个内核缓存用一个在relayfs文件系统中的文件文件表示, 内核使用relayfs提供的写函数把需要转发给用户空间的数据快速地写入当前CPU上的channel内核缓存, 用户空间应用通过标准的文件I/O函数在对应的channel文件中可以快速地取得这些被转发出的数据mmap来. 写入到channel中的数据的格式完全取决于内核中创建channel的模块或子系统.

relayfs的用户空间API:

relayfs实现了四个标准的文件I/O函数,open、mmap、poll和close

bebacb08-f717-11ed-90ce-dac502259ad0.jpg

注意 : 用户态应用在使用上述 API 时必须保证已经挂载了 relayfs 文件系统, 但内核在创建和使用 channel时不需要relayfs 已经挂载. 下面命令将把 relayfs 文件系统挂载到 /mnt/relay.

2.5 seq_file

一般地, 内核通过在procfs文件系统下建立文件来向用户空间提供输出信息, 用户空间可以通过任何文本阅读应用查看该文件信息, 但是procfs有一个缺陷, 如果输出内容大于1个内存页, 需要多次读,因此处理起来很难, 另外, 如果输出太大, 速度比较慢, 有时会出现一些意想不到的情况,Alexander Viro实现了一套新的功能, 使得内核输出大文件信息更容易, 该功能出现在2.4.15(包括2.4.15)以后的所有2.4内核以及2.6内核中, 尤其是在2.6内核中,已经大量地使用了该功能

3 printk

在内核调试技术之中, 最简单的就是printk的使用了, 它的用法和C语言应用程序中的printf使用类似, 在应用程序中依靠的是stdio.h中的库, 而在linux内核中没有这个库, 所以在linux内核中,实现了自己的一套库函数,printk就是标准的输出函数

4 ftrace && trace-cmd

4.1 trace && ftrace

Linux当前版本中, 功能最强大的调试、跟踪手段. 其最基本的功能是提供了动态和静态探测点, 用于探测内核中指定位置上的相关信息.

静态探测点, 是在内核代码中调用ftrace提供的相应接口实现, 称之为静态是因为, 是在内核代码中写死的, 静态编译到内核代码中的, 在内核编译后, 就不能再动态修改. 在开启ftrace相关的内核配置选项后, 内核中已经在一些关键的地方设置了静态探测点, 需要使用时, 即可查看到相应的信息.

动态探测点, 基本原理为 : 利用mcount机制, 在内核编译时, 在每个函数入口保留数个字节, 然后在使用ftrace时, 将保留的字节替换为需要的指令, 比如跳转到需要的执行探测操作的代码。

ftrace的作用是帮助开发人员了解Linux内核的运行时行为, 以便进行故障调试或性能分析.

最早ftrace是一个function tracer, 仅能够记录内核的函数调用流程. 如今ftrace已经成为一个

framework, 采用plugin的方式支持开发人员添加更多种类的trace功能.

Ftrace由RedHat的Steve Rostedt负责维护. 到2.6.30为止, 已经支持的tracer包括 :

bec1d466-f717-11ed-90ce-dac502259ad0.jpg

这里还没有列出所有的tracer,ftrace是目前非常活跃的开发领域, 新的tracer将不断被加入内核。

Linux trace使用入门:http://blog.csdn.net/jscese/article/details/46415531

4.2 ftrace前端工具trace-cmd

trace-cmd 介绍

trace-cmd和 开源的kernelshark均是内核Ftrace的前段工具, 用于分分析核性能.

他们相当于是一个/sys/kernel/debug/tracing中文件系统接口的封装, 为用户提供了更加直接和方便的操作.

使用

#  收集信息
sudo trace-cmd reord subsystem:tracing 


#  解析结果
#sudo trace-cmd report

trace-cmd: A front-end for Ftrace:https://lwn.net/Articles/410200/

其本质就是对/sys/kernel/debug/tracing/events下各个模块进行操作, 收集数据并解析

5 Kprobe && systemtap

5.1 内核kprobe机制

kprobe是linux内核的一个重要特性, 是一个轻量级的内核调试工具, 同时它又是其他一些更高级的内核调试工具(比如perf和systemtap)的 “基础设施”, 4.0版本的内核中, 强大的eBPF特性也寄生于kprobe之上, 所以kprobe在内核中的地位就可见一斑了.

Kprobes提供了一个强行进入任何内核例程并从中断处理器无干扰地收集信息的接口. 使用Kprobes可以收集处理器寄存器和全局数据结构等调试信息。开发者甚至可以使用Kprobes来修改 寄存器值和全局数据结构的值.

如何高效地调试内核?

printk是一种方法, 但是printk终归是毫无选择地全量输出, 某些场景下不实用, 于是你可以试一下tracepoint, 我使能tracepoint机制的时候才输出. 对于傻傻地放置printk来输出信息的方式,tracepoint是个进步, 但是tracepoint只是内核在某些特定行为(比如进程切换)上部署的一些静态锚点, 这些锚点并不一定是你需要的, 所以你仍然需要自己部署tracepoint, 重新编译内核. 那么kprobe的出现就很有必要了, 它可以在运行的内核中动态插入探测点, 执行你预定义的操作.

它的基本工作机制是 : 用户指定一个探测点, 并把一个用户定义的处理函数关联到该探测点, 当内核执行到该探测点时, 相应的关联函数被执行,然后继续执行正常的代码路径.

kprobe实现了三种类型的探测点 :kprobes,jprobes和kretprobes(也叫返回探测点).kprobes是可以被插入到内核的任何指令位置的探测点,jprobes则只能被插入到一个内核函数的入口, 而kretprobes则是在指定的内核函数返回时才被执行.

5.2 前端工具systemtap

SystemTap是监控和跟踪运行中的Linux内核的操作的动态方法. 这句话的关键词是动态, 因为SystemTap没有使用工具构建一个特殊的内核, 而是允许您在运行时动态地安装该工具. 它通过一个Kprobes的应用编程接口 (API) 来实现该目的.

SystemTap与一种名为DTrace的老技术相似,该技术源于Sun Solaris操作系统. 在DTrace中, 开发人员可以用D编程语言(C语言的子集, 但修改为支持跟踪行为)编写脚本.DTrace脚本包含许多探针和相关联的操作, 这些操作在探针 “触发” 时发生. 例如, 探针可以表示简单的系统调用,也可以表示更加复杂的交互,比如执行特定的代码行

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

另一个非常有用的内核跟踪工具是ProbeVue, 它是IBM为IBM AIX操作系统6.1开发的. 您可以使用ProbeVue探查系统的行为和性能, 以及提供特定进程的详细信息. 这个工具使用一个标准的内核以动态的方式进行跟踪.

考虑到DTrace和ProbeVue在各自的操作系统中的巨大作用, 为Linux操作系统策划一个实现该功能的开源项目是势不可挡的.SystemTap从2005年开始开发, 它提供与DTrace和ProbeVue类似的功能. 许多社区还进一步完善了它, 包括Red Hat、Intel、Hitachi和IBM等.

这些解决方案在功能上都是类似的, 在触发探针时使用探针和相关联的操作脚本.

Linux 下的一个全新的性能测量和调式诊断工具 Systemtap, 第 3 部分: Systemtap:https://www.ibm.com/developerworks/cn/linux/l-cn-systemtap3/

6 kgdb && kgtp

6.1 kgdb

KDB 和 KGDB 合并, 并进入内核

KGDB是大名鼎鼎的内核调试工具, 他是由KDB和KGDB项目合并而来.

kdb是一个Linux系统的内核调试器, 它是由SGI公司开发的遵循GPL许可证的开放源码调试工具.kdb嵌入在Linux内核中. 为内核&&驱动程序员提供调试手段. 它适合于调试内核空间的程序代码. 譬如进行设备驱动程序调试. 内核模块的调试等.

kgdb和kdb现在已经合并了. 对于一个正在运行的kgdb而言, 可以使用gdbmonitor命令来使用kdb命令. 比如

(gdb)gdb monitor ps -A

就可以运行kdb的ps命令了.

分析一下kdb补丁和合入主线的kdb有啥不同

kdb跟kgdb合并之后, 也可以使用kgdb的IO驱动(比如键盘), 但是同时也kdb也丧失了一些功能.合并之后的kdb不在支持汇编级的源码调试. 因此它现在也是平台独立的.

kdump和kexec已经被移除。

从/proc/meninfo中获取的信息比以前少了。

bt命令现在使用的是内核的backtracer,而不是kdb原来使用的反汇编。

合并之后的kdb不在具有原来的反汇编(id命令)

总结一下 :kdb和kgdb合并之后,系统中对这两种调试方式几乎没有了明显的界限,比如通过串口进行远程访问的时候,可以使用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)

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应该是一把世间少有的倚天剑.

金庸笔下的很多人都有对宝刀的癖好, 即便本领低微不配拥有, 但是喜欢, 便无可奈何. 我恐怕正如这些人一样, 因此进了酒馆客栈, 见到相熟或者不相熟的人, 就要兴冲冲地要讲讲那倚天剑的故事.

8 其他Tracer工具

8.1 LTTng

LTTng是一个Linux平台开源的跟踪工具, 是一套软件组件, 可允许跟踪Linux内核和用户程序, 并控制跟踪会话(开始/停止跟踪、启动/停止事件 等等). 这些组件被绑定如下三个包 :

beccf058-f717-11ed-90ce-dac502259ad0.jpg

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开发者正在增加容器支持。留意这些内容。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39862
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206744
  • 调试
    +关注

    关注

    7

    文章

    527

    浏览量

    33625
  • 文件系统
    +关注

    关注

    0

    文章

    273

    浏览量

    19681
  • 数据交换
    +关注

    关注

    0

    文章

    87

    浏览量

    17811

原文标题:8 其他Tracer工具

文章出处:【微信号:嵌入式情报局,微信公众号:嵌入式情报局】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux内核镜像bzImage和rootfs的制作、安装及调试过程

    一个最小可运行Linux操作系统需要内核镜像bzImage和rootfs,本文整理了其制作、安装过程,调试命令,以及如何添加共享磁盘。
    发表于 10-14 17:28 4983次阅读
    <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 637次阅读

    Linux内核调试方法的总结

    内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场。调试
    发表于 05-20 10:30

    请问linux内核怎么调试

    问个问题,怎么调试linux内核,百度了一下,结果还是不会使用gdb调试内核。希望大虾帮忙指点一下。
    发表于 02-25 07:32

    学习Linux内核过程中的心得总结

    在上了Linux内核这门课后,我对Linux内核开始有了初步的了解,关于Linux内核,我觉得最
    发表于 07-12 07:27

    ADB工具(安卓 & Linux调试)下载

    安卓 & Linux调试:ADB工具
    发表于 05-17 11:12 21次下载
    ADB<b class='flag-5'>工具</b>(安卓 & <b class='flag-5'>Linux</b><b class='flag-5'>调试</b>)下载

    Linux:QEMU调试内核的步骤

    Linux:QEMU调试内核的步骤
    的头像 发表于 06-23 09:03 2892次阅读
    <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 3947次阅读
    快速理解什么是<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>教程

    PID算法原理_调试经验以及代码总结

    PID算法原理_调试经验以及代码总结分享。
    发表于 05-25 15:59 16次下载

    嵌入式LINUX系统内核内核模块调试

    嵌入式LINUX系统内核内核模块调试(嵌入式开发和硬件开发)-嵌入式LINUX系统内核
    发表于 07-30 13:55 9次下载
    嵌入式<b class='flag-5'>LINUX</b>系统<b class='flag-5'>内核</b>和<b class='flag-5'>内核</b>模块<b class='flag-5'>调试</b>

    嵌入式linux开发工具总结

    1.嵌入式linux开发工具-编译器gcc(静态库 动态库的制作)可以制作库 库的使用2.嵌入式linux开发工具-调试器gdb(
    发表于 11-01 16:32 12次下载
    嵌入式<b class='flag-5'>linux</b>开发<b class='flag-5'>工具</b><b class='flag-5'>总结</b>

    Linux内核调试方式以及工具集锦

    内核总是那么捉摸不透, 内核也会犯错, 但是调试却不能像用户空间程序那样, 为此内核开发者为我们提供了一系列的工具和系统来支持
    的头像 发表于 02-20 17:56 604次阅读

    Linux内核调试方式以及工具汇总(上)

    内核总是那么捉摸不透, 内核也会犯错, 但是调试却不能像用户空间程序那样, 为此内核开发者为我们提供了一系列的工具和系统来支持
    的头像 发表于 05-12 14:58 679次阅读
    <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>汇总(上)

    Linux内核调试方式以及工具汇总(下)

    内核总是那么捉摸不透, 内核也会犯错, 但是调试却不能像用户空间程序那样, 为此内核开发者为我们提供了一系列的工具和系统来支持
    的头像 发表于 05-12 14:59 961次阅读
    <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>汇总(下)