
linux 异常情况调试与性能优化
lbaihao
zephyr,data structure, algorithm, protocol,darknet,architecture
展开
-
Linux环境下段错误的产生原因及调试方法小结
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定转载 2016-08-28 21:45:05 · 722 阅读 · 0 评论 -
Unix下C程序内存泄漏检测工具Valgrind安装与使用
algrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖。Valgrind遵守GNU通用公共许可证条款,是一款自由软件。 官网http://www.valgrind.org转载 2016-12-23 17:23:27 · 752 阅读 · 0 评论 -
内核性能调试–ftrace
调试难度本来就是写代码的两倍.因此,如果你写代码的时候聪明用尽,根据定义,你就没有能耐去调试它了.” – Brian Kernighan某手机公司的研发总监谈到内核调试时问我怎么android手机上解决有时整机响应慢甚至无响应的情况。 我说可以首先使能内核的调试选项检查是否存在内核死锁,再通过内核的kprobe/ftrace检查中断和系统调用情况,blabla… 没想到该总说“我们公司原创 2016-12-22 23:36:14 · 1102 阅读 · 0 评论 -
Linux 下 strace 命令用法总结
Linux 下 strace 命令用法总结1 功能说明strace 命令是一种强大的工具, 能够显示任何由用户空间程式发出的系统调用. strace 显示这些调用的参数并返回符号形式的值. strace 从内核接收信息, 而且无需以任何特别的方式来构建内核. strace 的每一行输出包括系统调用名称, 然后是参数和返回值.下面记录几个常用option:-f -F选项告诉strac转载 2016-12-07 18:27:08 · 386 阅读 · 0 评论 -
strace用法说明
strace命令详解strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。 下面记录几个常用 option . 1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程 2 -o xxx.txt 输出到某个文转载 2016-12-07 18:23:42 · 328 阅读 · 0 评论 -
x86 linux内核栈溢出一则
这是前一段时间遇到的一个问题,先看这段代码:struct result{ unsigned int a; unsigned int b; unsigned int c;};int func(){ struct result temp[512]; memset(temp,0,sizeof(struct res转载 2016-11-30 23:17:22 · 1139 阅读 · 0 评论 -
内核堆栈溢出
Linux内核的堆栈一般是8K,所以在写内核程序的时候一定要小心,防止函数递归的出现,递归可能导致内核堆栈溢出。1. 查看Linux内核线程堆栈,源代码里一般定义为 #define THREAD_SIZE (2*PAGE_SIZE)2. 如果怀疑有堆栈溢出的情况,可以在代码里面加入如下的代码来检查当前内核堆栈。uint32 mystack_used (void) {转载 2016-11-30 23:15:12 · 2758 阅读 · 0 评论 -
Linux内核Crash分析
在工作中经常会遇到一些内核crash的情况,本文就是根据内核出现crash后的打印信息,对其进行了分析,使用的内核版本为:Linux2.6.32。每一个进程的生命周期内,其生命周期的范围为几毫秒到几个月。一般都是和内核有交互,例如用户空间程序使用系统调用进入内核空间。这时使用的不再是用户空间的栈空间,使用对应的内核栈空间。对每一个进程来说,Linux内核都会把两个不同的数据结构紧凑的存放在转载 2016-11-29 22:38:17 · 714 阅读 · 0 评论 -
Linux之问题诊断工具strace
引言“Oops,系统挂死了..."“Oops,程序崩溃了..."“Oops,命令执行报错..." 对于维护人员来说,这样的悲剧每天都在上演。理想情况下,系统或应用程序的错误日志提供了足够全面的信息,通过查看相关日志,维护人员就能很快地定位出问题发生的原因。但现实情况,许多错误日志打印模凌两可,更多地描述了出错时的现象(比如"could not open fi转载 2016-08-23 13:50:50 · 742 阅读 · 0 评论 -
linux 内核出现CPU 死机
linux 异常分析工具(一)linux 内核OOPS(二)linux 内核出现CPU stall原创 2016-08-10 23:04:28 · 5983 阅读 · 1 评论 -
linux 内核OOPS(二)
linux 异常分析工具(一)linux 内核OOPS(二)原创 2016-08-10 23:03:34 · 697 阅读 · 0 评论 -
ptrace运行原理及使用详解
你想过怎么实现对系统调用的拦截吗?你尝试过通过改变系统调用的参数来愚弄你的系统kernel吗?你想过调试器是如何使运行中的进程暂停并且控制它吗?你可能会开始考虑怎么使用复杂的kernel编程来达到目的,那么,你错了。实际上Linux提供了一种优雅的机制来完成这些:ptrace系统函数。 ptrace提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而转载 2016-08-22 13:35:30 · 687 阅读 · 0 评论 -
ARM linux 异常分析(一)-- __initt编译属性错误
linux 异常分析工具(一)原创 2016-08-10 23:02:08 · 5477 阅读 · 1 评论 -
gdb 调试core
简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它 指向的 gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gd转载 2016-08-28 22:39:34 · 619 阅读 · 0 评论 -
valgrind 的使用简介
一 valgrind是什么?Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind的体系结构转载 2016-12-23 17:33:20 · 448 阅读 · 0 评论