编译
当有线程创建时编译:gcc test.c -o test -lpthread
分文件编写时主要是分为:.c(函数声明的具体实现)、.h(说明性文件:#define 结构体共用体 声明)、.c(main)
条件编译
一般情况下,要对每一行都进行编译。当希望只对其中一部分内容进行编译时,需要用到条件编译。
下图为模拟部分程序需要在x86运行,当不需要运行时就不定义3,而当需要运行时则定义3行
还可以使用ifndef
有两种编译方式:根据宏定义进行条件编译;根据宏的值是否为真来进行条件编译
使用gcc命令中的-D参数来动态注册宏定义
GDB调试工具
b:打断点
r:运行
bt:查看栈信息
c:继续运行
n:单步调试
e(edit):
l(list):查看代码内容,一次十行
s(step):进入函数内部,查看函数
help:帮助手册
quit:提出GDB
以下程序进行调试
#include <stdio.h>
#ifdef _PRINT_
void print()
{
printf("hello world\n");
}
int main(int argc, const char *argv[])
{
int i;for (i = 0; i < 5; i++)
printf("%d\n",i);print();
return 0;
}#endif
#ifdef _CORE_
#include <stdio.h>int main(int argc, const char *argv[])
{
int *temp = NULL;*temp = 10;
return 0;
}#endif
#ifdef _ING_
#include <stdio.h>
#include <unistd.h>int main(int argc, const char *argv[])
{
while(1)
{
int i;
i++;
printf("%d\n",i);
sleep(1);
}
return 0;
}#endif
一些命令使用示例
GDB调试core文件
core文件:操作非法地址,会报段错误生成的文件
gcc -g gdb.c -o test_core -D _CORE_,在运行了./test_core后就会生成一个core文件
运行gdb test_core core就会出现出错原因,其中#0错误原因,并显示出代码在哪里出现了问题(28行)
GDB调试正在运行的进程
比如说服务器不能让它停下来,再进行调试
gcc -g gdb.c -o test_ING -D _ING_
./test_ING运行
先使用ps aux | grep gdb_ING查找进程号为3465
接着使用gdb gdb_ING -p 3465进入调试
接着和正常调试的都一样