
调试手段
文章平均质量分 81
zhuyong006
这个作者很懒,什么都没留下…
展开
-
宋宝华: 用off-cpu火焰图进行Linux性能分析
在《宋宝华:火焰图:全局视野的Linux性能剖析》一文中,我们主要看了on-cpu火焰图,理解了系统的CPU的走向的分析。但是,很多时候,单纯地看on-cpu的情况(什么代码在耗费CPU),并不能解决性能问题,因为有时候性能差的原因瓶颈不一定在CPU上面,而是在off-cpu的时间,比如:进程进入系统调用执行io动作,io动作的延迟进程等待mutex锁的时间内存被交换,swap的时间内存不够的时候...转载 2020-01-01 20:06:45 · 2046 阅读 · 0 评论 -
在Linux上运行procmem和procrank
Android系统中提供了两个命令行工具procrank、procmem用于查看系统中的内存使用情况。procrank可以查看系统中所有进程的整体内存占用情况,并按照规则排序。而procmem可以针对某个特定的进程分析其堆、栈、共享库等内存占用情况。这两个工具对于我们分析内存相关问题非常有效。由于Android系统使用的是Linux内核,理论上这样的工具可以在Linux上运行。编译参考Andr...转载 2020-01-01 19:39:45 · 746 阅读 · 0 评论 -
Simpleperf介绍
什么是simpleperfSimpleperf是Android平台的一个本地层性能分析工具。它的命令行界面支持与linux-tools perf大致相同的选项,但是它还支持许多Android特有的改进。Simpleperf是Android开源项目(AOSP)的一部分。其源代码 位于。其最新的文档 位于。Bugs 和 功能需求可以提交到 githb上。Simpleperf是如何工作的现代的C...转载 2019-11-17 20:09:12 · 7499 阅读 · 0 评论 -
Android lowmemorykiller分析
lowmemkiller中会涉及到几个重要的概念:/sys/module/lowmemorykiller/parameters/minfree:里面是以”,”分割的一组数,每个数字代表一个内存级别/sys/module/lowmemorykiller/parameters/adj:对应上面的一组数,每个数组代表一个进程优先级级别举个例子:/sys/module/lowmemorykille...原创 2019-02-19 17:49:42 · 387 阅读 · 0 评论 -
Android中类似Linux下ldd分析可执行文件和动态库对库的依赖
1. Android下面并没有Linux中的ldd工具,但是它也提供了一个类似的工具,路径如下:prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-readelf对的,就是arm-linux-androideabi-readelf这个工具2. 如何使用:root@Jon:/h...原创 2019-02-27 16:15:32 · 1878 阅读 · 0 评论 -
Android下USB的虚拟串口功能
1 . 先关闭usb的gadge功能echo 0 > /sys/class/android_usb/android0/enable2 . 设置acm_transports为"TTY"的功能echo "TTY" > /sys/class/android_usb/android0/f_acm/acm_transports3 .gadge中加入ACM功能echo "a原创 2019-01-16 16:28:56 · 5429 阅读 · 0 评论 -
STM32中断向量偏移
总结一下在IAP升级中APP程序的中断向量表的偏移1. 关于APP程序的中断向量表地址偏移(三种方法,stm32F2与F4系列通用。三种方法本质一样只是看到网上的各种例程的表现形式不一样)① 直接操作寄存器在APP程序的main函数的开头设置中断向量表偏移SCB->VTOR = FLASH_BASE | 0x10000;其中0x10000是偏移量。。也就是前面的IAP...转载 2019-01-25 11:26:22 · 8244 阅读 · 0 评论 -
Linux_I2C读写流程
I2C的具体包括以下几部分内容1、I2C协议2条双向串行线,一条数据线SDA,一条时钟线SCL。SDA传输数据是大端传输,每次传输8bit,即一字节。支持多主控(multimastering),任何时间点只能有一个主控。总线上每个设备都有自己的一个addr,共7个bit,广播地址全0.系统中可能有多个同种芯片,为此addr分为固定部分和可编程部份,细节视芯片而定,看datasheet。...转载 2019-01-18 16:15:16 · 1913 阅读 · 0 评论 -
怎么用dd命令测试U盘读写速度
1.如何确认host是将外设识别为2.0还是3.0a)关注dmesg,查看如下字串usb 2-1: new SuperSpeed USB device number 2 using xhci-hcd说明是识别为3.0的外设usb 2-1: new high-speed USB device number 2 using xhci-hcd说明是识别为2.0的外设b)关注/sys/...原创 2018-12-11 11:57:35 · 3108 阅读 · 0 评论 -
基于Android Ndk/Jni的内存泄漏检测
之前分析过在Android Native中分析内存泄漏的方法:Android Native内存泄露检测(针对Android7.0)但是很遗憾这个方法并不适用于Ndk和Jni,因此我们需要为Ndk和Jni寻找一种合适的方法,他就是LeakTracer这个工具并没有之前libc那么的智能,他需要我们手动的在怀疑的代码段中加入检测代码,原理是将malloc和free函数替换为LeakTracer中带有...原创 2019-03-13 17:31:32 · 3732 阅读 · 2 评论 -
初探Linux内核态——通过proc文件系统作快速问题定位
本文是对一篇blog的翻译,感谢译者Hualet Wang。原文通过一个例子为我们展示了,在分析进程运行缓慢的问题时,strace和pstack都束手无策的情况下,不要忘了还有proc。简介文章翻译自 Peeking into Linux kernel-land using /proc filesystem for quick’n’dirty troubleshooting这篇博客的内容完全...转载 2019-03-26 15:54:29 · 599 阅读 · 0 评论 -
gdb调试出现“no debugging symbols found”
先查看下vmlinux是否特别的小,如果是说明内核配置项没有加入debug信息,在.config中加入下面配置,重新编译即可CONFIG_DEBUG_INFO=y原创 2019-04-12 16:22:23 · 2838 阅读 · 0 评论 -
SEGGER-RTT调试(代替串口printf输出)的使用方法
在没有串口printf输出的情况下,可以使用SEGGER-RTT进行嵌入式开发调试。 RTT Real Time Terminal 即jink的实时终端 使用方法1. 安装jlink V5.02或以上版本的驱动。比如说越界访问导致的死机问题,这种问题的出现一般需要长时间测试才能发现,而且发现的时候即使有panic log。你也没什么头绪。这是为什么呢?假设驱动A通过kmalloc()申请了一段内...转载 2019-09-11 15:36:32 · 4015 阅读 · 0 评论 -
Systrace分析app启动分析
Android Version: 6.0及以上Platform: 通用1. 介绍此篇文章将介绍如何通过systrace来分析在launch界面click一个app的icon后app的启动时间,包括了animation off和animation on的情况,以google music应用为例。2. 寻找InputReader–>AppLaunch_dispatchPtr:Down根...转载 2019-10-08 15:42:43 · 1003 阅读 · 0 评论 -
高通如何通过9008端口读取EMMC的分区
1.首先你需要安装QPST,然后确认QPST的安装目录下有如下2个文件D:\Program Files (x86)\Qualcomm\QPST\binfhloader.exeQSaharaServer.exe2.设备需要切换到9008端口下,然后执行如下命令, 最后一个COM4是对应的9008端口号QSaharaServer.exe -s 13:prog_emmc_firehose...原创 2018-12-21 13:02:19 · 26404 阅读 · 10 评论 -
如何直观的长时间统计Android应用的动态内存消耗
Android目标机需要有busybox编写如下shell脚本(mem-trace.sh)#!/bin/bashFILE_NAME=/data/mem.txtrm -rf $FILE_NAMEecho "USS MEM" &gt;&gt; $FILE_NAMELoopCommond(){ procrank | grep "/system/bin/mediaserve...原创 2018-12-07 18:44:22 · 453 阅读 · 0 评论 -
往linux内核函数挂钩子
概述ARM平台下该方案不可行,仅适用于X86本文讲解替换一个已经在内存中的函数,使得执行流流入我们自己的逻辑,然后再调用原始的函数。比如有个函数叫做funcion,而你希望统计一下调用function的次数,最直接的方法就是如果有谁调用function的时候,调到下面这个函数就好了。void new_function(){ count++; return...转载 2018-11-28 18:38:26 · 590 阅读 · 0 评论 -
Linux内核的Kmemleak实现内存泄露检测
1. Kmemleak的使用方法 a. 在uboot的bootarg中加入&amp;amp;quot;kmemleak=on&amp;amp;quot; b. 在.config中使能如下配置CONFIG_HAVE_DEBUG_KMEMLEAK=yCONFIG_DEBUG_KMEMLEAK=yCONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=400 c. mount -t d...原创 2018-10-16 15:32:07 · 10316 阅读 · 9 评论 -
使用systemtap调试Linux内核
最近在公司看Linux内核的nmi死锁检测功能的实现机制,当然,是因为它变了,所以我才看的,简单来说就是在红帽的某牛提交了一个内核patch:new nmi_watchdog using perf events,这个patch已经被合入到内核主线2.6.38版本,所以使用自该版本开始后内核的Linux系统,其/proc/interrupts显示的中断数不再按每秒1000次的频率增长。关于new n...转载 2018-10-18 16:20:40 · 636 阅读 · 0 评论 -
[RK3399][Android7.1] 调试笔记 --- 查看开机上一次kernel log
OS: Android 7.1 Kernel: v4.4.83rk3288平台,rk自己实现了一套机制获取上一次的kernel log. rk3399平台,使用了内核框架中的ramoops机制。查看方法:#cat /sys/fs/pstore/console-ramoops-0要开启此功能,需要做以下几点配置(rk3399默认都开启了)打开功能: rockchi...转载 2018-08-24 19:35:17 · 1414 阅读 · 0 评论 -
[RK3399][Android7.1] ADB功能怎么Debug
如何编译ADB system\core\adb\Android.mk 去掉其中LOCAL_MODULE_HOST_OS中的windows选项如下:include $(CLEAR_VARS)LOCAL_MODULE := libadbLOCAL_MODULE_HOST_OS := darwin linux //去掉windowsLOCAL_CFLAGS := $(LIBADB_CF...原创 2018-08-28 17:22:31 · 1548 阅读 · 0 评论 -
Ubuntu 16.04 利用qemu模拟ARM开发板
QEMU目前可以模拟vexpress Cortex A9四核处理器开发板。环境配置:Ubuntu 16.04,Kernel 4.4.1内容参考了:http://blog.youkuaiyun.com/linyt/article/details/42504975http://www.cnblogs.com/pengdonglin137/p/5023342.html(推荐)https://...转载 2018-07-21 13:23:40 · 1015 阅读 · 0 评论 -
linux下类似Bus Hound的工具
linux下类似Bus Hound的工具0推荐在linux大家有时候需要调试usb接口的串口消息,但是没有类似于windows下的bus hound工具,感觉比较痛苦,其实linux内核提供了usbmon这个工具,可以收集串口信息。1.准备:挂接debugfs (这个可以在内核配置中使能),加载usbmon模块(如果usbmon编译成模块). 如果usbmon编译到内核中的话,第二步可以省...转载 2018-07-11 21:20:40 · 2389 阅读 · 0 评论 -
Linux下gdb调试(GUI)
Linux下gdb调试(tui) 1 处于TUI模式的GDB为了以TUI模式运行GDB,可以在调用GDB时在命令行上指定-tui选项,或者处于非TUI模式时在GDB中使用Ctrl+X+A组合键。如果当前处于TUI模式,后一种命令方式就会使你离开TUI模式。在TUI模式中,GDB窗口划分为两个子窗口——一个用于输入GD...转载 2018-07-17 09:07:21 · 3333 阅读 · 0 评论 -
linux和android调试概要
原帖地址:http://blog.youkuaiyun.com/loongembedded/article/details/684848701. 抓取linux内核启动的完整信息需要增大缓冲区大小,目前默认为128KB,参考链接:点击打开链接 2.Android内核开发:学会分析系统的启动log点击打开链接 3.将init进程的详细log输出到dmesg文件中修改/syst...转载 2018-03-21 09:07:31 · 277 阅读 · 0 评论 -
Linux 和 Android 系统性能分析
作为一名Linux 或 Android 平台的系统工程师,在开发系统新功能外,主要工作就是优化系统性能,使系统上以最优的状态运行,但是由于硬件问题、软件问题、网络环境等的复杂性和多变性,导致对系统的优化变得异常复杂,如何定位性能问题出在哪个方面,是性能优化的一大难题, 从系统入手,阐述由于系统软、硬件配置不当可能造成的性能问题,并且探讨检测系统故障和优化性能的一般方法和流程。一、CPU性能评估...转载 2018-07-06 17:15:11 · 1025 阅读 · 0 评论 -
Linux检测内存泄露的脚本
1.针对应用场景下的内存泄露mm-leak-app.sh#!/bin/sh if [ $# -ne 1 ]; then echo &amp;amp;amp;amp;amp;amp;quot;Usage: `basename $0` process_name&amp;amp;amp;amp;amp;amp;quot; exit 1fi APPNAME=$1PROC=&amp;amp;amp;amp;amp;amp;quot;`ps -原创 2018-10-17 18:52:29 · 1185 阅读 · 0 评论 -
在工程中最常用的 vim使用技巧
原帖地址:本文记录vim编辑器的代码编辑常用快捷键与在vim中如何进行函数跳转等快捷操作。可以查看右侧目录快速找到你所需要的内容。主要学习以下内容:.vimrc配置文件cscope-indexer 文件索引组件使用上述两个组件更加快捷的编辑代码1、vim编辑常用快捷键当我们使用vim打开一个文件的时候,刚进到文件,是处于命令行模式(就是无法编辑代码)。当按下键盘上的 i 或者 ...转载 2018-11-28 15:39:05 · 212 阅读 · 0 评论 -
linux下实现在程序运行时的函数替换(热补丁)
原帖地址:声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术原作者的分享。 但是injso文章中的代码存在一些问题,所以后面出现的代码是经过作者修改和检测的。也正因为这些错误,加深了我的学习深度。&amp;nbsp; 最近因为在学习一些调试的技术,但是很少有提到如何在函数运行时实现函数替换的。 为什么会想到这一点?因为在学习调试时,难免...转载 2018-11-30 10:26:34 · 1258 阅读 · 0 评论 -
高通平台 ramdump-parser 简介
ramdump 是什么?简单来说就是把系统memory中的某一个时间点的的数据信息通过一定手段取出来保存起来的内存崩溃文件,属于ELF文件格式。当系统发生致命错误无法恢复的时候,主动触发抓取ramdump把异常现场保留下来供离线分析定位问题是一种非常重要的高级调试手段。高通的ramdump触发后可以连USB通过PC工具拉出来,都是一堆binary文件,需要使用特定的脚本工具进一步解析后才...转载 2018-11-20 15:22:21 · 3466 阅读 · 0 评论 -
Android下如何使用smem工具获取进程的内存分布
首先需要借助busybox在手机上执行msm8953_64:/ # busybox smemcap &amp;gt; /data/metadata.tar将metadata.tar放到ubuntu系统的主机主机上执行如下指令:smem -S metadata.tar --pie=command5.生成内存分布的饼状图...原创 2018-11-12 20:09:11 · 495 阅读 · 0 评论 -
谈谈Linux的栈回溯与妙用
原标题:谈谈Linux的栈回溯与妙用 作者简介:冬之焱,杭州某公司linux内核工程师,4年开发经验,对运用linux内核的某些原理解决实际问题很感兴趣。 版权声明:本文最先发表于"Linux阅码场"微信公众号,转载请在文章的最开头,保留本声明。 1 前言 说起linux内核的栈回溯功能,我想这对每个Linux内核或驱动开发人员来说,太常见了。如下演示...转载 2018-11-02 10:26:46 · 3660 阅读 · 0 评论 -
Android环境下的GDB调试
gdb是GNU开发的针对Linux/Unix环境下程序的调试工具。为了节约目标系统的资源,gdb通常采用gdb+gdbserver的方式进行调试。在Android GDB调试场景下,gdb运行在PC端,gdbserver运行在Android系统中。在实际的调试过程中,PC端的gdb参照调试符号文件向gdbserver发出命令,gdbserver就会向运行程序发出信号,从而实现对Android系统...转载 2018-11-06 16:29:16 · 1619 阅读 · 0 评论 -
Linux线程间死锁分析
死锁 (deadlocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。...转载 2018-11-06 15:47:10 · 1452 阅读 · 0 评论 -
Android Native内存泄露检测(针对Android7.0)
1. 需要合入一个Patch2. 执行指令adb rootadb shell setprop libc.debug.malloc.program cameraserveradb shell setprop libc.debug.malloc.options “backtrace_enable_on_signal leak_track”adb shell ps | find /I “ca...原创 2018-11-06 10:46:41 · 2702 阅读 · 3 评论