linux内核态和用户态调试

内核态

1、gdb

        大部分工程师常用的单步调试方式都会选择gdb,它是最常用的工具,信号是gdb实现断点功能的基础,使用gdb打断点的时候实际上就是朝某个地址写入断点指令,当程序运行到这条指令后就会触发SIGTRAP信号,然后gdb收到信号后会停在这个位置查询断点表,如果在表里查到就判定找到断点。

内核态要是用gdb需要内核先支持kgdb

#: make menuconfig

---->Kernel hacking
    ---->Compile-time checks and compiler options
    ---->Compile the kernel with frame pointers 
    ---->Compile-time checks and compiler options
    ---->Compile the kernel with debug info
    ---->KGDB: kernel debugger

配置成功后编译内核,然后需要增加启动参数支持kgdb调试

#kgdbwait:kgdb启动的时候停下来等待连接
kgdboc=ttyS0,115200 kgdbwait

后面uboot启动的时候等到kgdb的位置会停下来等待gdb连接,后面就可以调试vmlinux了

$arm-none-linux-gnueabi-gdb vmlinux

接下来就和用户空间一样了

2、crash

除了单步调试还有一种情况是linux运行过程中内核发生崩溃,常见的log字眼比如oops,panic之类的或者干脆一堆堆栈,这个时候linux会使用kdump搜集好崩溃前 的内存,生成vmcore,我们可以使用crash工具分析vmcore

$:crash vmlinuz-4.3.0-27-generic

后面可以使用crash命令来调试,类似gdb

用户态

1、gdb

2、addr2line

另外还能通过出错的地址使用addr2line定位symbol文件中崩溃的代码位置,然后前向查找

另外还可以通过反汇编的方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
kdump是一个在Linux内核崩溃时收集dump信息的工具。它的设计目标是在遇到内核崩溃时,能够提供完整的内核转储信息,以便开发人员进行分析和调试。 kdump的工作原理是在系统启动时,设置一个保护内存区域,用于在内核崩溃时存储dump信息。当系统出现崩溃时,kdump会触发一个内核崩溃的路径,将所有的内核信息存储在这个保护区域中。然后,kdump会加载一个独立的小内核,这个小内核只包含了最小的功能,仅仅用于将之前存储的内核信息写入磁盘。这样,即使主内核发生崩溃,kdump仍然能够将dump信息保存下来。 kdump所收集的dump信息包含了内核的堆栈、寄存器的状内核模块列表、内核代码和数据段等。这些信息对于开发人员分析和调试内核问题非常有帮助。无论是内核中的软件错误、硬件故障还是系统配置错误,都能够通过kdump的信息来定位和解决问题。 为了使用kdump,我们首先需要安装kexec工具,然后对系统进行一些配置,如设置内存保护区域的大小、crashkernel参数等。配置完成后,重新启动系统,当系统崩溃时,kdump就会自动工作。 总结来说,kdump是一个非常有用的Linux内核调试工具,能够在内核崩溃时提供完整的dump信息,为开发人员提供了方便的分析和调试手段。它能够帮助我们快速定位和解决各种内核问题,提高系统的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值