Debugging Technique
文章平均质量分 58
ctthuangcheng
这个作者很懒,什么都没留下…
展开
-
C/C++内存问题检查利器—Purify (二)
三、 示例假设我们现在有这样一段程序:hello.c#include #include static char *helloWorld = "Hello, World"; main(){ char *mystr = malloc(strlen(helloWorld)); strncpy(mystr转载 2013-04-10 16:15:08 · 1484 阅读 · 0 评论 -
ldd 的一个安全问题
源文:http://coolshell.cn/?p=1626 (酷壳) 我们知道“ldd”这个命令主要是被程序员或是管理员用来查看可执行文件所依赖的动态链接库的。是的,这就是这个命令的用处。可是,这个命令比你想像的要危险得多,也许很多黑客通过ldd的安全问题来攻击你的服务器。其实,ldd的安全问题存在很长的时间了,但居然没有被官方文档所记录来下,这听上去更加难以理解了。怎么?是不是转载 2013-04-10 16:38:04 · 1522 阅读 · 0 评论 -
Purify检测的代码错误类型
一、 红色叹号提示 1、 ABR: Array Bounds Read 数组越界读(只检测动态内存分配的数组,对Global、Local、Static的数组无法检测)。 2、 ABW: Array Bounds Write 数组越界写(只检测动态内存分配的数组,对Global、Local、Static的数组无法检 3、 ABWL: Late Detect A转载 2013-04-10 17:09:16 · 1761 阅读 · 0 评论 -
工具使用_Purify使用的图形化工具Xmanager
Purify使用的图形化工具Xmanager 一、安装及配置取软件,按照流程安装。二、使用-建立新sessionStep1:开始建立新session向导 Step2:Step3:Host的IP为第一章安装部分,purify安装的机器的IPStep4:同step3,是安装在10.71.96.181上的purify的用户名和密码。Step原创 2013-04-12 10:45:23 · 1781 阅读 · 0 评论 -
Purify命令大全
1 ABR: array bounds read数组越界读1.1 介绍An ABR message indicates that your program is about to read a value from before or after a block or static data item.An ABR message can be caus原创 2013-04-12 09:59:36 · 2285 阅读 · 0 评论 -
linux core文件设置
1.ulimit -c 查看当前系统配置的core文件大小ulimit -c unlimited 修改core文件大小为无限制2./proc/sys/kernel/core_uses_pid 改成1, 设置成可以控制产生core文件的文件名。修改文件的方法,必须使用 echo "1" > /proc/sys/kernel/core_uses_pid的方式放入3./proc/sys/kernel/c原创 2013-01-08 13:12:18 · 2168 阅读 · 1 评论 -
linux core文件设置
在Linux中,一般当进程非正常退出时,会生成一个core文件,这个文件是进程猝死时内存的转储文件,也称为core dump。查看Linux脚本解析方式: echo $0 1.检验core是否打开以see/see登录 csh: limit; coredumpsize = 0 , 说明没有打开core, 否则打开了。bash: ulimit –a ; 关注红色部分。 如果是0,表示原创 2013-05-23 09:51:36 · 10363 阅读 · 0 评论 -
GCC编译之如何控制共享文件导出符号
背景前不久在调试一个与导出符号相关的bug,问题大概如此:模块A.so在堆上构造了一个对象即 CTest *one = new CTest; , CTest在A.so定义,后来使用one->AMemFunc();,即调用一个成员函数时崩溃。原来在另一个模块B.so(比A.so先加载)中,也有一个同名的CTest定义,但是却没有一个叫AMemFunc的成员函数,因此崩溃。那为什么A.so转载 2013-05-14 11:07:16 · 2061 阅读 · 0 评论 -
在C/C++程序里打印调用栈信息
我们知道,GDB的backtrace命令可以查看堆栈信息。但很多时候,GDB根本用不上。比如说,在线上环境中可能没有GDB,即使有,也不太可能让我们直接在上面调试。如果能让程序自己输出调用栈,那是最好不过了。本文介绍和调用椎栈相关的几个函数。 NAME backtrace, backtrace_symbols, backtrace_symbols_fd -转载 2013-05-14 16:56:18 · 8211 阅读 · 0 评论 -
valgrind检测内存泄漏
Valgrind 使用用法:valgrind [options] prog-and-args [options]: 常用选项,适用于所有Valgrind工具-tool=最常用的选项。运行valgrind中名为toolname的工具。默认memcheck。h -help 显示帮助信息。-version 显示valgrind内核的版本,每个工具都有各自的版本。q -quiet 安静地运行,只打印错误信转载 2015-09-10 11:41:35 · 1154 阅读 · 0 评论 -
用GDB调试程序(七)
改变程序的执行——————— 一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次运行中走遍程序的所有分支。 一、修改变量值 修改被调试程序运行时的变量值,在GDB中很容易实现,使用GDB的print命转载 2013-04-10 16:35:50 · 1391 阅读 · 0 评论 -
用GDB调试程序(六)
七、设置显示选项 GDB中关于显示的选项比较多,这里我只例举大多数常用的选项。 set print address set print address on 打开地址输出,当程序显示函数信息时,GDB会显出函数的参数地址。系统默认为打开的,如: (gdb) f #0 set_quotes转载 2013-04-10 16:34:52 · 1211 阅读 · 0 评论 -
用GDB调试程序(五)
查看运行时数据——————— 在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据。print命令的格式是: print print / 是表达式,是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),是输出的格式,比如,如果要把表达式按1转载 2013-04-10 16:33:38 · 1172 阅读 · 0 评论 -
用GDB调试程序(二)
GDB的命令概貌———————启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示: /home/hchen> gdb GNU gdb 5.1.1 Copyright 2002 Free Software Foundation, Inc. GDB is free softw转载 2013-04-10 16:30:20 · 1252 阅读 · 0 评论 -
C/C++内存问题检查利器—Purify (三)
五、 文件描述符问题在上面的内存问题表中,对于大多数的内存问题来说,相信对于熟悉C/C++的程序员,并不陌生。有一些关于Watchpoint和文件描述符的内容,可能会让你看得比较模糊,对于Watchpoint,我会在后面讲述。这一节,我就一个示例说一说文件描述述问题是如何产生的,并由此介绍一下Purify的一些特性。 先查看下面这段程序:转载 2013-04-10 16:16:23 · 1250 阅读 · 0 评论 -
用GDB调试程序(四)
查看栈信息—————当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。下面是一些查看函数调用栈信息的GDB命令: backtrace bt 打印当前的函数调用栈的所有信息。如:转载 2013-04-10 16:32:48 · 1189 阅读 · 0 评论 -
内存分析利器purify简介
1.内存问题的原因及分类在C/C++程序中,有关内存使用的问题是最难发现和解决的。这些问题可能导致程序莫名其妙地停止、崩溃,或者不断消耗内存直至资源耗尽。由于C/C++语言本身的特质和历史原因,程序员使用内存需要注意的事项较多,而且语言本身也不提供类似Java的垃圾清理机制。编程人员使用一定的工具来查找和调试内存相关问题是十分必要的。总的说来,与内存有关的问题可以分成两类:内存访问错误和内转载 2013-04-10 17:07:52 · 1989 阅读 · 0 评论 -
用GDB调试程序(三)
四、维护停止点上面说了如何设置程序的停止点,GDB中的停止点也就是上述的三类。在GDB中,如果你觉得已定义好的停止点没有用了,你可以使用delete、clear、disable、enable这几个命令来进行维护。 clear 清除所有的已定义的停止点。 clear clear 清除所有设置在函数上的停止点。 cle转载 2013-04-10 16:31:39 · 1173 阅读 · 0 评论 -
C/C++内存问题检查利器—Purify (一)
C/C++内存问题检查利器——Purify 陈皓一、 引言 我们都知道软件的测试(在以产品为主的软件公司中叫做QA—Quality Assessment)占了整个软件工程的30% -50%,但有这么一种说法,即使是最优秀测试专家设计出来的测试案例,也无法彻底地检测到内存上的问题。 使用C/C++开发的团队一定有被其内存问题折磨过的经历,转载 2013-04-10 16:13:27 · 1172 阅读 · 0 评论 -
C/C++内存问题检查利器—Purify (四)
七、 Purify的退出码像UNIX下的软件,一般都会提供和别的应用程序的接口,像上面的生成文本文件,也是给别的应用程序提供接口的一种方式。这里,我们所要讲述的是Purify的退出码,我们知道程序都有退出码,以提供给别的程序或操作系统自己运行的信息。被Purify编译过的程序,你可以通过指定-exit-status参数来告诉Purify是否用Purify的退出码,如转载 2013-04-10 16:17:47 · 1293 阅读 · 0 评论 -
C/C++内存问题检查利器—Purify (五)
十、 设置WatchPoint你可以在你的程序中,对你所想监控的程序设置一些WatchPoint,以方便于你对程序进行调试,或更容易找出问题的原因。就像我前面说,Purify可以找到你的内存泄露,但其不能找到内存泄露的原因,你可以通过设置WatchPoint来跟踪一块内存,以找到在程序执行过程中该内存的访问情况。 Purify的WatchPoint可以产生下转载 2013-04-10 16:19:08 · 1287 阅读 · 0 评论 -
用GDB调试程序(一)
用GDB调试程序GDB概述————GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的转载 2013-04-10 16:24:22 · 1125 阅读 · 0 评论 -
malloc_stats---检查内存泄露的神器
在之前的博客中提到过,valgrind可以用来检测内存泄露,但在使用中,往往会遇到一些问题,给调试工作带来很多不必要的麻烦,我自己遇到的有以下两种: (1)内存泄露误检(系统初始化时,可能有一些需要长期保存在内存中的数据结构,这些空间是永远不释放的,而这些内存会被认为绝对泄露) (2) valgrind检查内存泄露过于全面,运行后的结果太多往往很难从中找到有用的信息。有时候,我转载 2015-09-10 12:44:17 · 1774 阅读 · 0 评论