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

随笔分类 -  Linux Debug

基于ldd快速遍历应用/库的依赖关系
摘要:对于复杂的应用或库文件,要了解其运作原理、架构,通过了解其库依赖关系不失为一种手段。 ldd可以查看单个可执行文件或库文件以来的库,但是库比较多的话不容易有个全局概念。 所以基于ldd编解Python脚本,做个小工具,提供集中查看方式: 直接文本查看类似tree命令输出的属性结构。 xml格式的树形 阅读全文

posted @ 2024-03-29 23:59 ArnoldLu 阅读(384) 评论(0) 推荐(0) 编辑

基于Trace32查看Linux进程栈调用关系
摘要:1. 打开进程列表 点击菜单Linux->Display Process,即可查看所有进程列表。 2. 加载的可执行文件和库文件符号表 在感兴趣进程,右击选择: Display Stack Frame:最开始Stack都是由一串地址组成的。 Display maps:提供了地址范围和可执行文件/库文 阅读全文

posted @ 2023-12-02 23:59 ArnoldLu 阅读(356) 评论(0) 推荐(0) 编辑

Trace32下对ARM内存访问Access Classes总结
摘要:原内容来源于T32帮助文档debugger_arm.pdf的ARM Specific Implementations->Access Classes,这里记录方便查询。 首先介绍Access Classes都有哪些选项,然后介绍常见的Access Classes组合,最后介绍如何创建合法的Acces 阅读全文

posted @ 2023-05-24 23:59 ArnoldLu 阅读(438) 评论(0) 推荐(0) 编辑

ARM A7 PMU+perf简单记录
摘要:关键词:pmu,perf等等。 简单记录PMU及其内核驱动,内核中perf相关内容,以及两者是如何关联的。然后记录perf应用是如何和PMU硬件关联的,以及如何使用perf查看PMU结果。 A7 PMU概要 PMU作为一个扩展功能,是一种非侵入式的调试组件。 对PMU寄存器的访问可以通过CP15协处 阅读全文

posted @ 2023-04-23 23:59 ArnoldLu 阅读(1331) 评论(0) 推荐(0) 编辑

通过Python+CRemoteAPI控制Trace32进行调试
摘要:关键词:Python、C Remote API、Trace32等等。 当需要对Trace32调试进行自动化,或者提高效率时,可以通过Remote Control API进行。 基本的调试流程如下: Python、C等语言可以通过调用C Remote API库文件,和Trace32 PowerView 阅读全文

posted @ 2023-03-18 23:59 ArnoldLu 阅读(843) 评论(0) 推荐(0) 编辑

C静态检查工具:cppcheck和PCLint
摘要:关键词:cppcheck,PC-Lint等等。 1 cppcheck 1.1 cppcheck安装 sudo apt-get install cppcheck 1.2 cppcheck使用说明 cppcheck -h可以查看使用方法: -D<ID> Define preprocessor symbo 阅读全文

posted @ 2023-02-27 23:16 ArnoldLu 阅读(800) 评论(0) 推荐(0) 编辑

DV仿真环境下问题定位和性能分析工具:基于PC指针,结合map文件分析函数调用轨迹以及耗时
摘要:关键词:DV仿真,Python,map,PC等。 当DV使用复杂软件对硬件进行仿真时,由于没有类似Trace32等IDE调试环境,出现问题往往较难定位问题。同时如果想优化性能,较难直到不同流程耗时。 DV仿真可以记录每一次PC变动值,但是软件稍复杂会导致数据量非常庞大。 这里结合map就可以知道每一 阅读全文

posted @ 2023-02-26 23:58 ArnoldLu 阅读(174) 评论(1) 推荐(0) 编辑

Linux内存相关sysfs、工具
摘要:1. 全局内存分析 1.1 /proc/meminfo 详细参考:《/proc/meminfo》。 while true; do cat /proc/meminfo | grep MemFree; sleep 10; done 1.2 /proc/pagetypeinfo 1.3 slab相关问题定 阅读全文

posted @ 2021-10-28 14:32 ArnoldLu 阅读(2639) 评论(0) 推荐(1) 编辑

GDB调试Breakpoints之Catchpoints
摘要:关键词:breakpoint、catchpoint、catch、throw、assert、load/unload、fork/vfork/exec、syscall、signal等等。 Breakpoints能让程序执行到后暂停流程,包括Breakpoints、Watchpoints、Catchpoin 阅读全文

posted @ 2020-10-11 00:00 ArnoldLu 阅读(2453) 评论(0) 推荐(0) 编辑

Symbol Versioning for GCC:一种对动态库符号进行版本控制的技术
摘要:关键词:--version-script、Symbol Versioning等等。 gcc提供了Symbol Versioning,通过对Symbol进行版本化,可以达到symbol级别的兼容性检查。 1. 概要介绍 Symbol Versinoning只适用于动态库,首先对需要Versioning 阅读全文

