gdb调试工具

gcc -g main.c -o main

常用命令

命令            简写         作用

help                h            按模块列出命令类

help class                    查找某一类型的具体命令

list                l             查看代码,可跟行号和函数名

list -             l              网上查看代码

quit             q            退出gdb

run                 r            全速运行程序

start                            单步执行,运行程序,停在第一行执行语句

next                n            逐过程执行

step                s            逐语句执行,遇到函数,调到函数内执行

backtrace        b            查看函数的调用栈帧和层级关系

info                I             查看函数内部局部变量的数值

frame            f            切换函数的栈帧

finish                        结束当前函数,返回函数调用点

set                            设置变量的值

run    arvg[1]    argv[2]            调试时命令行传递参数

print            p            打印变量和地址

break            b            设置断点,可根据行号和函数名

delete            d            删除断点 d breakpoints NUM

display                        设置观察变量

undisplay                    取消观察变量

continue                        继续全速运行剩下的代码

enable breakpoints            启用断点

disable breakpoints            禁用断点

x                            查看内存x /20xw显示20个单元,16进制,4个字节每单元

watch                         被设置观测点的变量发送修改时,打印显示

i watch                         显示观测点

core文件                    ulimit -c 1024 开启core文件,调试时gdb a.out core

set var                        设置调试中变量的值 例如 n=10 set var n=100

gdb调试模式

gdb调试模式

run全速运行

start 单步调试

set follow-fork-mode child/parent #Makefile项目管理 跟踪子进程和父进程

Makfile项目管理

项目代码编译管理

节省编译项目时间

一次编写终身受益

操作示例文件:add.c sub.c mul.c dive.c main.c

基本原则

三要素

目标

条件

命令

Makefile工作原理

分析各个目标和依赖之间的关系

根据依赖关系自底向上执行命令

根据修改时间比目标新,确定更新

如果目标不依赖任何条件,则执行对应命令,以示更新

clean

用途:清除编译生产的中间.o文件和最终目标文件

make clean 如果当前目录下有同名clean文件,则不执行clean对应的命令

伪目标声明:.PHONY:clean

clean命令中的特殊符号

  • "-"此条命令出错,make也会继续执行后续的命令。如:"-rm main.o"
  • "@"不显示命令本身,只显示结果。如:"@echo"clean done ""

其他

-make默认执行第一个出现的目标,可通过make dst指定要执行的目标

-distclean目标

-install目标

-make -C指定目录 进入指定目录,调用里面的Makefile

简单使用MakeFile

python@ubuntu:~/linuxC/calc$ cat Makefile

#目标:依赖(条件)

#    命令

#阶段一

#app:add.c sub.c dive.c mul.c main.c

#    gcc add.c sub.c dive.c mul.c main.c -o app

#

#阶段二

#app:add.o sub.o dive.o mul.o main.o

#    gcc add.o sub.o dive.o mul.o main.o -o app

#add.o:add.c

#    gcc -c add.c

#sub.o:sub.c

#    gcc -c sub.c

#dive.o:dive.c

#    gcc -c dive.c

#mul.o:mul.c

#    gcc -c mul.c

#main.o:main.c

#    gcc -c main.c

#阶段三

# $@表示目标,$^表示所有依赖,$<表示依赖中的第一个

#obj=add.o sub.o mul.o dive.o main.o

#src = $(wildcard *.c)

#obj = $(patsubst %.c,%.o,$(src))

#target = app

#$(target):$(obj)

#    gcc $^ -o $@

#%.o:%.c

#    gcc -c $< -o $@

#阶段四

CPPFLAGS= -Iinclude

CFLAGS= -g -Wall

LDFLAGS=

CC=gcc

#CC=arm-linux-gcc

src = $(wildcard *.c)

obj = $(patsubst %.c,%.o,$(src))

target = app

$(target):$(obj)

$(CC) $^ $(LDFLAGS) -o $@

%.o:%.c

$(CC) -c $< $(CFLAGS) $(CPPFLAGS) -o $@

.PHONY:clean

#彻底清除生生过程文件

clean:

-rm -f *.o

-rm -f app

#彻底清除生生过程文件和生成配置文件

distclean:

rm /usr/bin/app

install:

cp app /usr/bin

test:

@echo $(src)

@echo $(obj)

