LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

随笔分类 -  Linux Debug

通过JTAG对比内核启动后text/rodata段内容
摘要:关键词:vmlinux、strip、dump、_text、__end_rodata等等。 在日常的调试中,可能会在某些情况下踩到内核重要的数据,比如代码段或者rodata之类。 这种情况下,需要确认这些数据是否异常。 所谓的异常就是从DDR中读出的数据能否和vmlinux对上。 1. 准备vmlin 阅读全文

posted @ 2019-05-27 00:00 ArnoldLu 阅读(896) 评论(0) 推荐(0) 编辑

CK:User mode Bus Error(用户空间操作内核地址导致的异常)
摘要:关键词:VEC_ACCESS、coredump、LR、PC等。 CK中存在一种VEC_ACCESS异常,可能原因是用户空间访问了内核空间,还有一种是内核访问不存在的总线地址。 下面简单构造VEC_ACCESS异常,包括变量指针异常和函数指针异常并分析。 1. 变量指针异常 执行后异常输出如下,并生成 阅读全文

posted @ 2019-05-12 00:00 ArnoldLu 阅读(1740) 评论(0) 推荐(0) 编辑

非法指令(Illegal Instruction)问题定位
摘要:关键词:Illegal Instruction、SIGILL等。 进程在运行过程中会收到SIGILL信号,此类错误是由操作系统发送给进程的。 SIGILL是某个进程中的某一句不能被CPU识别指令,这些指令可能是一些形式错误、未知或者特权指令。 1. SIGILL原因 1.1 错误修改代码段 进程代码 阅读全文

posted @ 2019-05-05 00:00 ArnoldLu 阅读(51465) 评论(1) 推荐(0) 编辑

glibc提供的malloc()的调试工具
摘要:关键词:MALLOC_CHECK_、mtrace()、muntrace()、MALLOC_TRACE、mprobe()、-lmcheck等等。 1. MALLOC_CHECK_环境变量(double free) MALLOC_CHECK_提供了类似于mcheck()和mprobe()函数的功能,但是 阅读全文

posted @ 2019-05-05 00:00 ArnoldLu 阅读(6237) 评论(0) 推荐(1) 编辑

warn_alloc():page allocation failure问题分析
摘要:关键词:warn_alloc()、__GFP_XXX、order、CMA等等。 在内存申请的时候经常会遇到类似“ xxx: page allocation failure: order:10...”类型的问题,这是warn_alloc()的输出。 warn_alloc()被如下函数调用:__allo 阅读全文

posted @ 2019-04-11 17:24 ArnoldLu 阅读(9161) 评论(0) 推荐(1) 编辑

Linux Hung Task分析
摘要:关键词:khungtaskd、TASK_UNINTERRUPTIBLE、nvcsw、nivcsw、last_switch_count等等。 经常会遇到内核打印“INFO: task xxx:xxx blocked for more than 120 seconds.”这样的log信息,这是内核的hu 阅读全文

posted @ 2019-03-14 13:03 ArnoldLu 阅读(9150) 评论(0) 推荐(0) 编辑

Linux soft lockup分析
摘要:关键词:watchdog、soft lockup、percpu thread、lockdep等。 近日遇到一个soft lockup问题,打印类似“[ 56.032356] NMI watchdog: BUG: soft lockup - CPU#0 stuck for 23s! [cat:153] 阅读全文

posted @ 2019-01-31 18:16 ArnoldLu 阅读(9265) 评论(0) 推荐(0) 编辑

sigsuspend()阻塞:异步信号SIGIO为什么会被截胡?
摘要:关键词:fcntl、fasync、signal、sigsuspend、pthread_sigmask、trace events。 此文主要是解决问题过程中的记录,内容有较多冗余。但也反映解决问题中用到的方法和思路。 简单的描述问题就是:snap线程在pthread_sigmask()和sigsusp 阅读全文

posted @ 2019-01-03 10:08 ArnoldLu 阅读(2064) 评论(1) 推荐(0) 编辑

Linux kprobe调试技术使用
摘要:kprobe调试技术是为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术。 利用kprobe技术,可以在内核绝大多数函数中动态插入探测点,收集调试状态所需信息而基本不影响原有执行流程。 kprobe提供三种探测手段:kprobe、jprobe和kretprobe,其中jprobe和kretp 阅读全文

posted @ 2018-10-28 11:31 ArnoldLu 阅读(20310) 评论(1) 推荐(3) 编辑

