Gdb调试工具/ Makfile项目管理
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项目管理的更多相关文章
- gdb调试工具使用方法分享
刚才看了一个CSDN上分享gdb调试工具使用的教程,讲得非常好,推荐到这里: http://blog.csdn.net/liigo/article/details/582231
- 使用 Strace 和 GDB 调试工具的乐趣
编写 UNIX® 系统程序充满乐趣,并且具有教育意义.使用 UNIX strace 工具和 GDB(GNU 项目调试工具),您可以真正地深入研究系统的功能,并了解组成这些功能的各种各样的程序.同时使用 ...
- Linux环境下的GCC编译器与GDB调试工具介绍
假如现在我们有如下代码需要编译运行和调试.文件名为:test.c #include <stdio.h> int main() { int day, month, year, sum, le ...
- GDB调试工具总结
程序调试的基本思想是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环过程,根据现象如何假设错误原因,以及如何设计新的现象去验证假设,需要非常严密的分析和思考.程序中除了一 ...
- 【Linux】GDB调试工具
GDB调试工具 Linux中包含一个很强大的调试工具GDB(GNU Debuger),可以用它来调试C和C++程序. 一. GDB的主要功能有: 设置断点,当程序运行到断点处暂停 显示变量的值,可以打 ...
- GDB调试工具、动态加载、内存管理(day04)
一.程序中的错误处理 在系统中定义了一个全局变量errno.在这个全局变量中存放着系统调用或者库函数出错的信息(错误编号).然后根据错误编号获取错误信息. 举例说明: 打开一个文件,如果这个文件不存在 ...
- linux下的gdb调试工具--断点调试
到目前为止我们的调试手段只有一种: 根据程序执行时的出错现象假设错误原因,然后在代码中适当的位置插入printf,执行程序并分析打印结果,如果结果和预期的一样,就基本上证明了自己假设的错误原因,就可以 ...
- GDB调试工具入门
从windows转到linux下已经有一段时间了,每次刷算法题碰到问题需要调试的时候,就分分钟想关机,切换到windows上调试.于是,花了一点时间来搜索一下linux下常见的调试工具,这不搜不知道, ...
- gdb调试工具常用命令
编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main gdb中命令: 回车键:重复上一命令 (gdb)help:查看命令帮助,具体命令查询在gdb中输入help ...
随机推荐
- JSTL之<c:set>的各种用法
<c:set>标签用于设置变量值和对象属性 语法格式 <span style="font-size:18px;"><c:set var="& ...
- 从mdb到crash
本文面向使用过Solaris的mdb但是没有使用过Linux的crash的同学.比如说我自己,mdb用了很多年,现在全面转向Linux平台,于是很好奇Linux有没有类似的工具.熟悉Solaris的同 ...
- ASP.NET Core 中的依赖注入
目录 什么是依赖注入 ASP .NET Core 中使用依赖注入 注册 使用 释放 替换为其它的 Ioc 容器 参考 什么是依赖注入 软件设计原则中有一个依赖倒置原则(DIP),为了更好的解耦,讲究要 ...
- redis的数据类型(二)string类型
下面讲解value,value包括String.List.Set.Sorted Set.Hash 一.String类型 1.string类型 String是最基本的类型,而且Stirng类型是二 ...
- 学生信息管理系统(C语言版本)
这是我个人写的一个学生管理系统,这是我仅仅用来练手的代码,要知道链表可是你在面试过程中最大机率会考到的,我是陆续从单向链表入门,然后采用双向链表写的代码!如有BUG,请指正,让我们共同进步! 1 #i ...
- Django 模板语言从后端传到前端
如果我们在后端有数据动态提取到前端的时候 就需要模板语言加以渲染后再将渲染好的HTML文件传入前端 我们的views.py里的index函数里有个s变量是个列表,将数据以大括号的形式传入{" ...
- Golang之并发资源竞争(互斥锁)
并发本身并不复杂,但是因为有了资源竞争的问题,就使得我们开发出好的并发程序变得复杂起来,因为会引起很多莫名其妙的问题. package main import ( "fmt" &q ...
- Xss和Csrf介绍
Xss和Csrf介绍 Xss Xss(跨站脚本攻击),全称Cross Site Scripting,恶意攻击者向web页面中植入恶意js代码,当用户浏览到该页时,植入的代码被执行,达到恶意攻击用户的目 ...
- 解决-word里无论怎么改变字体颜色,字体总是红色的
1.你遇到的问题是Word当前处于审阅状态,修改的内容显示为红色字体.2.解决办法是退出Word审阅状态,或者接受全部修订.3.不同Word版本的审阅模式不同,可在菜单栏里退出审阅,或者按鼠标右键弹出 ...
- ZOJ 1049 判断坐标点
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=49 水题 #include<iostream> #include&l ...