解BUG笔记
放狼的爷们
阳光 儒雅 博学 勤思 死宅
展开
-
sysrq调试linux驱动bug
Linux中SysRq的使用 作者:blue_stone([email]blue_stone@xinhuanet.com[/email]) 转载请注明出处: http://bluestone.cublog.cn当Linux 系统不能正常响应用户请求时, 可以使用SysRq小工具控制Linux.一 SysRq的启用与关闭要想启用SysRq, 需转载 2017-08-21 23:57:26 · 348 阅读 · 0 评论 -
linux适当的时候用ps、top查看线程状态
1. pstreepstree以树结构显示进程$ pstree -p work | grep adsshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552) |-{ad_preprocess}(4553)转载 2017-08-22 23:55:34 · 16718 阅读 · 0 评论 -
码流分析工具ffprobe.exe介绍
http://blog.csdn.net/stone_wzf/article/details/45378759‘-L’ 显示 license‘-h, -?, -help, --help [arg]’ 打印帮助信息;可以指定一个参数 arg ,如果不指定,只打印基本选项 可选的 arg 选项: ‘long’ 除基本选项外,还将打印高级选项转载 2017-09-05 23:15:03 · 4835 阅读 · 0 评论 -
解码器的bug笔记
1.播放码流卡顿,部分码流只有3个字节的nal,切割03后插入seg队列不太兼容,之前的容错导致插不进去seg队列,导致卡顿,这种没有意义的nal直接释放掉2.增加起播的速度,按解码序快速输出第一帧,不经过DPB管理输出后再插入DPB重新按照显示序输出,但码流错误,第二帧和第一帧一样,但是硬件error rate到98%,代码没处理这种特殊情况,卡顿。3.I帧播放,单独的接口,(屏保切换功能),I...原创 2017-11-05 23:13:13 · 587 阅读 · 0 评论 -
gprof使用介绍-优化程序性能
gprof1.1 简介gprof实际上只是一个用于读取profile结果文件的工具。gprof采用混合方法来收集程序的统计信息,他使用检测方法,在编译过程中在函数入口处插入计数器用于收集每个函数的被调用情况和被调用次数;也使用采样方法,在运行时按一定间隔去检查程序计数器并在分析时找出程序计数器对应的函数来统计函数占用的时间。 Gprof具有以下优缺点: 1) 优转载 2017-11-06 00:10:26 · 696 阅读 · 1 评论 -
oprofile性能分析优化程序
转载:http://www.cnblogs.com/bangerlee/archive/2012/08/30/2659435.htmloprofile利用cpu硬件层面提供的性能计数器(performance counter),通过计数采样,帮助我们从进程、函数、代码层面找出占用cpu的"罪魁祸首"。下面我们通过实例,了解oprofile的具体使用方法。 常用命令使用oprof转载 2017-11-06 00:14:45 · 337 阅读 · 0 评论 -
Linux用户态用信号定位异常退出访问非法内存问题
repost from:http://www.cjjjs.com/paper/xmkf/2017817141130842.html 很多用户认为进程异常终止情况无从分析,但实际上进程异常终止情况都是有迹可寻的. 所有的进程异常终止行为,都是通过内核发信号给特定进程或进程组实现的. 可分成几个类型进行描述: - SIGKILL. SIGKILL最特殊,因为该信号不可被捕获,同时SI转载 2018-01-28 23:13:37 · 2014 阅读 · 0 评论 -
调试Linux驱动Bug的思路总结
2017年一年的工作,大部分做的解码器驱动相关的工作,由于硬件也不会有太大的变化,主要是优化和增加新规格,毕竟很成熟的东西你去改它何必呢?所以驱动也不会太大改变,最近一年的代码量输出的比较小,主要是调试驱动,解Bug。一年下来解了小说100来个Bug吧~~,当然还有很多问题单是非问题,也花了不少精力澄清。 调试驱动,解Bug,任务主要来源是自己测试发现的Bug,测试部测出来的Bug,...原创 2018-03-01 22:17:01 · 505 阅读 · 1 评论 -
用mprotect来定位Linux踩内存的问题
最恶心的Bug莫过于踩内存,定位了内核问题的朋友都知道。这类问题一直没有很套路的方法解决,都需要走读大量的代码,做大量调试来解决。解这类问题最关键的两点就是,1,找到被踩的内存地址,2,抓住被踩的时序。 想要找到被踩的内存地址,这里很多时候可以通过堆栈反汇编,和调试,查找出来,虽然很多时候被踩的地方不固定,这就糟糕了。就要想方法发现共同规律,比如是否在同一个全局变量里面,或者都是同一...原创 2018-03-01 22:48:03 · 6258 阅读 · 0 评论 -
使用hungtask 检测异常进程/内核死锁/超时阻塞问题
1、内核hung task检测机制由来我们知道进程等待IO时,经常处于D状态,即TASK_UNINTERRUPTIBLE状态,处于这种状态的进程不处理信号,所以kill不掉,如果进程长期处于D状态,那么肯定不正常,原因可能有二:1)IO路径上的硬件出问题了,比如硬盘坏了(只有少数情况会导致长期D,通常会返回错误);2)内核自己出问题了。这种问题不好定位,而且一旦出现就通常不可恢复,kill不掉,通...转载 2018-03-01 23:02:25 · 3464 阅读 · 1 评论 -
踩内存问题定位总结
现象:挂死,程序跑的异常,数据被串改大致原因:数组越界,字符串操作越界,栈指针操作越界,操作了释放掉了的指针,多线程时序对资源保护控制不当,内存管理异常,使用了其他地方的内存定位方法:1. 类似内存泄漏的问题,先定界,后定位,通过内存proc信息(meminfo/media-mem)判断是具体的模块,内存段2. 减法缩小范围,裁剪模块,修改应用程序,找到最小场景原创 2017-09-20 00:10:09 · 12738 阅读 · 0 评论 -
内存泄漏问题总结
长时间跑机,一般会引起:程序运行卡顿(性能本是足够满足业务的),卡死,莫名重启,挂死,堆栈是挂死在malloc里面,MMZ/SMMU分配失败,或者kernel panic,这些时候就开始怀疑是不是内存泄漏了。内存泄漏可能的原因:内存分配释放泄漏,资源泄漏,文件资源泄漏,线程泄漏,内存碎片过多。定位的方法:1. 分析问题出现的想象,看看是内核态还是用户态导致的内存泄漏,可原创 2017-09-19 23:58:36 · 762 阅读 · 0 评论 -
段错误问题定位总结
最近定位了几个段错误的bug,总结一番,对这类问题,需要一定的汇编基础。段错误产生的原因:访问了不应该访问的内存,主要原因是数组溢出、栈溢出,修改到代码段,或者修改了只读数据段,访问空指针,也就是不存在的地址等。定位方法:1.dmesg,挂死的时候,可以查看发生段错误的程序名称、引起段错误发生的内存地址、指令指针地址、堆栈指针地址、错误代码、错误原因等。有了段错误的地址和指令指针地址,原创 2017-09-19 23:56:07 · 1319 阅读 · 0 评论 -
驱动调试技术
1.printk大法。加上__FUNC__,__LINE__,简直神奇.2.objdump反编译,编译的时候加上-g,把代码信息编译进ko,利用堆栈反编译找出挂死的行号3.trace调试,大量零散的打印,打印到串口会占用CPU资源,程序执行效率降低,无法有效的复现bug的环境,申请一片内存,记下打印到内存里面,这样不会太占用CPU,复现bug后,再从内存里面读出来.4.文件log法,集原创 2017-07-13 23:37:18 · 309 阅读 · 0 评论 -
linux挂死oops定位问题
注意分析pc is at系统挂死的行号,结合反汇编定位。以及关键寄存器的值,还有dump_stack()打印出来的调用堆栈关系。什么是Oops?从语言学的角度说,Oops应该是一个拟声词。当出了点小事故,或者做了比较尴尬的事之后,你可以说"Oops",翻译成中国话就叫做“哎呦”。“哎呦,对不起,对不起,我真不是故意打碎您的杯子的”。看,Oops就是这个意思。在Linux内核开发转载 2017-08-22 00:01:03 · 3750 阅读 · 0 评论 -
Lockdep定位linux驱动死锁的bug
死锁一般比较难定位。lockdep 死锁检测模块介绍了最简单的 ABBA 死锁的形成,回到正题,回到 kernel, 里面有千千万万锁,错综复杂,也不可能要求所有开发人员熟悉 spin_lock, spin_lock_irq, spin_lock_irqsave, spin_lock_nested 的区别。所以,在锁死发生前,还是要做好预防胜于治疗,防患于未然的工作,尽量提前发现并转载 2017-08-22 00:09:10 · 3983 阅读 · 0 评论 -
Linux使用dmesg查看内存的日志信息
dmesg 命令的使用范例‘dmesg’命令设备故障的诊断是非常重要的。在‘dmesg’命令的帮助下进行硬件的连接或断开连接操作时,我们可以看到硬件的检测或者断开连接的信息。‘dmesg’命令在多数基于Linux和Unix的操作系统中都可以使用。下面我们展示一些最负盛名的‘dmesg’命令工具以及其实际使用举例。‘dmesg’命令的使用语法如下。# dmesg [options...]转载 2017-08-22 23:43:13 · 19664 阅读 · 0 评论 -
使用memwatch跟踪linux内存泄漏
参考:http://blog.csdn.net/kehyuanyu/article/details/25217907http://blog.sina.com.cn/s/blog_590be5290102w5ve.html一、简介memwatch可以跟踪程序中的内存泄漏和错误,能检测双重释放(double-free)、错误释放(erroneousfree)、没有释放的内存(unfre转载 2017-08-22 23:45:36 · 747 阅读 · 0 评论 -
使用valgrind跟踪linux内存泄漏
介绍的很详细的一篇文章:http://www.oschina.net/translate/valgrind-memcheckValgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖。Valgrind遵转载 2017-08-22 23:51:17 · 931 阅读 · 1 评论 -
LSPCI命令打印出PCI总线上连接的所有设备
这个没怎么用过,没怎么解除硬件模块,留着以后用。lspci:查看PCI信息-v 以冗余模式显示所有设备的详细信息-vv 比 -v 还要更详细的信息-n 以数字形式显示 PCI 生产厂商和设备号,而不是在 PCI ID 数据库中查找它们-x 以十六进制显示 PCI 配置空间 (configuration space) 的前64个字节映象 (标准头部信息)-xxx以十转载 2017-08-23 00:02:59 · 1596 阅读 · 0 评论 -
Kprobe添加linux内核钩子定位bug
http://blog.csdn.net/panfengyun12345/article/details/19480567;http://alanwu.blog.51cto.com/3652632/1109054/转载 2017-08-23 00:07:04 · 1067 阅读 · 0 评论 -
oprofile定位CPU占用率过高的异常问题
大部分问题同top命令就可以看的出,是哪个线程出了问题,但是在涉及开源库,或者源码巨大的情况下,可以使用linux下的利器,oprofile工具来定位。转载:http://www.cnblogs.com/bangerlee/archive/2012/08/30/2659435.html引言cpu无端占用高?应用程序响应慢?苦于没有分析的工具?oprofile利用cpu硬转载 2017-09-19 21:05:53 · 470 阅读 · 0 评论 -
解码器的bug笔记2
1. 解决了大量codedex静态工具,和内核攻击测试攻击,导致出来的挂死、内存泄漏的问题。2.H265码流proc异常的问题.导致阻塞卡住.通过释放掉,非参考帧,如果是参考帧要是超过协议规定的最大参考帧数目也丢掉3.一个多通道创建销毁的问题, 踩别人内存的问题,一个全局变量,地址赋给函数里面的局部变量,然后要释放内存,就解锁然后再加锁,这个时候外部调用了通道创建销毁的一次流程,导致全局变量的地址...原创 2018-03-04 11:58:52 · 464 阅读 · 0 评论