GDB调试利器 |
您所在的位置:网站首页 › gdb如何单步调试 › GDB调试利器 |
前言 前面两篇已经对Linux下如何使用gdb启动调试,GDB调试利器-断点设置与查看源码我们已经了解了GDB基本的启动调试,设置断点,查看源码等,如果这些内容你还不知道,建议先回顾一下前面的内容。 断点附近的代码你了解后,这时候你就可以使用单步执行一条一条语句的去执行。可以随时查看执行后的结果。接下来你可能会想知道程序运行的一些情况,就需要查看变量的值。下面介绍单步调试与设置变量。 单步调试 居然是调试代码,还是老规矩,先上代码: //test.c #include void judge_sd(int num){ if ((num & 1) == 0){ printf("%d is even\n",num); return; }else{ printf("%d is odd\n",num); return; } } int main(int argc, char const *argv[]){ judge_sd(0); judge_sd(1); judge_sd(4); return 0; }编译: gcc -g test.c -o test程序的功能比较简单,这里不多做解释。断点附近的代码你了解后,这时候你就可以使用单步执行一条一条语句的去执行。可以随时查看执行后的结果。单步执行有两个命令,分别是step和next。我们可能打了多处断点,或者断点打在循环内,这个时候,可以使用continue命令。这三个命令的区别在于: 1、next命令(可简写为n)用于在程序断住后,继续执行下一条语句。 2、step命令(可简写为s),它可以单步跟踪到函数内部。 3、continue命令(可简写为c)或者fg,它会继续执行程序,直到再次遇到断点处。单步进入-step step 一条语句一条语句的执行。它有一个别名,s。它可以单步跟踪到函数内部。 先用list(可简写为l)将源码列出来,例如:
单步执行-next next命令示例: next命令(可简写为n)用于在程序断住后,继续执行下一条语句。上面的信息在5行处打断点,然后运行到6行,然后输入 运行n 2,则会单步执行两行。可见,使用next命令只会在本方法中单步执行。 继续执行到下一个断点-continue 我们可能打了多处断点,或者断点打在循环内,这个时候,想跳过这个断点,甚至跳过多次断点继续执行该怎么做呢?可以使用continue命令。它的作用就是从暂停处继续执行。命令的简写形式为c。继续执行过程中遇到断点或者观察点变化依然会暂停。示例代码如下: 跳过执行–skip 根据上面的信息可以看到,使用skip之后,将不会进入judge_sd函数。好处就是skip可以在step时跳过一些不想关注的函数或者某个文件。 如果想删除skip,使用skip delete [num] 。 查看变量 现在你已经会设置断点,查看断点附近的代码,并可以单步执行和继续执行。接下来你可能会想知道程序运行的一些情况,如查看变量的值。print命令正好满足了你的需求。以帮助我们进一步定位问题。 格式: print[变量名] print(可简写为p)打印变量内容。示例代码如下: //test.c #include #include //malloc,free,rand int main(int argc, char const *argv[]) { int input; int i ; printf("Please enter the length of the string:"); scanf("%d",&input); char *buf = (char *) malloc(input + 1);//字符最后包含'\0' if (buf == NULL) { printf("malloc failed!\n"); return -1; } //随机生成字符串 for ( i = 0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |