博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
debug日志
阅读量:2353 次
发布时间:2019-05-10

本文共 1041 字,大约阅读时间需要 3 分钟。

最近发现脑袋越来越不好使了,许多碰到过的问题,却一直记不起解决的办法,所以要用日志记录我自己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是一个数组,则用指针申请的地址空间必须是连续的,如果这个指针指向的结构非常大,则不能将这个指针作为这个结构数组的首元素地址,因为有可能申请连续的数组地址空间会失败。(这个只是我调试中的怀疑,需要进一步查看相关资料确认)

转载地址:http://dsztb.baihongyu.com/

你可能感兴趣的文章
虚继承与虚基类的本质
查看>>
函数式编程
查看>>
GitHub上整理的一些工具
查看>>
python range 与xrange的区别
查看>>
算法-最长递增子序列
查看>>
最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离
查看>>
回文字符序列
查看>>
inline函数必须在头文件中定义吗?
查看>>
内存泄漏检查工具valgrind使用方法
查看>>
Solution of Codility
查看>>
java解析XML的四种方式及比较
查看>>
单例模式(java)详细
查看>>
策略模式(java)
查看>>
java线程中信号量Semaphore类的应用
查看>>
如何设置CentOS为中文显示
查看>>
Nginx配置
查看>>
php-fpm配置
查看>>
Centos 系统时间与当前时间相差和时区解决办法
查看>>
Linux下如何进行FTP设置
查看>>
linux之LVM操作案例
查看>>