本文属于牛客网上的一个项目笔记:Linux高性能服务器开发课_牛客网
GCC和G++
gcc和g++都可以编译c或者cpp文件,但是g++会进行连接 g++ cppfile gcc不会 需要加参数 gcc -lstdc++ cppfile G++在编译的时候仍然调用的是gcc,为了方便 c文件用gcc cpp文件用g++
gcc常用参数
-E | 预处理源文件 | gcc test.c -E -o test.i | 预处理展开后的文件 |
-S | 编译源文件 | gcc test.i -S -o test.s | 汇编代码 |
-c | 编译汇编源文件 | gcc test.s -c -o test.o | 二进制文件 |
-o | 生成文件 | gcc test.o -o test | 连接生成可执行文件 |
以上步骤可合并成:gcc test.c -o test |
GDB调试
gcc -g -Wall filename.c -o app
-g 这样会将源代码信息打包到app中 方便调试。
启动 gdb app
退出 quit
设置传给main函数的参数 set args 值1 值2…
获取参数 show args
设置每次显示的行数 set list 行数
显示每次显示的行数 show list
查看源码 list
l (默认显示main函数所在的文件)
l 行号 (会显示该行附近的代码)
l 函数名(会显示该函数附近的代码)
l 文件名:行号
l 文件名:函数名
打断点
设置断点
b 行号
b 函数名
b 文件名:行号
b 文件名:函数名
查看断点
info b
删除断点
d 断点编号
设置无效断点
dis 断点编号
设置断点生效
ena 断点号
设置条件断点(一般用在循环位置)
b 行号 条件
运行调试
start (程序停在第一行)
run (遇到断点暂停)
c (继续运行到下一个断点暂停)
n (单步向下,不会进入函数)
s (单步向下,会进入函数)
finish (跳出函数体)
p 变量名 (打印变量的值)
ptype 变量名 (打印变量类型)
display num (设置会自动显示变量的值)
info display (显示设置好的自动显示的值)
undisplay (取消显示)
set var 变量名=变量值 (在gdb过程中可以设置变量的值)
until (跳出循环,循环内不能有生效的断点)