杂记(git标签,echo命令,ps命令,gdb调试)

git标签

git可以给一个重要 commit添加标签,一个是为了记录该版本的重要性,如发布的v1.0版本,一个是为了给重要的commit起个别名,让commit更好记,之后更容易找到:Git 标签 | 菜鸟教程 (runoob.com)

先在本地删除了所有文件,然后再git rm所有文件,结果其中包括了一个之前未被跟踪的文件,然后就出错,但是我无视了它,依然commit并且push了,结果远程仓库里的那些文件依然存在(但是奇怪的是 我想将远程的那些文件pull下来,却不能),只有重新git rm,commit, push才行。所以git rm其实是个原子操作吗?一个文件rm出错,那么所有文件都不会被rm。

删除当前文件夹下所有文件的跟踪(即使没有文件夹也要加 -r,不然就会报错):git rm . -r

添加当前文件夹下所有文件的跟踪(这个即使有子文件夹,也不需要夹-r):git add .

echo命令

echo命令是打印命令,它可以在命令行输出简单的字符串,或者打印某一命令执行后的结果(使用反引号: `


可以打印一个shell变量,如查看环境变量PATH:

或者查看自定义变量,使用 read 变量名 来在接下来的一行接收一个变量值,再使用 echo $变量名 输出该变量,:

杂记(git标签,echo命令,ps命令,gdb调试)_第1张图片

其中read命令,一个一个词组地接收输入的参数,每个词组需要使用空格进行分隔;如果输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收。


或者将一些信息打印输出到指定文件中,如下,输入 echo "this is a test file" >test.txt ,在home目录下就会生成test.txt文件,打开发现里面有我们刚刚指定输入的内容:

以及使用 echo "$(将文件的内容打印出来(相当于cat test.txt):

> 重定向输出到某个位置,替换原有文件的所有内容。

>> 重定向追加到某个位置,在原有文件的末尾添加内容。

重定向输入某个位置文件。

2> 重定向错误输出。

2>> 重定向错误追加输出到文件末尾。

&> 混合输出错误的和正确的都输出。


设置原样输出字符串,不进行转义或取变量(用单引号):

其他的,关于-e开启转义字符,设置转义字符的输出:echo命令详解 (一) 真的很详细-朱双印博客 (zsythink.net)

关于使用ANSI码控制输出的文字颜色:echo命令详解 (二) 真的很详细-朱双印博客 (zsythink.net)

使用echo命令,最好使用“”,不然一些转义字符等不能被识别:

             |  能否引用变量  |  能否引用转移符  |  能否引用文本格式符(如:换行符、制表符)

单引号  |           否           |             否             |                             否

双引号  |           能           |             能             |                             能

无引号  |           能           |             能             |                             否                          


ps命令

参考:linux系统中ps指令使用详解 (baidu.com)

其中比较常用的有:

ps -ef|grep 关键词 或者 ps -C 进程名 :抓取与 关键词 或 进程名 有关的进程

ps -u 用户名:显示与某一用户有关的所有进程

gdb调试

1. 在编译的时候在最后加上-g:gcc -a.c a -g 或者在前面加上-g:gcc -g -a.c a

2. 使用 gcc a 进入debug模式(gdb),输入q回车,退出该模式

3. 常用的命令:

r: 开始调试,遇到断点就中断;

c:继续执行

b n:在第n行设置断点;b 函数名:在函数名前设置断点。

clear:清除所有断点(基于行);d n:删除第n个断点(基于序号);d n-m:删除第n到第m个断点。

disable n-m(enable n);使第n到第m个断点无效。

where 或者bt或者info s:查看堆栈

l:查看源码(默认显示10行,按回车继续显示);list n 查看指定行前后代码;list 函数名查看函数代码;

回车:重复上一天命令

s:逐行步入调试(对源码,si为对汇编)

n:逐行调试(对源码,ni为对汇编)

up:调用栈上移一个函数调用;down:调用栈下移一个函数调用。

finish:从该函数退出

p 变量名:显示变量的值,如果全局变量与函数变量名重复,使用p file::变量值查看全局变量,使用 p function::变量名查看函数变量。

p 变量名=变量值:修改变量值

display 变量名(undisplay):在调试时,每次命中断点都显示该变量名的信息。

i locals:显示所有局部变量值;i b:显示所有断点信息;info还可以查看很多,具体的可以输入help info查看。

watch 变量名:击中某个断点后,可以监视该上下文中指定变量的值,如果有变化则会命中,显示的是改变值之后运行的下一行,参考:gdb下watch的使用_白永辉的专栏-CSDN博客_gdb watch。

调试子进程:在调试时,如果当前线程fork了子线程,默认并不会命中子线程的断点。要设置跟踪的进程:(gdb) set follow-fork-mode child

保存断点:每次退出gdb之后,即使进入的是同一个文件,上次打的断点也会消失,退出的时候,可以保存断点:save b 文件名(随便有没有后缀,自己能记住就好),然后下次使用 source 文件名 载入断点,或者在载入调试文件的时候使用 gdb a.out -x 文件名 载入断点。

在gdb中重新编译shell gcc test.c -o test -g ,这样就不用改了源码又退出gdb重新编译了。其实shell命令在gdb中都可以用,只需要在前面加上shell就可以了。 

TUI模式显示代码窗口:focush或者layout或者快捷键ctrl+x+a或者在进入debug模式时写gdb -tui a。  在显示代码中使用 focus next(简写 fs next) 控制焦点在src与cmd之间切换。  使用layout next 控制代码在源码、汇编、寄存器、源代码和汇编等四个窗口之间切换,layout src显示源码。  使用pgup/pgdn快捷键与l指令控制代码块显示。  当focus在代码窗口时,可以使用ctrl+p/ctrl+n来控制cmd窗口选中上一条/下一条命令。

其他命令:gdb调试工具常用命令 - 天娅之芸 - 博客园 (cnblogs.com)

GDB 常用命令学习_The_sun的博客-CSDN博客_gdb ni命令

Linux下gdb调试工具的使用_网络资源是无限的-CSDN博客

 

你可能感兴趣的:(Linux,linux,git,gdb)