前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言(GDB调试器的使用和段错误的定位)

C语言(GDB调试器的使用和段错误的定位)

作者头像
用户2617681
发布2019-08-08 13:22:59
2.3K0
发布2019-08-08 13:22:59
举报
文章被收录于专栏:秘籍酷秘籍酷

对于一个程序而言,语法错误由编译器(比如GCC)负责,而逻辑错误则由开发人员负责。项目研发过程中,不可避免地会出现或多或少的问题,有些比较简单的可以目测,有些复杂一点的,就需要使用特殊的工具——调试器(比如GDB)来协助了。

下面是一段从零开始介绍GBD调试器的用法,以及如何快速定位段错误的视频。建议在WIFI环境下观看。

视频大小:50.8M

视频时长:17分22秒

没有WiFi?讨厌广告?没耳机?不够清晰?高清免广告原版视频请点击左下方“阅读原文”。或者,阅读以下文字也可以学习哟!

1,将待调试的代码使用 -g 来编译,举例:

gcc debugme.c -o debugme -g

2,使用 gdb 启动待调试代码:

gdb ./debugme

3,命令 list(或简写第一个字母l)来浏览待调试源码

4,命令 breakpoint(或简写第一个字母b)来设置断点,举例:

b 20 #在第20行设置一个断点

b func #在函数func起始处设置一个断点

b 50 if i==100 #当且仅当变量i等于100时,第50行的断点生效

5,命令 run(或简写第一个字母r)启动待调试程序,举例:

r

r abcd 1234

6,命令 step(或简写第一个字母s)让程序单步运行(会进入函数内部)

7,命令 next(或简写第一个字母n)让程序单步运行(不进入函数内部)

8,命令print、display可以显示跟踪变量的值的变化,举例:

print i

display i

9,命令backtrace full(或者简写bt full)查看当前程序栈内存信息

10,命令continue(或简写第一个字母c)来让程序继续运行,直到遇到下一个断点或者程序退出为止。

程序运行时的诸多逻辑错误中,段错误(segmentation fault)是最为常见也最难应付的错误,在编辑代码时多加小心防范于未然当然是最好了,但在出错之后,如何利用gdb快速定位也是一个不错的亡羊补牢的实用技巧。

A) 执行以下命令解除系统对core文件的限制:

ulimit -c unlimited

B) 执行一次带有段错误的程序,让他崩溃并生成core文件,举例:

gec@ubuntu:~/test$ ./debugme Segmentation fault (core dumped) gec@ubuntu:~/test$ ls core debugme debugme.c

C) 启用 gdb,让其直接检查core文件,直接定位出错位置,举例:

gec@ubuntu:~/test$ gdb ./debugme core GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1 …… …… #0 0x0804845c in index_to_the_moon (ary=0xbff176ec) at debugme.c:9 9 ary[i] = i;

look,直接定位到第 9 行了。

当然这一招不是一定能奏效的,拼的是人品。如果人品不行,那只能单步调试了。

以上内容的高清免广告版本视频,请点击左下方的阅读原文,到粤嵌创客训练营观看。谢谢同学支持!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秘籍酷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档