买的虚拟主机怎么做网站,苏州外贸公司网站建设流程,哈尔滨大型网站制作开发,网页设计入门与应用跨平台IDE编译调试C很方便#xff0c;如QTCreate 、VSCode、Eclipse等#xff0c;但是如果只能使用Shell控制台呢#xff0c;gdb调试的优势就很明显了#xff0c;在没有IDE的情况下#xff0c;这个方式最有效。因为上手不是很难#xff0c;特此整理
参考链接 目录 1、G…跨平台IDE编译调试C很方便如QTCreate 、VSCode、Eclipse等但是如果只能使用Shell控制台呢gdb调试的优势就很明显了在没有IDE的情况下这个方式最有效。因为上手不是很难特此整理
参考链接 目录 1、GDB调试1.1、gcc 编译输出可调试程序1.2 cmake编译输出可调试程序1.3gdb常用指令1.4gdb操作步骤 2、core调试3、调试正在运行的程序 1、GDB调试
1.1、gcc 编译输出可调试程序
命令样例
gcc -g -o Run_exe test.c1.2 cmake编译输出可调试程序
在CMakeList.txt中增加如下字段即可
# 设置为调试模式
set(CMAKE_BUILD_TYPE Debug)
# 配置调试信息
set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG} -g)
set(CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG} -g)1.3gdb常用指令
gdb调试主要记住这个表再就是开始实战操作
命令命令缩写命令说明set args设置主程序的外部参数例如./Run_exe argc1 argc2breakb设置断点b 3 表示在第3行设置断点可以设置多个断点也可以b functionName ,对函数下断点info b 查看所有断点信息delete 1 标识取消第一个断点断点号通过info b可以查询得到runr开始运行程序程序运行到断点位置会停下来如果没有遇到断点程序一直运行下去nextn执行当前行语句如果该语句为函数调用不会进入函数内部执行steps执行当前语句如果该语句为函数调用则进入函数执行其中的第一条语句。注意了如果函数是库函数或者第三方提供的函数用s也是进不去的因为没有源代码如果是你自定义的函数只要有源码就可以进去printp显示变量值例如p name 表示显示变量name的值。list输入该命令回车可以查看10行源代码再不用输入命令直接回车还可以继续看十行源代码continuec继续程序的运行直到遇到下一个断点bt查看程序执行到当前位置的调用栈set var namevalue设置变量的值假设程序有两个变量int ii;调试的时候 set var ii22 即把ii的值设置为22char name[50];调试的时候 set var name“测试” 把name的值设置为“测试”注意这里不是strcpyquitq退出gdb环境
1.4gdb操作步骤
这里假设已经编译出可调式的程序 1、gdb 调试JoinTieGCP_EXE 2、在该程序511设置断点如上图 3、设置外部传参命令 4、r运行程序n下一步不进入s下一步进入list查看源代码info b 查看断点等等
2、core调试
core调试主要查看程序异常在哪一行运行挂掉中文输出“段错误”英文输出“core dump”
表现如下对于其他错误应该不支持该方法
接下来操作步骤
1、ulimit -a 查看系统参数
2、ulimit -c unlimit 把core文件的大小设置为无限制
3、运行程序生成core文件
4、gdb 程序名 core文件名
5、输入命令“bt”,查看函数调用栈
3、调试正在运行的程序
1、程序执行中 测试程序中写一个for循环100次每次循环等待1秒的测试程序。
2、查找进程ID进入进程调试 查找进程ID ps -ef|grep book1
gdb调试 gdb book1 -p 21495 剩下的就跟gdb调试差不多了