内核调试

转载一篇文章:http://my.oschina.net/fgq611/blog/113249 linux内核调试方法总结。

1.二分法与printk()

AB之间有个bug,在AB之间找个中间点C,使用printk,查看bug在AC还是CB。以此类推。其中printk(“__func__”)

设定printk的级别,八个级别分别是从1--8,其中1基本最高,只打印系统可能崩溃的信息。我们可以使用命令

echo 8 > /proc/kernel/printk;可以打印所有的消息。

在我们的系统pnfs中可以输入:

2.syslog && dmesg

cat /var/log/message   dmesg;

3.gdb调试内核。

gdb  /user/src/linux/vmlinux  /proc/kore.但是不能调试可加载模块。。。。只能调试内核的模块。

4.BUG(),BUG_ON()可能会引发oops,

  #define BUG() do { 

     printk("BUG: failure at %s:%d/%s()! ", __FILE__, __LINE__, __FUNCTION__); 

     panic("BUG!");   /* 引发更严重的错误,不但打印错误消息,而且整个系统业会挂起 */

  } while (0) 

  #endif

5. 内存调试工具  MEMWATCH,

6 strace pwd.显示系统调用的trace

7.kgdb,提供了使用gdb调试内核的机制。需要两台机器,一代开发机,一台目标机,机器通过串口或以太网口相连,gdb调试器运行在开发机上。(不好用。。。)

时间: 2024-07-31 14:22:44

内核调试的相关文章

通过虚拟机搭建windows内核调试环境

今天我们来记录下通过虚拟机搭建windows内核调试环境. 这里是官方文档. 1.在虚拟机设置中为目标计算机创建命名管道 2.在目标计算机中开启调试 3.在windbg中输入目标计算机(虚拟机)的地址信息 4.在windbg菜单中点击[Debug|Break]开始内核调试.

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

Linux内核调试技术——jprobe使用与实现

前一篇博文介绍了kprobes的原理与kprobe的使用与实现方式,本文介绍kprobes中的第二种探测技术jprobe,它基于kprobe实现,不能在函数的任意位置插入探测点,只能在函数的入口处探测,一般用于监测函数的入参值.本文首先通过一个简单的示例介绍jprobe的使用方式,然后通过源码详细分析jprobe的实现流程. 内核源码:Linux-4.1.x 实验环境:Fedora25(x86_64).树莓派1b 1.jprobe使用实例 使用jprobe探测函数的入参值,需要编写内核模块.同k

内核调试和系统调用劫持

如何在不重新编译内核,不rmmod内核模块的情况下修改系统调用 为了解决这个问题,最终实现了两种解决方式: 1.Linux系统调用劫持 2.Kprobes内核调试技术(并非真正的修改) 下面分别说下: Linux系统调用劫持: 其实就是修改内核符号表,来达到一个劫持的作用.因为系统调用实际上是触发了一个0x80的软中断,然后转到了系统调用处理程序的入口system_call().system_call()会检查系统调用号来得出到底是调用哪种服务,然后会根据内核符号表跳转到所需要调用的内核函数的入

内核调试文章两篇

介绍kdb: http://www.ibm.com/developerworks/cn/linux/l-kdbug/index.html 整体介绍内核调试技术: http://www.ibm.com/developerworks/cn/linux/l-kdb/index.html

内核调试技巧

MarkdownPad Document *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { marg

Linux 内核调试之 printk

问题描述:最近这两天再调试 platform 驱动,程序老是有点小问题,得不到自己想要的结果,突然意识到内核调试重要性,重新整理一下 printk 基本用法.内核通过 printk() 输出相关信息,在调用 printk() 函数时必须要指定日志级别. 1.printk 日志等级 在 include/linux/kernel.h 中定义了如下几个日志级别 <span style="font-family:Microsoft YaHei;font-size:12px;">#d

linux内核调试指南

linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环境的建立 gdb基础 基本命令 gdb之gui gdb技巧 gdb宏 汇编基础--X86篇 用户手册 AT&

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

CSDN GitHub Linux内核调试的方式以及工具集锦 LDD-LinuxDeviceDrivers/study/debug 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供收录, 鄙人在此谢谢啦 "调试难度本来就是写代码的两倍. 因此, 如果你写代码的时候聪明用尽, 根据定义, 你就没有能耐去调试它了.&qu

内核调试神器SystemTap — 简介与使用(一)

a linux trace/probe tool. 官网:https://sourceware.org/systemtap/ 简介 SystemTap是我目前所知的最强大的内核调试工具,有些家伙甚至说它无所不能:) (1) 发展历程 Debuted in 2005 in Red Hat Enterprise Linux 4 Update 2 as a technology preview. After four years in development, System 1.0 was relea