Gdb调试工具/ Makfile项目管理的更多相关文章

  1. gdb调试工具使用方法分享

    刚才看了一个CSDN上分享gdb调试工具使用的教程,讲得非常好,推荐到这里: http://blog.csdn.net/liigo/article/details/582231

  2. 使用 Strace 和 GDB 调试工具的乐趣

    编写 UNIX® 系统程序充满乐趣,并且具有教育意义.使用 UNIX strace 工具和 GDB(GNU 项目调试工具),您可以真正地深入研究系统的功能,并了解组成这些功能的各种各样的程序.同时使用 ...

  3. Linux环境下的GCC编译器与GDB调试工具介绍

    假如现在我们有如下代码需要编译运行和调试.文件名为:test.c #include <stdio.h> int main() { int day, month, year, sum, le ...

  4. GDB调试工具总结

    程序调试的基本思想是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环过程,根据现象如何假设错误原因,以及如何设计新的现象去验证假设,需要非常严密的分析和思考.程序中除了一 ...

  5. 【Linux】GDB调试工具

    GDB调试工具 Linux中包含一个很强大的调试工具GDB(GNU Debuger),可以用它来调试C和C++程序. 一. GDB的主要功能有: 设置断点,当程序运行到断点处暂停 显示变量的值,可以打 ...

  6. GDB调试工具、动态加载、内存管理(day04)

    一.程序中的错误处理 在系统中定义了一个全局变量errno.在这个全局变量中存放着系统调用或者库函数出错的信息(错误编号).然后根据错误编号获取错误信息. 举例说明: 打开一个文件,如果这个文件不存在 ...

  7. linux下的gdb调试工具--断点调试

    到目前为止我们的调试手段只有一种: 根据程序执行时的出错现象假设错误原因,然后在代码中适当的位置插入printf,执行程序并分析打印结果,如果结果和预期的一样,就基本上证明了自己假设的错误原因,就可以 ...

  8. GDB调试工具入门

    从windows转到linux下已经有一段时间了,每次刷算法题碰到问题需要调试的时候,就分分钟想关机,切换到windows上调试.于是,花了一点时间来搜索一下linux下常见的调试工具,这不搜不知道, ...

  9. gdb调试工具常用命令

    编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main gdb中命令: 回车键:重复上一命令 (gdb)help:查看命令帮助,具体命令查询在gdb中输入help ...

随机推荐

  1. 传统网络栈与InfiniBand栈对比图

    熟悉传统网络协议栈但对InfiniBand协议栈好奇的朋友可以通过下图有一个宏观上的印象. IB实现了"高带宽,低延时"的网络互联,最大的魅力就是支持RDMA,而RDMA就其本质, ...

  2. k8s中secret解析

    概览 Secret是用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥.这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险. ...

  3. IDEA的学习总结

    IntelliJ IDEA是一款非常优秀的JAVA编辑器,初学都可会对其中的一些做法感到很别扭,刚开始用的时候我也感到很不习惯,在参考了网上一些文章后在这里把我的一些经验写出来,希望初学者能快速适应它 ...

  4. oracle用plsql登陆出错,提示ORA-12170:TNS:链接超时 --------关闭防火墙试试

    oracle用plsql登陆出错,提示ORA-12170:TNS:链接超时 但是使用sqlplus可以连接 ping 本机127.0.0.1 显示一般故障 后关闭防火墙,问题解决. ps:登录时使用@ ...

  5. 百度开源e-chart初探

    前言: 近年来,在数据服务的公司中,数据可视化越来越重要.随着而来的,国内外正在如火如荼的开发各种在线js视图展示框架.而百度的e-chart算是实用性较高且体验最好的!今天闲来无事,便来玩玩~ ec ...

  6. Implicit super constructor xx() is undefined for default constructor. Must define an explicit constructor

      错误:Implicit super constructor xx() is undefined for default constructor. Must define an explicit c ...

  7. WINFORM如何实现无聚焦框的Button按钮

    当我们将一个button按钮设置如下属性时,总有一个聚焦框来困扰着我们 button1.FlatStyle = FlatStyle.Flat; 我们想要的效果是这样的: 但当使用了Tab切换焦点时 发 ...

  8. 文件流FileStram类

    本节课主要学习三个内容: 创建FileStram流 读取流 写入流 文件流FileStram类,是用来实现对文件的读取和写入.FileStram是操作字节的字节数组,当提供向文件读取和写入字节的方法时 ...

  9. 一、window下zookeeper独立部署

    zookeeper是一个分布式协调应用,用于管理大型主机.通俗地说,分布式应用相对于单体应用存在着很多要处理的问题,而这些问题通常是不太好处理的.比如,典型的一致性问题,而zookeeper可以很简单 ...

  10. Hibernate与mybatis比较

    Hibernate与mybatis比较 1.先说底层: a)Jdbc:全称java数据库连接,是java语言用来规范客户端如何访问数据库的程序接口. b) 一般步骤: i.加载驱动程序 ii.获得数据 ...