GDB(The GNU Project Debugger)的基本使用方法
摘要:关键词:GDB。 GDB调试的三种方式: 1. 目标板直接使用GDB进行调试。 2. 目标板使用gdbserver,主机使用xxx-linux-gdb作为客户端。 3. 目标板使用ulimit -c unlimited,生成core文件;然后主机使用xxx-linux-gdb ./test ./co 阅读全文

posted @ 2018-09-16 22:45 ArnoldLu 阅读(116218) 评论(0) 推荐(8) 编辑

Debug Hacks中文版——深入调试的技术和工具
摘要:关键词:gdb、strace、kprobe、uprobe、objdump、meminfo、valgrind、backtrace等。 《Debugs Hacks中文版——深入调试的技术和工具》这本书是Miracle Linux一些同事合作,主要关注Linux下的调试技术和工具。 本文章以此书为蓝本进行 阅读全文

posted @ 2018-09-15 09:07 ArnoldLu 阅读(4204) 评论(0) 推荐(0) 编辑

Linux死锁检测-Lockdep
摘要:关键词:LockDep、spinlock、mutex。 lockdep是内核提供协助发现死锁问题的功能。 本文首先介绍何为lockdep,然后如何在内核使能lockdep,并简单分析内核lockdep相关代码。 最后构造不同死锁用例,并分析如何根据lockdep输出发现问题根源。 1. Lockde 阅读全文

posted @ 2018-08-13 22:35 ArnoldLu 阅读(26573) 评论(0) 推荐(2) 编辑

Linux IO性能分析blktrace/blk跟踪器
摘要:关键词:blktrace、blk tracer、blkparse、block traceevents、BIO。 本章只做一个记录,关于优化Block层IO性能方法工具。 对Block层没有详细分析,对工作的使用和结果分析也没有展开。 如果有合适的机会补充。 1. blktrace介绍 如下图可知整个 阅读全文

posted @ 2018-05-30 08:51 ArnoldLu 阅读(17395) 评论(0) 推荐(0) 编辑

Linux内存管理 (23)一个内存Oops解析
摘要:专题:Linux内存管理专题 关键词:DataAbort、fsr、pte、backtrace、stack。 在内存相关实际应用中,内存异常访问是一种常见的问题。 本文结合异常T32栈回溯、Oops打印以及代码,分析打印log,加深对Oops的理解,有助于快速定位问题解决问题。 1. 不同类型异常处理 阅读全文

posted @ 2018-04-17 20:01 ArnoldLu 阅读(8452) 评论(0) 推荐(1) 编辑

Linux内存管理 (22)内存检测技术(slub_debug/kmemleak/kasan)
摘要:专题:Linux内存管理专题 关键词:slub_debug、kmemleak、kasan、oob、Redzone、Padding。 Linux常见的内存访问错误有: 越界访问(out of bounds) 访问已经释放的内存(use after free) 重复释放 内存泄露(memory leak 阅读全文

posted @ 2018-03-20 19:54 ArnoldLu 阅读(23873) 评论(1) 推荐(1) 编辑

Lauterbach TRACE32技巧小集
摘要:1. TRACE32中实现类container_of功能 假设现在我只知道一个全局变量成员tv2的地址,类型是tvec_base。我想知道这个全局变量的地址怎么办? struct tvec_base { spinlock_t lock; struct timer_list *running_time 阅读全文

posted @ 2017-07-20 20:13 ArnoldLu 阅读(7286) 评论(0) 推荐(0) 编辑

Linux内核编程、调试技巧小集
摘要:1. 内核中通过lookup_symbol_name获取函数名称 内核中很多结构体成员是函数,有时可能比较复杂不知道具体使用哪一个函数。这是可以通过lookup_symbol_name来获取符号表名称。 在timer_list.c和timer_stats.c中有使用,如下: 2. 通过__built 阅读全文

posted @ 2017-07-11 20:34 ArnoldLu 阅读(3358) 评论(0) 推荐(1) 编辑

Linux内存使用情况以及内存泄露分析之工具与方法
摘要:《Linux C/C++ Memory Leak Detection Tool》 1. 内存使用情况分析 1.1 系统总内存分析 通过cat /proc/meminfo,可用的物理内存=MemFree+Buffers+Cached。 MemTotal: 5933132 kBMemFree: 4485 阅读全文

posted @ 2017-03-24 17:37 ArnoldLu 阅读(20092) 评论(0) 推荐(2) 编辑

导航