
linux 程序调试
文章平均质量分 94
yuyin86
这个作者很懒,什么都没留下…
展开
-
Linux下调试器工作原理
Linux下调试器工作原理之一—基础篇介绍关于Linux下的调试器实现的主要组成部分——ptrace系统调用。本文中出现的代码都在32位的Ubuntu系统上开发。请注意,这里出现的代码是同平台紧密相关的,但移植到别的平台上应该不会太难。动机要想理解我们究竟要做什么,试着想象一下调试器是如何工作的。调试器可以启动某些进程,然后对其进行调试,或者将自己本身关联到一个已存在的转载 2014-01-27 14:19:37 · 1979 阅读 · 0 评论 -
使用 ftrace 调试 Linux 内核,第 2 部分
使用 ftrace 调试 Linux 内核,第 2 部分ftrace 使用ftrace 是 Linux 内核中提供的一种调试工具。使用 ftrace 可以对内核中发生的事情进行跟踪,这在调试 bug 或者分析内核时非常有用。本系列文章对 ftrace 进行了介绍,分为三部分。本文是第二部分,通过示例介绍了如何使用 ftrace 中的跟踪器,并对不同格式的跟踪信息进行转载 2013-12-19 01:02:46 · 984 阅读 · 0 评论 -
调试器工作原理——基础篇
英文原文:Eli Bendersky 编译:伯乐在线— 陈舸本文是一系列探究调试器工作原理的文章的第一篇。我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起。关于本文我打算在这篇文章中介绍关于Linux下的调试器实现的主要组成部分——ptrace系统调用。本文中出现的代码都在32位的Ubuntu系统上开发。请注意,这里出现的代码是同平台紧转载 2013-12-29 01:17:48 · 707 阅读 · 0 评论 -
Linux 自检和 SystemTap
用于动态内核分析的接口和语言现代的操作系统内核提供自检 功能,即动态地检查内核以理解其行为的能力。这些行为可以反映内核问题和性能瓶颈。拥有这些信息时候,您就可以调优或修改内核以避免出现故障。本文探索一个名为 SystemTap 的开放源码基础设施,它为 Linux® 内核提供这种动态的自检。1 评论:M. Tim Jones, 自由作家200转载 2013-12-14 00:25:05 · 887 阅读 · 0 评论 -
Linux内核的Oops与Linux Kernel Panic报错解决思路
Linux内核还有没有给我们留下其他的有用信息。Oops: 0002 [#1]这里面,0002表示Oops的错误代码(写错误,发生在内核空间),#1表示这个错误发生一次。Oops的错误代码根据错误的原因会有不同的定义,本文中的例子可以参考下面的定义(如果发现自己遇到的Oops和下面无法对应的话,最好去内核代码里查找): * error_code: *转载 2013-10-27 10:30:35 · 8386 阅读 · 1 评论 -
模块间通信 --linux
模块参数:module_param(),其中类型可以为byte,short,ushort,int,uint,long,ulong,bool,charp(没有浮点型)例子:static long a = 1;static int b = 1;module_param(a,long,S_IRUGO);module_param(b,int,S_IRUGO);在终端中可用#in转载 2013-09-05 23:59:33 · 2166 阅读 · 1 评论 -
编译 链接和加载
作者:phylips@bmy 2011-11-06 出处:http://duanple.blog.163.com/blog/static/7097176720111141085197/1. 序最近在折腾各种.so,碰到了一些问题,一开始对于很多错误也没有头绪,茫然不知所措。索性化了一天多时间将>中部分内容略读了一遍,主要是关于编译,链接和加载这块的。于是顺便做个笔记,方转载 2013-08-24 15:48:47 · 1067 阅读 · 0 评论 -
Linux 动态库剖析
Linux 动态库剖析进程与 APIM. Tim Jones, 顾问工程师, Emulex Corp.简介: 动态链接的共享库是 GNU/Linux® 的一个重要方面。该种库允许可执行文件在运行时动态访问外部函数,从而(通过在需要时才会引入函数的方式)减少它们对内存的总体占用。本文研究了创建和使用静态库的过程,详细描述了开发它们的各种工具,并揭秘了这些库转载 2013-08-24 15:47:45 · 905 阅读 · 0 评论 -
技巧:多共享动态库中同名对象重复析构问题的解决方法
技巧:多共享动态库中同名对象重复析构问题的解决方法共享库与静态成员吴 光远, 软件工程师, IBM孟 先涛, 软件工程师, IBM简介: Linux 平台下的共享动态库,一般都是通过选项“-fPIC”编译出来。有些应用程序需要链接多个共享库,此时如果在这些共享库中存在相同作用域范围的同名静态成员变量,那么当程序访问完静态成员变量结束析构时,由于内存的 d转载 2013-08-24 16:19:26 · 1361 阅读 · 0 评论 -
多进程引用的动态链接库中的全局变量问题
多进程引用的动态链接库中的全局变量问题现有liba.so中定义一个全局变量char buf;libb.so 中的函数print会将buf进行输出。进程A和进程B使用-lb进行编译链接,并在进程A和B中分别对buf进行初始化,如strcpy(buf, "A"); strcpy(buf, "B");进程A和进程B在初始化后分别通过dlopen的方式加载liba.so并调转载 2013-08-23 19:36:45 · 13150 阅读 · 1 评论 -
lmbench的使用方法 与CPU上下文切换的次数和时间(context switch)
一、引言要评价一个系统的性能,通常有不同的指标,相应的会有不同的测试方法和测试工具,一般来说为了确保测试结果的公平和权威性,会选用比较成熟的商业测试软件。但在特定情形下,只是想要简单比较不同系统或比较一些函数库性能时,也能够从开源世界里选用一些优秀的工具来完成这个任务,本文就通过lmbench 简要介绍系统综合性能测试。二、测试软件Lmbench是一套简易,可移植的,符合ANSI/转载 2013-12-19 01:02:38 · 10801 阅读 · 1 评论 -
Linux Trace Toolkit
1 概念1.1 功能LTT是一个用于跟踪系统详细运行状态和流程的工具,它可以跟踪记录系统中的特定事件。这些事件包括: 系统调用的进入和退出 陷阱/中断(Trap / Irq)的进入和退出 进程调度事件 内核定时器 进程管理相关事件:创建 ,唤醒,信号处理等等 文件系统相关事件:Open / Read / Write / Seek / Ioct转载 2014-01-04 01:47:27 · 959 阅读 · 0 评论 -
ubuntu Linux Trace Toolkit
LTTng Stable PPA“Ubuntu LTTng” team LTTng Stable PPAPPA descriptionLTTng (Linux Trace Toolkit Next Generation) project repository.For more information: http://l转载 2014-01-04 22:08:17 · 1003 阅读 · 0 评论 -
用gprof分析程序性能
综述gprof用于分析函数调用耗时,可用之抓出最耗时的函数,以便优化程序。gcc链接时也一定要加-pg参数,以使程序运行结束后生成gmon.out文件,供gprof分析。gprof默认不支持多线程程序,默认不支持共享库程序。gcc -pg 编译程序运行程序,程序退出时生成 gmon.outgprof ./prog gmon.out -b 查看输出注意事项程序如果不是转载 2014-01-25 14:25:10 · 1293 阅读 · 0 评论 -
Debugging Portal for linux
http://elinux.org/Debugging_PortalDebugging PortalThis page is the new portal for all debugging related stuff. It currently deals with Kernel topics, but feel free to add user spac转载 2014-01-12 22:37:52 · 896 阅读 · 0 评论 -
PrintkTimes for linux
ContentsIntroductionRationaleDownloadsPatchUtility programHow To Use (2.6 version of kernel)runtime control of printk timesTrouble-shootingCustomizing the printk times clockHow T转载 2014-01-12 22:32:34 · 886 阅读 · 0 评论 -
在Linux运行期间升级Linux系统(Uboot+kernel+Rootfs)
在Linux运行期间升级Linux系统(Uboot+kernel+Rootfs)版本:v1.2Crifan Li摘要本文主要介绍了如何在嵌入式Linux系统运行的时候,进行升级整个Linux系统,包括uboot,kernel和rootfs。以及简介Linux中的已有的通用的Nor Flash驱动m25p80,和简介mtd util转载 2014-01-13 13:44:44 · 1084 阅读 · 0 评论 -
linux 内核线程创建
转载http://lupaworld.blogbus.com/logs/37201575.html1. 头文件#include //wake_up_process()#include //kthread_create()、kthread_run()#include //IS_ERR()、PTR_ERR()转载 2013-12-27 00:45:02 · 2935 阅读 · 0 评论 -
内核态和用户态通讯知识收集
内核态和用户态通讯知识收集在一台运行 Linux 的计算机中,CPU 在任何时候只会有如下四种状态:【1】 在处理一个硬中断。【2】 在处理一个软中断,如 softirq、tasklet 和 bh。【3】 运行于内核态,但有进程上下文,即与一个进程相关。【4】 运行一个用户态进程。 1. Linux中的进程间通信机转载 2013-12-24 22:50:31 · 923 阅读 · 0 评论 -
relayfs介绍
relayfs介绍Relay 是一种从 Linux 内核到用户空间的高效数据传输技术。通过用户定义的 relay 信道,内核空间的程序能够高效、可靠、便捷地将数据传输到用户空间。通过灵活运用改造也可双向传输。Relay 特别适用于内核空间有大量数据需要传输到用户空间的情形。Relay 的前身是 RelayFS,即作为 Linux 的一个新型文件系统,即用虚拟文件系统的方式(内核创建,用户空转载 2013-12-23 23:17:33 · 962 阅读 · 0 评论 -
应用调试之配置内核输出应用程序的段错误信息
根据之前的调试我们知道,当应用程序出错的时候,会打印一些信息。但是有时候这些信息时不够的,那么我们能否配置内核使其输出更多的信息呢?答案是肯定的,本节我们就来详细讲一下:还记得我们在运行firstdrvtest的时候曾经输出过如下一些错误信息:Unable to handle kernel paging request at virtual address 56000050pg转载 2013-12-22 23:31:06 · 2318 阅读 · 0 评论 -
linux下内存泄露查找、BUG调试
linux下内存泄露查找、BUG调试先收藏着,抽空好好看看:http://www.ibm.com/developerworks/cn/linux/l-pow-debug/简介调试程序有很多方法,例如向屏幕上打印消息,使用调试器,或者只需仔细考虑程序如何运行,并对问题进行有根有据的猜测。在修复 bug 之前,首先要确定在源程序中的位置。例如,当一个程序产生崩溃或生成核心转储(转载 2013-12-21 00:33:05 · 2135 阅读 · 0 评论 -
linux 测试工具
1.全平台性能测试工具:Geekbench2.Linux性能测试工具:UnixBench和Lmbench3.Linux 内存测试工具memtester4.Linux 桌面自动化测试工具:LDTP 5.linux网络性能测试工具:Iperf和Netperf6.linux io性能测试工具:dd/orion/iozone/bonnie++7.linux硬盘IO性能测试:转载 2013-12-20 23:45:01 · 945 阅读 · 0 评论 -
sparse与__be32
sparse是一个C/C++源文件静态分析工具,官方文档:linux-2.6.38.8/Documentation/sparse.txtMan手册:http://linux.die.net/man/1/sparse主页:https://sparse.wiki.kernel.org/index.php/Main_Page__be32,其定义扩展开为:1转载 2013-08-24 09:28:50 · 1092 阅读 · 0 评论 -
关于LD_DEBUG
引用LD_DEBUGThe dynamic library loader used in linux (part of glibc) has some neat tricks. One of these is that you can set an environment variable calledLD_DEBUGto show how symbols (variables转载 2013-08-23 21:15:31 · 745 阅读 · 0 评论 -
Android Tegra平台back camera 驱动实现三 Android中的camera架构及工作原理
本篇文章主要介绍Android中的camera架构及其工作原理。Android中的camera架构 Android的camera系统架构自上而下分别为应用层、框架层、硬件抽象层及linux驱动层。下面将通过对其框架层、硬件抽象层即Linux驱动层做简单的介绍。APP - Framework 应用层与java框架层的间主要由Binder机制转载 2013-03-18 20:09:04 · 1003 阅读 · 0 评论 -
linux 内核启动过程 for arm
这里不提bootloader是怎么加载内核,只谈arm体系结构下linux内核如何启动的。 linux内核编译完成后生成vmlinux ELF格式文件,并经过压缩成bin格式的zImage内核映像。当bootloader经过初始化硬件把zImage影响调入内存中时,内核代码该怎么工作,才能将系统软件带入一个合适的环境。 首先zImage虽然为压缩过的文件,但并不是完全压缩了的,转载 2013-03-17 19:09:18 · 824 阅读 · 0 评论 -
SystemTap Beginner
SystemTap 应用:对管理员,SystemTap可用于监控系统性能,找出系统瓶颈,而对于开发者,可以查看他们的程序运行时在linux系统内核内部的运行情况。主要用于查看内核空间事件信息,对用户空间事件的探测,目前正加紧改进。安装1、SystemTap的安装及使用需要针对正在使用的内核安装相应的kernel-devel、kernel-debuginfo和kernel-deb转载 2013-03-15 20:02:13 · 941 阅读 · 0 评论 -
Linux下c/c++项目代码覆盖率的产生方法
最近做了一系列的单元测试相关的工作,除了各种规范及测试框架以外,讨论比较多的就是关于代码覆盖率的产生,c/c++与其他的一些高级语言或者脚本语言相比较而言,例如 Java、.Net和php/python/perl/shell等,由于没有这些高级语言和脚本语言的反射的特性,其代码覆盖率的产生过程会稍微复杂一些。发现许多同学对C++的覆盖率如何产生在都不太清楚,这里做一个简单的介绍。一转载 2013-03-16 20:58:11 · 1049 阅读 · 0 评论 -
【C/C++】Linux下system()函数引发的错误
今天,一个运行了近一年的程序突然挂掉了,问题定位到是system()函数出的问题,关于该函数的简单使用在我上篇文章做过介绍: http://my.oschina.net/renhc/blog/53580先看一下问题简单封装了一下system()函数:1int pox_system(const char *cmd_line)转载 2013-03-16 21:04:20 · 842 阅读 · 0 评论 -
bootchart--检测linux启动性能的软件
摘自http://www-128.ibm.com/developerworks/library/l-boot-faster/index.html?ca=dgr-lnxw01FC-FastLinuxBoot,Parallelize applications for faster Linux booting ,有兴趣的可以去读原文.也可以直接从http://www.bootchart.org/转载 2013-03-15 19:57:03 · 818 阅读 · 0 评论 -
使用strace+pstack利器分析程序性能
引言有时我们需要对程序进行优化、减少程序响应时间。除了一段段地对代码进行时间复杂度分析,我们还有更便捷的方法吗?若能直接找到影响程序运行时间的函数调用,再有针对地对相关函数进行代码分析和优化,那相比漫无目的地看代码,效率就高多了。将strace和pstack工具结合起来使用,就可以达到以上目的。strace跟踪程序使用的底层系统调用,可输出系统调用被执行的时间点以及各个调用转载 2013-03-15 09:40:21 · 754 阅读 · 0 评论 -
Linux kernel测试初探
前言Linux基金会在4月3日公布了Linux开发年报,向我们展示了linux kernel作为世上最大开源合作项目之一的魅力。自2005年以来,共有800家公司7800名开发人员参与Linux kernel开发,最近一年也有200家公司共1000名开发人员参与。目前在Linus Torvalds的监督之下,Linux核心约2到3个月发布一个新的稳定版本,每次更新大约包含8000到1200转载 2012-12-27 12:45:16 · 680 阅读 · 0 评论 -
oops的解读方法-----怎么通过oops查找源码行
-----------------------------------------------------------------------本文系本站原创,欢迎转载!转载请注明出处:http://blog.youkuaiyun.com/android_huber交流邮箱:dp.shao@gmail.com--------------------------------------------转载 2012-12-02 19:04:12 · 12267 阅读 · 0 评论 -
gcc和ld 中的参数 --whole-archive 和 --no-whole-archive
首先 --whole-archive 和 --no-whole-archive 是ld专有的命令行参数,gcc 并不认识,要通gcc传递到 ld,需要在他们前面加 -Wl,字串。--whole-archive 可以把 在其后面出现的静态库包含的函数和变量输出到动态库,--no-whole-archive 则关掉这个特性。比如你要把 liba.a libb.a libc.a 输出到转载 2013-04-18 00:33:29 · 1144 阅读 · 0 评论 -
linux内核的oops信息
Oops可看成是内核级(特权级)的Segmentation Fault。一般应用程序(用户级)如进行了内存的非法访问(地址不合法、无权限访问、……)或执行了非法指令,则会得到Segfault信号,一般对应的行为是coredump,应用程序也可以自行获取Segfault信号进行处理,而内核出错则是打印出Oops信息。 内核打印Oops信息的执行流程: 1、do_page_fault转载 2013-05-29 22:18:52 · 998 阅读 · 0 评论 -
LINUX内核调试相关--oops信息的定位
一个简单的linux crackme的逆向 前言 最不喜欢的就是写破解教程,酒后一时冲动,老夫卿发少年狂,许下将写一篇linux平台逆向的文章的诺言,作此文实非颇不得已。 在此申明:本文在技术上非常初级,并没有用到什么高深的技术,本人水平亦有限,如有差错,还请见谅! 开始之前的准备 正如C语言教程从 hello world 开始,我转载 2013-05-29 22:28:19 · 2904 阅读 · 0 评论 -
Linux环境下的编译,链接与库的使用
链接参数控制链接器中提供了-dn -dy 参数来控制使用的是动态库还是静态库,-dn表示后面使用的是静态库,-dy表示使用的是动态库例:g++ -Lpath -Wl,-dn -lx -Wl,-dy -lpthread 这样如果在path路径下有libx.so和libx.a这个时候只会用到 libx.a.注意在最后的地方如果没有-Wl,-dy 让后面的库都使用动态库,转载 2013-08-23 21:11:24 · 1598 阅读 · 0 评论 -
使用 libevent 和 libev 提高网络应用性能
使用 libevent 和 libev 提高网络应用性能管理多个 UNIX 网络连接Martin C. Brown, 作家, Freelance简介: 构建现代的服务器应用程序需要以某种方法同时接收数百、数千甚至数万个事件,无论它们是内部请求还是网络连接,都要有效地处理它们的操作。有许多解决方案,但是 libevent 库和 libev 库能够大大提高性转载 2013-08-23 19:46:08 · 787 阅读 · 0 评论 -
Linux共享库(动态库)与进程之间共享全局变量可行性分析
Linux共享库(动态库)与进程之间共享全局变量可行性分析 概念就不多说了,下面主要讨论一下在进程中使用共享库(动态库)声明的全局变量的问题: 网上有一篇介绍在主程序中使用动态链接库里的全局变量的文章,可能会给人一些误导。首先,在主程序中可以使用动态链接库中的全局变量是正确的,不可否认的,但这需要在程序编译链接时就要把动态库加上,并在需要使用的程序中使用extern转载 2013-08-23 19:38:16 · 1621 阅读 · 0 评论