makefile、gdb使用记录

makefile的模板

all:    rover server station

rover:  rover.c tcputil.o
    gcc rover.c tcputil.o -o rover -lpthread

server: server.c tcputil.o
    gcc server.c tcputil.o -o server -lpthread

station:station.c tcputil.o
    gcc station.c tcputil.o -o station -lpthread

tcputil:tcputil.c
    gcc tcputil.c -c -lpthread

.PHONY: clean

clean:
    rm -f *.o rover server station

- 引号后面的文件代表需要的材料

- .PHONY:指令声明,虚文件

GDB的使用

1、要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如:

> gcc -g hello.c -o hello
    > g++ -g hello.cpp -o hello

2、启动GDB的方法有以下几种:

a、gdb <program> 
       program也就是你的执行文件,一般在当然目录下。

b、gdb <program> core
       用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

c、gdb <program> <PID>
       如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。

3、gdb -help

4、指令表


(gdb) l


l命令相当于list,从第一行开始例出原码

(gdb) 直接回车表示,重复上一次命令
(gdb) break 16 设置断点,在源程序第16行处
(gdb) break func 设置断点,在函数func()入口处
(gdb) info break 查看断点信息
(gdb) r  运行程序,run命令简写
(gdb) n  单条语句执行,next命令简写
(gdb) c  继续运行程序,continue命令简写
(gdb) p i  打印变量i的值,print命令简写
(gdb) bt  查看函数堆栈
(gdb) finish  退出函数
(gdb) q 退出gdb

x  按十六进制格式显示变量。
    d  按十进制格式显示变量。
    u  按十六进制格式显示无符号整型。
    o  按八进制格式显示变量。
    t  按二进制格式显示变量。 
    a  按十六进制格式显示变量。
    c  按字符格式显示变量。
    f  按浮点数格式显示变量。

(gdb) p i
        $21 = 101    
        
        (gdb) p/a i
        $22 = 0x65
        
        (gdb) p/c i
        $23 = 101 ‘e‘

(摘自http://blog.csdn.net/haoel/article/details/2879

DDD:带图形界面的Debugger

ddd在ubuntu下的安装:sudo apt-get install ddd

makefile、gdb使用记录

时间: 2024-08-05 15:11:07

makefile、gdb使用记录的相关文章

9.10 二分查找 gcc makefile gdb调试

 二分查找的迭代和递归实现: #include <stdio.h> #include <stdlib.h> int find1(int *a, int low , int high , int key)//迭代二分查找 { int mid = 0; while (low <= high) { mid = (low+high)/2; if (a[mid] == key) return mid; else if (a[mid] < key) low = mid + 1; e

Makefile &amp;&amp; GDB

昨天学习了C++内存空间一章,看了TCP/IP第一卷第一章,最后看了<Linux网络编程>里的Makefile和gdb部分.现在靠回忆补上一篇博客. 一:C++有三种内存存储模式(C++11有4种,多了“线程存储”) 1.自动变量 a.auto声明变量的方式已被取消,register方式仍然保持 b.自动变量的生存周期就是定义的位置到括号结束的位置 2.静态变量 a.有三种静态变量:链接性为外部,链接性为内部,没有链接性. b.三种对应定义方式为:定义在函数外面:定义在函数外面并加上stati

gdb使用记录

用于记录日常调试用到的方法,而不是简单的命令说明 首先还是先将用过的命令列出命令:缩写:说明run:r:执行程序break:b:设置断点print:p:打印变量内容next:n:执行到下一条语句step:s:进入函数执行(gdb官方说法是Step program until it reaches a different source line.)continue:c:继续执行backtrace:bt:打印调用堆栈frame:f:显示当前堆栈信息finish::完成当前函数的执行(gdb手册的官方

[skill][makefile] makefile 常用内容记录

其实,makefile有点复杂. 文档看了又看,还是要经常翻,做个记录备忘 :) 1.  隐含命令 implicit rules 与 implicit rule 相对应的有 pattern rules 和 suffix rules Compiling C programs n.o is made automatically from n.c with a recipe of the form '$(CC) $(CPPFLAGS) $(CFLAGS) -c'. Compiling C++ prog

makefile gdb ps

GDB 1.调试core ulimit -c ulimited 产生段错误,目录下有core文件, gdb a.out core 2.ps常用命令http://linux.cn/article-4743-1.html pstree,ps -aux,查看线程ps -eLf 调试线程,gdb中info thread thread 9

eclipse 灵活使用makefile来编译C/C++

需求: 最近在看<C++ Primer Plus>, 作者在不断优化自己的类,有许多不同的版本,有很多的测试函数(main函数),我使用的是eclipse+CDT来编写C++,不可能为每个类都创建一个工程.那咋办呢? 我们知道gcc+makefile+gdb,是linux下的神器,使得编写程序相当的灵活,奈何水平不够,还是使用了IDE来配合. 下面就来看看怎么使用elipse+makefile来灵活编译程序. 1. 首先上一张效果图: 2. 文件说明,添加了文件夹header和src,来存储头

Linux内核Makefile笔记

周亦行 2014年11月 参考文档 ① linux源码Makefile的详细分析 ② if_changed_rule/cc_o_c/any-prereq/arg-check ③ Makefile中的伪目标 ④ Linux kernel 3.18.5 一.Makefile组成 (一)基本组成 顶层 Makefile 它是所有Makefile文件的核心,从总体上控制着内核的编译.连接 arch/$(ARCH)/Makefile 对应体系结构的Makefile,它用来决定哪些体系结构相关的文件参与内核

说说Makefile那些事儿

说说Makefile那些事儿 |扬说|透过现象看本质 工作至今,一直对Makefile半知半解.突然某天幡然醒悟,觉得此举极为不妥,只得洗心革面从头学来,以前许多不明觉厉之处顿时茅塞顿开,想想好记性不如烂笔头,便来说说Makefile那些事儿. Makefile到底是个啥玩意儿 Makefile就是一文本文件. ----------------------------------------------- $ file Makefile Makefile: ASCII make commands

当时学习《鸟哥的Linux私房菜-基础学习篇》记录的点

1.当执行一个指令的时候,举例来说[ls],系统会依照PATH的设定去每个PATH定义的目录下搜寻文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先搜寻到的同名指令先被执行! 2.使用echo $PATH可以查看那些目录被定义了.echo 有[显示.印出]的意思,而PATH 前面加上的 $ 表示后面接的是变量. 3.shell script 是利用shell 的功能所写的一个[程序program],这个程序是使用纯文本文件,将一些shell的语法与指令(