gdb调试segfault

推荐大家好,我叫郑正。我最近没有时间输出文章。
这个周末见。这次,我分享了年轻时有关调试段错误的文章。
我最近遇到了这些东西,所以我必须学习如何使用gdb。首先标记它。
以下是原始内容:前言使用gdb调试程序应该被视为Linux开发的一项基本技能。今天,让我们看一下如何使用gdb调试分段错误。
如何调试段错误首先请看以下示例:#include& lt; stdio.h& gt; #include& lt; stdlib.h& gt; int main(int argc,char ** argv){char * buf; buf = malloc(1& lt;< 31); fgets(buf,1024,stdin); printf(“%s " buf); return 1;}然后在编译和执行过程中出现了分段错误。然后让我们使用gdb来解决问题吗?我们重新编译程序,但是在编译时需要添加-g。
使用gdb进行调试时,请使用此选项进行编译。下一步是使用gdb进行调试!执行gdb测试,然后使用run启动程序。
我们从操作系统收到了SIGSEGV信号,这意味着我们正在尝试访问非法部分。我们使用backtrace查看堆栈情况:我们主要查看程序,该程序提示我们在第10行崩溃!那就是fgets(buf,1024,stdin);为什么它在fgets中崩溃,它一定是我们给的参数了!有问题!让我们使用print来打印buf的值。
哈哈!空指针........这意味着malloc失败了!让我们中断进行调试。首先使用kill停止,然后在第8行中断。
单击以查看清楚,打破这一点的方法在C文件上:break test.c:8然后运行在第8行停止。我们打印buf值,然后发现在执行malloc之前和之后,它是0x0,当然存在。
那时,在malloc之前可能有一个随机值。这已经表明malloc尚未成功!实际上,主要原因是我们分配的空间太大,并且分配的空间约为4G。
可以更改为1024!总而言之,最主要的是告诉所有人。一些基本的故障排除方法,gdb非常通用,可以检查信息。
gdb在应用程序开发中仍然更常用,您仍然需要掌握它!猜猜您喜欢错误而无法解决错误?使用日志方法从MCU工程师的角度来看嵌入式Linux,您的微控制器的裸机程序框架是什么?。

产品知识/行业、品牌资讯