linux调试技巧
文章平均质量分 86
cherish_2012
这个作者很懒,什么都没留下…
展开
-
跟我一起学Makefile
概述 什么是makefile?或许很多Winodws程序员都不知道这个东西,因为那些Windows IDE都为你做了这个工作,但我觉得要做一个好的和professional的程序员,makefile还是要懂的。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写m转载 2014-06-04 10:48:46 · 623 阅读 · 0 评论 -
GCC编译的背后( 预处理和编译 汇编和链接 )
平时在Linux下写代码,直接用"gcc -o out in.c"就把代码编译好了,但是这后面到底做了什么事情呢?如果学习过编译原理则不难理解,一般高级语言程序编译的过程莫过于:预处理、编译、汇编、链 接。gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld。转载 2014-12-19 10:02:35 · 1329 阅读 · 0 评论 -
Linux top命令的用法详细详解
查看多核CPU命令mpstat -P ALL 和 sar -P ALL 说明:sar -P ALL > aaa.txt 重定向输出内容到文件 aaa.txttop命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解。本文通过一个运行中的WEB服务器的t转载 2014-07-03 15:19:54 · 3687 阅读 · 0 评论 -
Linux抓包和分析
实践中,通常在 Linux 里用tcpdump命令抓包,然后在Windows 里用wireshark软件分析包。较通用的tcpdump命令:tcpdump -i eth0 -s 0 -w package.cap注[对eth0进行完整数据包抓取,数据包输入保存到当前目录package.cap中,因为没有-c参数限制,须按Ctrl+C停止抓包]-----------------转载 2014-12-05 09:20:38 · 566 阅读 · 0 评论 -
gdb调试
当学习GDB时,最好有一份代码,动手试验。下列代码是我编写的简单例子,它可以很好的体现GDB的特性。将它拷贝下来并且进行实验——这是最好的方法。#include #include int main(int argc, char **argv){ int i; int a=0, b=0, c=0; double d; for (i=0; i100; i++) {转载 2014-12-21 17:41:14 · 534 阅读 · 0 评论 -
linux strip
strip经常用来去除目标文件中的一些符号表、调试符号表信息,以减小程序的大小,在rpmbuild包的最后就用到。其支持的选项如下:>strip -h用法:strip 输入文件从文件中删除符号和节 选项为: -I --input-target= Assume input file is in format -O --output-target=转载 2014-12-24 16:17:32 · 5254 阅读 · 0 评论 -
Makefile典型模板
一般应用程序的MakefilePRGM = zztestCC = gccCPPFLAGS =LDFLAGS = -lrt -lzCFLAGS = -Wall -ggdb3COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) -cLINKCC = $(CC) $(LDFLAGS)LIBA = libcshm.aSRCS :=转载 2014-12-24 16:18:30 · 606 阅读 · 0 评论 -
g++ 编译动态链接库和静态链接库
现在我有hello1.cpp和hello2.cpp两个文件,现在我要生成动态链接库libhello.so和静态链接库libhello.a。以下为步骤:1.生成动态链接库:g++ -m32 hello1.cpp hello2.cpp -fPIC -shared -o ../lib/linux32/libhello.so-m32为生成32位的动态链接库,-m64位生成64位的动态链接库原创 2014-12-24 09:59:56 · 4825 阅读 · 0 评论 -
make常见错误
make 执行过程中所产生错误并不都是致命的;特别是在命令行之前存在“ - ”、或者 make 使用“ -k ”选项执行时。 make 执行过程的致命错误都带有前缀字符串“ ***”。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是“ make ”);另外一种是当 Makefile 本身存在语法错误无法被 make 解析并执行时,前缀包含了 makefile文件名和出现错误的行号。在转载 2015-02-05 14:16:47 · 590 阅读 · 0 评论 -
Linux下,多线程程序死循环问题调试
当你的软件在某个时刻停止服务,CPU占用达到100%+,这种问题一个可能的原因是产生了死循环,假设程序某处存在潜在的死循环,并在某种条件下会引发,本文以一个示例来定位出现死循环的位置。当程序某处存在死循环,通常定位问题及缩小范围的方法是,在可疑的代码处加log,或者注释掉可疑代码,这对于容易重现问题的程序来说还好,但对于“偶尔”才会产生问题程序却很难调试,因为我们很难重现程序故障。本文所述的调转载 2014-12-03 00:19:51 · 2991 阅读 · 1 评论 -
Linux软连接和硬链接
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的转载 2014-12-02 18:18:55 · 682 阅读 · 0 评论 -
linux下core文件调试方法
在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制 (1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 (2)使用ulimit -c filesize命令,可转载 2014-12-02 20:58:17 · 414 阅读 · 0 评论 -
Linux下多线程程序调试方法
1、最直接的方法就是在源程序插入printf语句来打印出一些有用的变量。这种方法的优点是不用借助其他工具就可以对程序的运行进行观察,缺点是插入语句的位置、粒度等都需要调试者自己去权衡,如果插入过多的打印语句,则频繁的IO操作会使程序运行变慢,线程行为改变,有些bug甚至不会再出现。至于需要在什么地方插入语句,首先,只打印有必要的变量,一个语句可以打印多个变量;其次,在循环中,我们可以通过设置一些条转载 2014-06-08 13:27:01 · 864 阅读 · 0 评论 -
inux下gdb单步调试(上)
用 GDB 调试程序GDB 概述————GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像 VC 、 BCB 等 IDE 的调试,但如果你是在 UNIX 平台下做软件,你会发现 GDB 这个调试工具有比 VC 、 BCB 的图形化调试器更强大的功能。所谓 “ 寸有所长,尺有所短 ” 就是这个道理。一般来说,转载 2014-05-28 11:22:16 · 501 阅读 · 0 评论 -
linux下gdb单步调试(中)
一、设置断点( BreakPoint )我们用 break 命令来设置断点。正面有几点设置断点的方法:break 在进入指定函数时停住。 C++ 中可以使用 class::function 或 function(type,type) 格式来指定函数名。break 在指定行号停住。break +offsetbreak -offset在当前行号的转载 2014-05-28 11:23:14 · 534 阅读 · 0 评论 -
linux下gdb单步调试(下)
四、源代码的内存你可以使用 info line 命令来查看源代码在内存中的地址。 info line 后面可以跟 “ 行号 ” , “ 函数名 ” , “ 文件名 : 行号 ” , “ 文件名 : 函数名 ” ,这个命令会打印出所指定的源码在运行时的内存地址,如:(gdb) info line tst.c:funcLine 5 of "tst.c" starts at addr转载 2014-05-28 14:13:40 · 446 阅读 · 0 评论 -
valgrind 的使用简介
一 valgrind是什么?Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind的体系结构转载 2014-07-04 16:41:16 · 451 阅读 · 0 评论 -
Linux 系统设置 ulimit 以及 Core文件的生成
查看限制情况 ulimit -a可以看到如下信息core file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedfile size (blocks, -f) unlimitedpending signals转载 2014-07-05 16:51:06 · 586 阅读 · 0 评论 -
Linux抓包
linux下抓包:tcpdump -X -s 0 host 192.168.8.54 -w testfile.cap -i eth0说明:在某个主机上进行抓包,与主机192.168.8.54相互通信的数据包,其中-X -s0 标书抓全包;-w testfile.cap表示抓包保存的文件; -i eth0表示抓网卡eth0的包其中-X -s0表示抓全包,-w tes原创 2014-11-27 15:27:13 · 1047 阅读 · 0 评论 -
linux运行中的程序占用内存
1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有 (1). ps aux: 其中 VSZ(或VSS)列 表示,程序占用了多少虚拟内存。 RSS列 表示, 程序占用了多少物理内存。 虚拟内存可以不用考虑,它并不占用实际物理内存。 (2). top 命令也可以原创 2014-12-17 11:42:05 · 9811 阅读 · 0 评论 -
g++的编译及调试
编译重命名等:g++ –c Hello.cc 编译文件,生成目标文件 Hello.og++ Hello.o –o abc 连接 并重命名为可执行文件 abcg++ Hello.cc 编译连接一起,生成a.outg++ Hello.cc –o hello 生成a.out并命名为hello1.总体选项 -E 只转载 2015-11-26 20:24:45 · 1056 阅读 · 0 评论