debug日志

最近发现脑袋越来越不好使了,许多碰到过的问题,却一直记不起解决的办法,所以要用日志记录我自己debug调试中碰到的问题~~

命令篇:

1.编译命令:如果需要加gdb调试,则需要加-g参数

gcc -o target_name -g source1.c sourece2.c sourece3.c -I ./include

注意:-g必须在target_name后面,否则编译器会将target_name视为源文件;另外,如果将头文件全部包含在include目录下,则需要加-I参数申明头文件的路径



调试篇:

使用gdb调试常用命令:

r:执行程序

b:设置断点,还可以设置条件断点,eg:b function if i==9(如果i==9,则执行函数function)

c:从断点处继续执行名

n:下一步

bt:查看堆栈,程序执行的堆栈,保留了程序传递的参数,非常有用的调试命令



头文件篇:

1.uint32_t,uint16_t,uint64_t:定义这些类型的变量时编译报错:expected specifier-qualifier-list before ‘uint32_t’,这种错误往往是由于缺乏头文件导致的,使用这些类型的变量需要声明头文件include <stdint.h>


2.报错‘NULL’ 未声明 (在此函数内第一次使用):这种错误也是缺少相应的头文件,添加头文件

#include <stdlib.h>

#include <stdio.h>

这两个头文件是编程时非常常用的头文件,最好一开始就声明这两个头文件

 

3.报错“XXX变量的存储大小未知”,也是头文件的错误,相应声明变量的结构所在的头文件没有被包含,需要include "XXX"相应的头文件即可


4.程序中都不可避免地需要调用一些库函数,但是如果没有包含相应的头文件名的话,即使编译通过了,程序运行时也会出现出乎意料的错误eg:程序中调用了strtok函数,调用这个函数应该申明#include <string.h>,但是如果漏掉了这个申明,程序依然能够编译通过,但是运行时strtok返回的指针就是一个不确定的值了,so...段错误...!


其他:

malloc空间,如果指针p是一个数组,则用指针申请的地址空间必须是连续的,如果这个指针指向的结构非常大,则不能将这个指针作为这个结构数组的首元素地址,因为有可能申请连续的数组地址空间会失败。(这个只是我调试中的怀疑,需要进一步查看相关资料确认)

你可能感兴趣的:(编程,function,gcc,include,编译器,BT)