Linux系统编程 Part3(makefile、gdb调试、ctags)

gdb调试工具

前提:编译时添加 -g选项,得到调试表 gcc gdbtest.c -o a.out -g

如果忘记加 -g选项编译就进入gdb调试,报错如下:

解决方法

  • 退出gdb调试工具,重新加上 -g选项再编译
  • 不退出gdb调试工具,输入命令file a.out即可

常用指令:

  • 打开gdb调试工具:gdb ./a.out
  • 列出源码以及行号:list或者l(按list 1即可从代码第一行开始显示,按l翻页)
  • 设置断点:b或者break,比如 b 45
  • 运行程序:run或者r
  • 下一条指令(越过函数):n或者next
  • 下一条指令(进入函数):s或者step
  • 查看变量的值:p或者printp i代表查看变量i的值)
  • 结束当前函数调用:finish
  • 继续执行断点后续指令:continue(即执行到下一个断点,如果后续没有断点,则执行到程序结束)
  • 退出gdb当前调试:quit

其他指令:

  • 针对段错误:打开gdb后,直接使用run命令,程序停止的位置就是段错误出现的位置
  • 设置main函数命令行参数:①set args 参数1 参数2(在 startrun 之前)或者②run 参数1 参数2
  • 查看断点信息表:info b
  • 设置条件断点:b 20 if i = 5
  • 查看变量类型:ptype
  • 查看当前程序正存活的栈帧:bt
  • 根据栈帧编号切换栈帧:frame 2
  • 设置跟踪变量:display
  • 根据跟踪变量的编号,取消设置跟踪变量:undisplay 2

注:栈帧是随着函数调用而在stack上开辟的一片内存空间,用于存放函数调用时产生的局部变量和临时值


Makefile项目管理

前提:如果想使用默认make命令,命名时只能是makefile或者Makefile

1个规则(格式)

目标:依赖条件
(一个tab缩进)命令

  • 目标的时间必须晚于依赖条件的时间,否则make时自动更新目标(也就是说,如果“原料”修改了,脚本运行是会智能执行这个“原料”的修改)
  • 依赖条件如果不存在,找寻新的规则去产生依赖条件(如下图所示)

ALL:hello.out(指定makefile的终极目标,如果不指定,默认第一行是终极目标)

2个函数

  • wildcard函数: src = $(wildcard ./*.c) 匹配当前工作目录下的所有.c 文件,将文件名组成列表,赋值给变量 src,则src = hello.c add.c sub.c div1.c
  • patsubst函数:obj = $(patsubst %.c, %.o, $(src)) 将参数3中,包含参数1的部分,替换为参数2,则obj = hello.o add.o sub.o div1.o,那么在makefile文件中hello.out:hello.o add.o sub.o div1.o就可以改写为hello.out:$(obj)

clean:

在命令行执行时,最好加上-n,即make clean -n,目的是先模拟删除,不真正执行,防止误删文件

“-”的作用:删除不存在文件时,不报错,顺序执行结束

其实看clean的语法,也算是一个规则,只不过没有依赖条件,只有目标和命令

3个自动变量

  • $@: 在规则的命令中,表示规则中的目标
  • $^: 在规则的命令中,表示所有依赖条件
  • $<: 在规则的命令中,表示第一个依赖条件(如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则)

模式规则:

静态模式规则:前缀表示对哪一个依赖条件去套用模式规则

伪目标:当你的工作目录下,有名为clean或者ALL这样的同名文件时,会影响make的判断

伪目标的作用是忽略这些干扰,都要被执行

自定义参数:让gcc编译的时候自动加上Wallg等选项,$(myArgs)中的$作用是取变量

make命令选项:

  • -n:模拟执行makemake clean命令
  • -f:指定文件执行make命令,make -f m6

ps:使用make命令时要注意文件名,比如对mymv.c进行make,正确命令应该是:make mymv,不要加上 .c


ctags读代码工具

生成

首先生成一个tags文件,组织目录内所有.c间函数调用关系

方法:在项目目录下输入命令 ctags -R .

命令

  • ctrl + ]:光标置于调用函数上,跳转至函数定义位置
  • ctrl + t:返回到此前跳转位置
  • ctrl + o:在左侧列出文件列表,再按一次关闭
  • F4:在右侧列出函数列表,再按一次关闭


不准投币喔 👆

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