尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Linux学习:Day05 gdb调试内部命令

Linux学习:Day05 gdb调试内部命令 引入fgets函数函数原型char *fgets(char *str, int size, FILE *stream);参数char *str:字符数组存放读到的字符串int size最多读取size-1个字符留 1 位存结束符\0FILE *stream数据流。返回值读取成功返回str地址读到文件末尾 EOF / 读取失败返回NULL作用用于从文件流 / 标准输入读取一行字符串键盘和文件也是文件键盘文件stdin标准输入屏幕文件stdout标准输出stderr标准错误输出图片上代码在输入end时应当退出程序为什么输入end没有退出程序呢想要找到问题我们可以通过调试来查找问题。调试工具gbdtest.c只是文件不是程序test 放到磁盘上叫程序./test 运行起来进程这个是调试的东西gcc -o test test.c用gcc编译器编译 test.c 源代码生成名为 test的可执行程序。不可调试没有调试信息gcc -o test test.c -g生成开发调试版本用于 gdb 调试。编译的时候加上参数-g是为了包含调试信息调试命令l 显示代码 默认打印当前位置前后共 10 行源代码 l 行号 快速跳转到指定代码行查看上下文 l filename:行号 快速跳转到指定代码行查看上下文 b 行号 加断点b 函数名字 加断点info break 显示断点信息查看断点信息r 运行程序只会运行一次n 单步执行p 打印变量、表达式、地址c 继续执行不再单步执行s 进入函数finish 跳出函数q 退出程序bt 查看函数调用的栈函数补充内容主函数参数main(int argc, char* argv,char* envp[])argc 参数个数 argv参数内容 envp环境变量man 帮助手册查命令函数的说明文档1命令2系统调用3库函数printf()缓冲区图片中的程序结果是先睡眠3秒然后打印hello这是为什么呢printf不会立刻把内容打到屏幕上会把要打印的内容先放到缓冲区缓冲区满了才会打印。缓冲区什么时候打印到屏幕上呢满足以下三种情况1.缓冲区满了2.强制刷新\n 换行触发行缓冲刷新文字立刻打印fflush(stdout) 强制把缓冲区内容输出到屏幕3.程序要退出了 先刷缓冲区再退出程序exit()退出进程exit()会执行两步操作1先刷缓冲区2再调_exit()退出程序_exit()只退出程序不会刷缓冲区
返回列表