posted @ 2020-08-22 00:00 ArnoldLu 阅读(2908) 评论(0) 推荐(1) 编辑

一个malloc()->mmap()->memset()性能问题解决过程
摘要:关键词:perf、malloc()、mmap()、memset()等。 一个嵌入式项目中启动4个线程,每个线程进行浮点数转换。 在启动后发现,这几个线程每个占用率都在15%左右,并且总的CPU耗时user远小于sys。 1. 现象分析 首先通过top简单查看,各个线程消耗的CPU情况;总的CPU消耗 阅读全文

posted @ 2020-07-30 10:24 ArnoldLu 阅读(2249) 评论(0) 推荐(1) 编辑

Stopped (tty output)异常分析和解决
摘要:关键词:SIGTTOU、tty、nohup等。 设计了一个进程,这个可以通过popen()启动其他进程。并且此进程处于后台运行。 在调用比如top的过程中出现Stopped (tty output)异常。 1. 简单分析 从接收到的异常字符,可以判断出应该是收到信号SIGTTOU导致了进程停止。 t 阅读全文

posted @ 2020-03-15 00:00 ArnoldLu 阅读(7826) 评论(1) 推荐(0) 编辑

GCC编译选项Sanitier问题定位记录
摘要:关键词:Address sanitizer、Use after free、Heap buffer overflow、Stack buffer overflow、Memory leak等等。 操作系统:Ubuntu 16.04;g++ (Ubuntu 4.8.5-4ubuntu2) 4.8.5;cla 阅读全文

posted @ 2020-02-02 00:00 ArnoldLu 阅读(5879) 评论(0) 推荐(2) 编辑

应用异常定位:通过记录maps更加准确定位问题点
摘要:关键词:coredump、maps、objdump、gdb等等。 最近遇到一个应用异常问题定位(Floating point exception/SIGFPE),说明是一个算术运算异常。 这种问题通常也比较简单:通过ulimit -c打开coredump;SIGFPE会触发coredump;然后gd 阅读全文

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

一个100%CPU占用率,但是线程名混乱和top不准问题定位过程
摘要:关键词:task_newtask、task_rename、process tree、top等。 有一个场景CPU占用率100%,同时进程下创建了一大堆线程,很多线程同样的名称。 而且存在一个情况,top查看所有进程占用率要远小于100%。 这里有两个问题,一是线程同名问题,由于程序设计之初没有考虑线 阅读全文

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

一个线程内存泄漏问题定位过程
摘要:关键词:meminfo、slabinfo、top、pthread_join、thread stack等等。 记录一个关于线程内存泄漏问题的定位过程,以及过程中的收获。 1. 初步定位 是否存在内存泄漏:想到内存泄漏,首先查看/proc/meminfo,通过/proc/meminfo可以看出总体内存在 阅读全文

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

一个EMFILE问题定位:lsof、ulimit的应用,以及简单分析
摘要:关键词:errno、EMFILE、ulimit、lsof等等。 背景是在对程序进行压力测试,运行了一段时间之后出现一个复位操作失败。 这个复位操作通过打开一个设备,进行读写操作,已达到控制GPIO输入输出的目的。 1. 初步分析原因 经过初步分析发觉fopen()返回NULL指针,说明fopen() 阅读全文

posted @ 2019-10-15 00:00 ArnoldLu 阅读(1022) 评论(0) 推荐(0) 编辑

gcc栈溢出保护机制:stack-protector
摘要:关键词:stack-protector、stack-protector-strong、stack-protector-all等等。 1. gcc栈保护机制stack-protector简介 gcc提供了栈保护机制stack-protector。关于stack-protector包含三个选项,分别是s 阅读全文

posted @ 2019-10-07 00:00 ArnoldLu 阅读(24646) 评论(0) 推荐(0) 编辑

一个驱动导致的内存泄漏问题的分析过程(meminfo->pmap->slabtop->alloc_calls)
摘要:关键词:sqllite、meminfo、slabinfo、alloc_calls、nand、SUnreclaim等等。 下面记录一个由于驱动导致的内存泄漏问题分析过程。 首先介绍问题背景,在一款嵌入式设备上,新使用sqllite库进行数据库操作,在操作数据(大量读写操作)一段时间之后,发生OOM现象 阅读全文

posted @ 2019-09-28 00:00 ArnoldLu 阅读(6999) 评论(0) 推荐(3) 编辑

coredump配置、产生、分析以及分析示例
摘要:关键词:coredump、core_pattern、coredump_filter等等。 应用程序在运行过程中由于各种异常或者bug导致退出,在满足一定条件下产生一个core文件。 通常core文件包含了程序运行时内存、寄存器状态、堆栈指针、内存管理信息以及函数调用堆栈信息。 core就是程序当前工 阅读全文

posted @ 2019-07-12 00:00 ArnoldLu 阅读(47678) 评论(1) 推荐(8) 编辑

导航