
调试gdb
文章平均质量分 92
yuyin86
这个作者很懒,什么都没留下…
展开
-
linux下C++开发常用工具
linux下C++开发常用工具1. c/c++编译器 gcc/g++详情请参考网站:http://gcc.gnu.org/2. UML建模工具 Boumllinux下比较好用的建模工具,相当于windows下的rational rose,具成了程序UML模型设计,代码编辑,代码生成功能等功能.详情请参考网站:http://bouml.free.fr/3. mak转载 2012-08-03 13:48:13 · 790 阅读 · 0 评论 -
内存越界和泄露调试工具(转载自赛迪网)
作者:sixth用C/C++开发其中最令人头疼的一个问题就是内存管理,有时候为了查找一个内存泄漏或者一个内存访问越界,需要要花上好几天时间,如果有一款工具能够帮助我们做这件事情就好了,valgrind正好就是这样的一款工具。Valgrind是一款基于模拟linux下的程序调试器和剖析器的软件套件,可以运行于x86, amd64和ppc32架构上。valgrind包含一个核心,它提供转载 2012-08-03 13:44:40 · 2040 阅读 · 0 评论 -
linux 开发调试常用工具总结
linux 开发调试常用工具总结1. grep 常用方法与参数 · grep "关键字" 文件名 · grep "关键字" 文件名1 文件名2 ..... //在指定的多个文件中查找关键字 · grep "关键字" * //表示在当前目录下的所有文件中查找 · grep "关键字" * -R //表示在当前目录下查找,如果有转载 2012-08-03 13:22:56 · 920 阅读 · 0 评论 -
linux 内存调试工具MEMWATCH
本文转载于http://www.maycode.com/index.php/hotspot/27-clanguage/863-linux-memwatch.html 第 1 种情况:内存调试工具 C 语言作为 Linux 系统上标准的编程语言给予了我们对动态内存分配很大的控制权。然而,这种自由可能会导致严重的内存管理问题,而这些问题可能导致程序崩溃或随时间的推移导致性能降级。内存泄转载 2012-08-03 13:42:29 · 735 阅读 · 0 评论 -
GDB+GDBServer方式进行ARM程序调试
GDB+GDBServer方式进行ARM程序调试【摘要】:本文首先介绍了gdb+gdbserver相关的概念,然后介绍了其下载、编译、安装等过程;接着介绍了利用gdb+gdbserver调试应用程序的流程及实例等;最后分析了下gdb+gdbserver安装过程中的常见问题。【关键词】:gdb,gdbserver,远程调试目录一、gdb+gdbserver总体介绍...1转载 2012-08-06 13:57:25 · 930 阅读 · 0 评论 -
简述configure、pkg-config、pkg_config_path三者的关系
一、什么是configure 源码安装过程中大多会用到configure这个程序,一般的configure都是一个script,执行时可以传入必要参数告知配置项目。 configure程序它会根据传入的配置项目检查程序编译时所依赖的环境以及对程序编译安装进行配置,最终生成编译所需的Makefile文件供程序Make读入使用进而调用相关编译程式(通常调用编译程序都是gcc)来编译最终的二转载 2012-08-08 14:13:18 · 1036 阅读 · 0 评论 -
ndk-gdb对java/native code联合调试
网上有不少文章,谈论 ndk-gdb对java/native code联合调试 ,本人参考了不少,虽然这些文章没能解决问题,但是给了不少的帮助,在此,分享本人搭建 java +native code(c c++)环境的整个过程。 1. gdb 调试器 与 gdbserver 的关系,就是 gdb 与 stub的关系,如下图所示转载 2012-07-27 20:23:27 · 1110 阅读 · 0 评论 -
使用JLINK GDBSERVER调试U-BOOT的方法
1,在WINXP上连接开发板的串口,并连接JLINK。启动开发板,然后运行JLINK GDBSERVER。GDBSERVER显示正在监听2331端口。2,在UBUNTU上编译U-BOOT,并下载和编译ARM-LINUX-GDB程序,为ARM-LINUX-GDB配置环境变量。3,在用户根目录下,(我的目录是/ROOT目录),建立.gdbinit文件,然后在文件中输入TARGET REMOTE转载 2012-07-27 20:24:21 · 1855 阅读 · 0 评论 -
GDB+GdbServer: ARM程序调试
内容摘要 远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用 GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。 就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机程序转载 2012-07-27 20:22:47 · 1082 阅读 · 0 评论 -
Linux C内存泄露检测工具
内存泄漏检查方法(for Linux)如果你更想读原始文档, 请参考glibc info的"Allocation Debugging"一章 (执行info libc);glibc提供了一个检查内存泄漏的方法, 前提是你的程序使用glibc的标准函数分配内存(如malloc, alloc...):1. 在需要内存泄漏检查的代码的开始调用void mtrace(void) (在mcheck转载 2012-08-19 11:39:39 · 1269 阅读 · 0 评论 -
简单总结一下debug
1. 与测试用例相关 a. 如果不能达到“测试先行”,至少应该在写完代码后有相对完整的测试用例。对于正确性的保证和以后重构代码都是有好处的。 b. 每次添加新功能或修复了一个bug时,都应该增加测试用例!A历经千辛万苦终于fix 了一个bug,很久很久以后,B觉得这段代码需要改改,于是改了改,后来的结果还是改了,而且顺利提交到了库里(因为A当时遇到的bug转载 2012-08-19 12:50:30 · 768 阅读 · 0 评论 -
《程序员的思维修炼》读书笔记(思维的重生)
此读书笔记并不完全作为阐述想法,所以在阐述一些问题的时候可能没有前因后果,更是一种总结性的话语和书上言语的精华,这有点悖论,如果你想了解,请去看《程序员的思维修炼》,这本书可以跨学科,即便你不懂程序,都值得一看,是从思维和大脑层面来开展介绍的。 第2章 从新手到专家的历程 新手到专家需要经历5个阶段(德雷福斯技能获取模型) 真正的专家不怕考转载 2012-08-19 12:58:39 · 7917 阅读 · 1 评论 -
Linux环境下段错误的产生原因及调试方法小结
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。1. 段错误是什么一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空转载 2012-08-21 10:38:05 · 1311 阅读 · 0 评论 -
把函数复制到堆上并运行的方法
有需求见此贴,所谓的动态执行 http://bbs.chinaunix.net/thread-1235365-1-1.html 实现如下: [table=95%][tr][td][font=FixedSys]void add(int a, int b) { printf("a+b=%d\n", a+b); } char *get_call_ad转载 2012-08-21 11:11:50 · 780 阅读 · 0 评论 -
gcc编译程序段错误
---------------------------(一)-------------------------------------编译时遇见了段错误,很多时候新手都会发现段错误,其实都是内存分配错误引起的:即用定义指针直接赋值的,那么char *p="aaa",其实和const char *p ="aaa";是一样的,都在常量区,处于静态存储区,是只读的,不可修改的,"转载 2012-08-21 10:34:08 · 1283 阅读 · 0 评论 -
用gdb检查段错误(segment fault)
所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度转载 2012-08-21 10:36:31 · 1626 阅读 · 0 评论 -
结构体最后的长度为0或1数组的作用
其实很早在看LINUX下就看到这个东西,后来在MFC内存池里同样也看到了类似的东西,还依照MFC写过一个类似的小内存池,(MFC用的是return this + 1)后来在李先静的《系统程序员成长计划》里看到了类似的定义,于是心里想着总结一下,结果发现网上已经有牛人总结的很好了,于是乎就转了过来,谢谢你们的分享,这是我前进的动力!同时,需要引起注意的:ISO/IEC 9899-1999里面转载 2012-08-21 14:03:44 · 1083 阅读 · 0 评论 -
结构体指针变量使用时的注意事项
自己在用结构体指针的时候遇到的引用问题,网上找的一段文字觉得挺不错的,可能对大家有帮助。在使用结构体指针变量的时候,往往容易犯一个“低级”错误。即定义一个结构体指针变量后就直接对结构体指针变量所指向的结构体成员进行操作,从而产生一些莫名其妙的错误。我们必须要给结构体指针变量赋予一个有效的结构体变量地址,才能正常操作结构体指针变量。比如:struct UART{转载 2012-08-21 14:09:53 · 996 阅读 · 0 评论 -
常见的C语言内存错误及对策
一、指针没有指向一块合法的内存定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。浅显的例子就不举了,这里举几个比较隐蔽的例子。1、结构体成员指针未初始化struct student{ char *name; int score;}stu,*pstu;intmain(){ strcpy(stu.name,"Jimy");转载 2012-08-22 02:39:55 · 1231 阅读 · 0 评论 -
结构体中动态内存的管理(malloc和free)
C语言中内存的管理主要是依据malloc和free实现的,其中malloc主要是实现内存的分配,而free则是实现内存的释放。虽然这是我们已经很熟悉的,但是还是存在一些问题。特别是当结构体中存在指针的情况下,各种问题也就会展现出来。其中最大的问题是:结构体中指针变量没有指向一块合法的内存空间,就对指针参数进行操作,这也是很多C语言程序员经常犯的错误。简单的实例如下:转载 2012-08-22 10:23:17 · 2177 阅读 · 0 评论 -
共用体union的妙用
结构体struct是一个常用的数据类型,主要是将各种类型的数据打包成一个新的数据类型,在驱动开发,寄存器的定义等方面都有比较大的优势。在使用的过程中需要注意空结构体的大小以及对齐(8字节)对数据大小的影响。具体的应用就不说了。另一个与struct非常相近的数据类型union则相对运用的较少,但是如果理解了union的本质就会发现该数据类型的好处。union主要是将各种类型的数据存放在一段固转载 2012-08-22 10:28:16 · 810 阅读 · 0 评论 -
Linux下打开core文件,定位segfault
出现段错误,不容易定位到底是哪行代码出现了问题,segfault多次折磨的笔者死去活来,查资料发现了定位段错误的方法。 Linux下有核心转储文件即core文件,会把程序崩溃是的现场保存起来供gdb来调试。打开的办法是 ulimit -c unlimited 。 设置之前可以调用ulimit -c 查看当前的大小,如果是0,表示不生成core转载 2012-09-02 09:41:32 · 1581 阅读 · 0 评论 -
gcc 错误解析
Ambiguous operators need parentheses 不明确的运算需要用括号括起 Ambiguous symbol 'xxx' 不明确的符号 Argument list syntax error 参数表语法错误 Array bounds missing 丢失数组界限符 Array size toolarge 数组尺寸太大 Bad char转载 2012-08-23 08:46:18 · 839 阅读 · 0 评论 -
Linux内核调试方法
Linux内核调试方法kdb:只能在汇编代码级进行调试; 优点是不需要两台机器进行调试。 gdb:在调试模块时缺少一些至关重要的功能,它可用来查看内核的运行情况,包括反汇编内核函数。 kgdb:能很方便的在源码级对内核进行调试,缺点是kgdb只能进行远程调试,它需要一根串口线及两台机器来调试内核(也可以是在同一台主机上用vmware软件运行两个操作转载 2012-09-04 10:15:02 · 1222 阅读 · 0 评论 -
Linux内核驱动模块的调试技术总结
这些天来弄了一个简单的驱动模块,后发现系统只要一卸载模块系统就会死掉。到底是那里出了错?如果你只是通过printk来调试, 而没有其他的方法去检测错误的。也是这个原因促使我写驱动模块调试技术相关技术。要学好一个编程语言工具首先调试技术也一定同步。(如果linux 也能做出一个类似windows 下的 Windbg 或 Soft-ICE 那就不必那么麻烦了)这篇文章不是一气呵成的,只转载 2012-09-04 13:14:09 · 1074 阅读 · 0 评论 -
GCC 库顺序问题解决方法
使用gcc生成可执行文件时,大部分时候我们需要连接我们自己打包(AR)好的一些库文件,对于中大型(50万代码行以上)项目上,你将面对数个项目组,最好的情况是每个项目组发布自己的打包.ar文件,这些.ar文件之间没有任何依赖关系, 然后由持续集成(ci)小组对这些包进行连接,不幸的是,这几乎是不可能的, 我们在连接时还是遇到了liba.ar和libb.ar相互依赖的情况。因为gcc的库是转载 2012-09-07 19:31:14 · 652 阅读 · 0 评论 -
linux c常用命令
1、gccgcc -c :只编译,汇编 不链接 gcc -fno-builtin :gcc会把一些c库函数替换成编译器的内置函数,以达到优化的功能。 gcc -static:ld默认使用动态链接,此选项使用静态链接 gcc -e main:程序的入口函数为main,当然可以指定为其他的 gcc -shared :动态链接转载 2012-09-07 19:33:18 · 988 阅读 · 0 评论 -
GCC编译器选项及优化提示
《Glibc Binutils GCC 配置选项简介》《GCC编译优化指南》-------------------------------------------------------------------------------版权声明本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布。任何人都可以自由使用、转载、复制和再分发,但必须保留作者署名转载 2012-09-07 19:45:02 · 959 阅读 · 0 评论 -
gcc的使用
如果目录下有一个hello.c 文件执行如下命令进行编译:gcc -o hello hello.c这时在当前目录下就可以看到hello文件,执行如下命令执行程序:./hello如果要使用static编译,执行如下命令:gcc -static -o hello hello.c 如果出现如下错误: error: 'for' loop in转载 2012-09-07 21:09:50 · 843 阅读 · 0 评论 -
关于elf动态库的几篇文章
Ian Lance Taylor正在写连载文章介绍linkers:http://www.cs.virginia.edu/~wh5a/blog/i386%20Linux%E4%B8%8B%20ELF%20%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%88%86%E6%9E%90%20%EF%BC%88%E4%B8%80%EF%BC%89.htmlIn转载 2012-09-08 00:39:59 · 618 阅读 · 0 评论 -
创建可执行的共享库
偶然发现glibc提供的libc.so是“可执行的”,这是快速查看glibc版本的一种方法,1234567~$ /lib/i386-linux-gnu/libc.so.6GNU C Library (Ubuntu EGLIBC 2.13-20ubuntu5.1) stable release version 2.13, by Roland McG转载 2012-09-09 16:07:12 · 657 阅读 · 0 评论 -
GCC编译的背后( 预处理和编译 汇编和链接 )
平时在Linux下写代码,直接用"gcc -o out in.c"就把代码编译好了,但是这后面到底做了什么事情呢?如果学习过编译原理则不难理解,一般高级语言程序编译的过程莫过于:预处理、编译、汇编、链 接。gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld。转载 2012-09-08 00:21:57 · 1327 阅读 · 0 评论 -
转:关于GCC中同时使用动态和静态库链接的操作参数和解释
来自:http://blog.sina.com.cn/s/blog_4cb133e5010009zx.html 在我们开发的一个系统中,由于动态链接其中的一个动态库时,编译时没有问题,而运行时不能进行,如果将该库静态连接时,运行却没有问题。具体什么原因,一直没有搞清楚,权且当作暂时的解决办法。 如何同时同时使用动态和静态库链接,同事周楠提供了一个参数的用法,在G转载 2012-09-08 09:57:06 · 785 阅读 · 0 评论 -
linux gcc 使用静态库链接程序
先关注两个gcc编译选项:-c 编译且汇编,但是不链接-S 只编译,不汇编也不链接-c选项产出的就是经常看到的.o文件,也是一般用来创建静态库的文件。 用如下的命令可以将多个.o文件打包为一个静态库文件:ar crs libtest.a src/test1.o src/test2.o 现在完成了静态库创建工作,我们怎么在链接一个可执行程序的时转载 2012-09-07 19:36:32 · 1417 阅读 · 0 评论 -
C++编码优化之减少冗余拷贝或赋值
近做了一些模块的性能优化工作,虽然基本都是一些编码上的优化和少量的设计优化,但是优化方式还是比较多且杂的,因此想写个编码优化的系列,把之前曾经遇到过的一些情况记录下来。当然,在说到某个具体的优化手段时也有可能补充一些书本上介绍的优化方法。 =========背景介绍结束,正文开始=========之所以说减少拷贝或赋值,而不是减少临时变量,因为有几个情况,并不是临时转载 2012-09-07 20:14:52 · 934 阅读 · 0 评论 -
编译 链接和加载
出处:http://duanple.blog.163.com/blog/static/7097176720111141085197/1. 序最近在折腾各种.so,碰到了一些问题,一开始对于很多错误也没有头绪,茫然不知所措。索性化了一天多时间将>中部分内容略读了一遍,主要是关于编译,链接和加载这块的。于是顺便做个笔记,方便以后回顾。基本上知道了这些,对于编译,链接和加载过程中产生转载 2012-09-08 00:27:52 · 949 阅读 · 0 评论 -
gcc的ar,nm,objdump,objcopy
首先简要阐述关于gcc、glibc和 binutils模块之间的关系一、关于gcc、glibc和binutils模块之间的关系1、gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如 libgcc_s.so、libstdc++.so等。2、binutils提供转载 2012-09-08 09:23:06 · 3543 阅读 · 0 评论 -
Linux静态链接(库)、动态链接(库)、可执行文件加载相关问题
参考:http://www.cnblogs.com/hanyan225/archive/2010/10/01/1839906.htmlhttp://www.west263.com/info/html/wangzhanyunying/jianzhanjingyan/20080417/70218.htmlhttp://www.cnblogs.com/lidp/archi转载 2012-09-08 00:48:54 · 1714 阅读 · 0 评论 -
linux共享库文件
linux 应用程序因为 Linux 版本的众多与各自独立性,在工程制作与使用中必须熟练掌握如下两点才能有效地工作和理想地运行。Linux 下标准库链接的三种方式(全静态 , 半静态 (libgcc,libstdc++), 全动态)及其各自利弊。Linux 下如何巧妙构建 achrive(*.a),并且如何设置链接选项来解决 gcc 比较特别的链接库的顺序问题。转载 2012-09-07 22:43:56 · 872 阅读 · 0 评论 -
Linux下链接动态库静态库的理解
Linux程序GCC编译基本过程一个程式从原始码到可执行文件(或共享库文件),一般都要经过预处理、编译、汇编和链接这四个步骤。编译过程扫描头文件的搜索路径顺序gcc 在编译时如何去寻找所需要的头文件 :※所以header file的搜寻会从-I开始※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCL转载 2012-09-10 21:43:46 · 855 阅读 · 0 评论