我刚刚开始用c编程,我想测试一些代码。因此,我需要在我已经知道的程序中的特定点上知道变量的值。
在搜索时,我看到许多人都在使用gdb和core dump,但是我发现,大多数示例在发生崩溃时都使用它来调试代码。 就我而言,我不想终止执行,我只想保存/知道特定变量在特定点的值。
例如:
如果我有这段代码:
int func(int x){
x = 3 * x;
if(x > 0){
x = x % 4;
/* I want to know the value of x at this point*/
}
else {
x = x + 1;
/* I want to know the value of x at this point*/
}
return x;
}
如果用户输入值,我想知道计算后(if)块内x的值。
更新: 为了澄清我的问题,我有一个很大的代码,我想测试完整的程序包,我想编写一个函数来告诉我该程序点的存储值是什么。
答案 0 :(得分:2)
GDB是最适合您的工具。在程序执行过程中,您可以看到变量的值。请按照以下步骤操作:
使用-g标志编译程序。
gcc -g program.c -o output
现在使用gdb运行程序:
gdb output
在Gdb命令行中,使用以下命令在“ main”处设置断点:
(gdb) b main
或使用低于1的值在特定行上设置断点。
(gdb) b line_number
现在输入“ r”以运行程序。
(gdb) r
键入“ n”,然后按Enter键进入下一行
(gdb) n
键入“ step”以进入功能:
(gdb) step
使用
检查变量值(gdb) print variable-name
将断点保留在要查看变量值的“行号”处,并使用“ print variable-name
”查看值。
请将此作为更多GDB命令的参考: http://www.yolinux.com/TUTORIALS/GDB-Commands.html
希望这个答案将帮助您调试代码。
答案 1 :(得分:1)
我认为您可以使用类似的内容
printf("%d\n",x);
每个表达式后带有
x= ...
在您的功能中。 或者,如果您不想将值输出到控制台,则可以使用 fprintf 将值写入文件中,而不是 printf 。
答案 2 :(得分:0)
使用调试器(安装任何C IDE(如Eclipse CDT),您将无需进行任何配置)
您甚至可以在线进行调试https://www.onlinegdb.com/
答案 3 :(得分:0)
使用printf扩展的另一种方法是使用调试宏或函数。例如。看到:
https://github.com/jleffler/soq/blob/master/src/libsoq/debug.c
可以使用类似的方法来动态启用某些功能用例的调试,然后再将其禁用,这样就不必在调试代码时获得过多的输出。