GCC_GDB_makefile
文章平均质量分 50
ctthuangcheng
这个作者很懒,什么都没留下…
展开
-
gdb
GDB 是GNU发布的一款功能强大的调试程序工具。 1. GDB主要完成下面3个功能:a. 启动被调试的程序b. 让被调试的程序在指定位置停住c. 当程序被停住时,可以检查程序状态。 2. 使用gdb流程:a. 编译生成可执行文件: gcc -g test.c -o test b. 启动GDB: gdb test c. 在main函数处设转载 2013-01-28 17:00:11 · 1260 阅读 · 0 评论 -
OBJ文件格式分析工具: objdump, nm,ar
首先简要阐述关于gcc、glibc和 binutils模块之间的关系一、关于gcc、glibc和binutils模块之间的关系1、gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如 libgcc_s.so、libstdc++.so等。2、binutils提供了一系列用来创建、管理和维护二进转载 2014-06-18 15:26:23 · 3970 阅读 · 0 评论 -
linux下core文件调试方法
在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制 (1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 (2)使用ulimit -c filesize命令,可以限制core文转载 2014-06-06 14:36:36 · 1515 阅读 · 0 评论 -
定位多线程内存越界问题实践总结
最近定位了在一个多线程服务器程序(OceanBase MergeServer)中,一个线程非法篡改另一个线程的内存而导致程序core掉的问题。定位这个问题花了整整一周的时间,期间历经曲折,尝试了各种内存调试的办法。往往感觉就要柳暗花明了,却发现又进入了另一个死胡同。最后,使用强大的mprotect+backtrace+libsigsegv等工具成功定位了问题。整个定位过程遇到的问题和解决办法对于多转载 2014-03-14 16:57:09 · 2843 阅读 · 0 评论 -
Linux下利用backtrace追踪函数调用堆栈以及定位段错误
一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。 在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。int backtrace(void **buffer,int size) 该函数用于获取当前线程的调用堆栈,获取的信息将转载 2014-01-14 19:08:39 · 4732 阅读 · 0 评论 -
Makefile自动生成
automake/autoconf入门作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。在本文中,将给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样转载 2013-12-05 15:52:22 · 2307 阅读 · 0 评论 -
make、make clean、make install、make uninstall、make dist、make distcheck和make distclean
Makefile在符合GNU Makefiel惯例的Makefile中,包含了一些基本的预先定义的操作:make根据Makefile编译源代码,连接,生成目标文件,可执行文件。make clean清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件。make install将编译成功的可执行文件安装到系统目录中,一般为/usr/local/bin目录。make uni原创 2013-12-05 11:40:54 · 5657 阅读 · 1 评论 -
没有文件扩展“.js”的脚本引擎问题解决
安装MinGW的时候提示没有文件扩展“.js”的脚本引擎。 原因:系统安装Dreamwear、UltraEdit、EditPlus后修改了.js文件的默认打开方式。当想直接执行js脚本时就会出现此错误。 解决办法:打开注册表编辑器,定位[HKEY_CLASSES_ROOT.js]这一项,双击默认值将其改为“JSFile”即可。如图所示: 在运行中输入“regedit”进入注册表原创 2013-11-25 21:15:37 · 8269 阅读 · 0 评论 -
一个 Linux 上分析死锁的简单方法
简介 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一转载 2013-08-12 11:20:06 · 2072 阅读 · 0 评论 -
Linux下GCC生成和使用静态库和动态库详解(二)
2.1准备好测试代码hello.h、hello.c和main.c;hello.h(见程序1)为该函数库的头文件。 hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出"Hello XXX!"。 main.c(见程序3)为测试库文件的主程序,在主程序中调用了公用函数hello。 程序1: hello.h转载 2013-01-28 20:04:05 · 1696 阅读 · 0 评论 -
Linux下GCC生成和使用静态库和动态库详解(一)
一、基本概念1.1什么是库在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。 1.2库的种类linux下的库有两种:静转载 2013-01-28 20:03:12 · 2877 阅读 · 1 评论 -
make linux内核
make linux内核的命令:可以先执行:cp arch/arm/configs/xxxx_defconfig .config //make menuconfig 会检测.config来配置选项。make ARCH=arm CROSS_COMPILE=arm-linux-在编译内核时,我们需要知道几个命令的意思,以及其使用的一些联系。(面向2.6的)1转载 2013-01-28 17:05:27 · 1335 阅读 · 0 评论 -
gcc
1. gcc: 全名 GNU C Compilergcc编译器 能将C, C++, 汇编程序编译,链接成可执行文件。在linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。2. gcc编译程序时,编译过程可以被细分为4个阶段:a.预处理(pre-processing)b.编译(Compling)c.汇编(Assembling)d.链转载 2013-01-28 16:56:25 · 1071 阅读 · 0 评论 -
GCC动态库和静态库混合使用
今天,一个同事编译静态库,我也趁此机会在温习一下,先google一下,然后在自己实验。 首先,在网上抄个例子,内容如下1:建静态库/* hellos.h */#ifndef _HELLO_S_H#define _HELLO_S_Hvoid printS(char* str);#endif/* hellos.c */#inclu转载 2013-01-28 19:40:57 · 3008 阅读 · 0 评论 -
gcc g++ Linux下动态库_静态库
关于Unix静态库和动态库的分析基本概念库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。 例如:libhello.so libhello.a为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhello.so.1.0,由于程序连接默认以.so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。ln -s libh转载 2013-01-28 19:10:17 · 2060 阅读 · 0 评论 -
makefile
1. makefile 文件描述了整个工程的编译,链接等规则。 规则:用于说明如何生成一个或多个目标文件,规则格式如下:targets: prerequisites command目标 : 依赖 命令 (命令需要以[TAB]键开始)例:main.o: main.c gcc -c main.c 2. 目标:Makefile转载 2013-01-28 17:02:47 · 1140 阅读 · 0 评论 -
使用GDB调试STL容器
GDB中print方法并不能直接打印STL容器中保存的变量,想知道STL容器保存的变量,使用如下办法:1. 创建文件~/.gdbinit:# # STL GDB evaluators/vi原创 2015-06-19 22:31:38 · 1432 阅读 · 0 评论