查看程序状态

在程序暂停时查看程序的状态

通过小熊猫C++的控制程序执行功能,可以帮我们准确将程序暂停到指定的位置。然后,我们就需要去查看程序的状态了。小熊猫C++提供了一系列工具来帮助我们查看程序的状态

1 局部变量视图

在调试时,调试面板的局部变量视图会自动显示当前函数作用域中的所有局部变量(包括函数参数)。

局部变量视图

局部变量视图

2 监视和监视面板

局部变量视图可以自动显示局部变量的状态,这很好。但是如果某个函数里面的局部变量太多,找我想看的变量很麻烦;或者我想看某个全局变量的状态;或者我想看某个表达式的值,怎么办呢?这时就需要使用监视功能了。

2.1 添加监视

比如,我们想在调试过程中监视&n的值(n的地址)。可以在调试工具栏中点击“添加监视”按钮

添加监视按钮

添加监视按钮

然后在对话框中输入我们要监视的表达式:

添加监视按钮

添加监视按钮

在左侧的监视面板中就可以看到我们要监视的表达式了。因为此时我们没有开始调试程序,所以&n的值中显示“执行以求值”。

gdb(小熊猫C++使用的调试器)支持监视任何C、C++表达式。但请保证在表达式中不会出现无穷递归、无限循环等错误,否则gdb调试器会卡死无法正常使用

2.2 查看监视

在程序调试的过程中,小熊猫C++会在程序暂停时自动更新监视的值。请注意示例程序在main函数中暂停,和在isPrime函数中暂停时,&n的变化(main和isPrime中的n虽然同名,但是是两个作用域不同的变量,在内存中的地址不同)

程序在main函数中暂停

程序在main函数中暂停

程序在isPrime函数中暂停

程序在isPrime函数中暂停

3 调用栈视图

我们按照自顶向下或者模块化的思路设计程序时,会以函数为单位来组织和实现的程序的功能。在调试程序时,我们经常需要知道,函数现在正被谁调用?调用者的状态是怎样的?

调试面板中的调用栈视图为我们提供了程序调用栈(Call Stack)的信息。从下图中我们可以看出,当前程序执行到isPrime函数中,它是在main函数的第30行被调用的。

调用栈信息

调用栈信息

在调用栈视图中双击某一行,小熊猫C++就会自动跳转到对应的程序位置。

点击调用栈视图第二行,跳转到isPrime函数被调用的位置

点击调用栈视图第二行,跳转到isPrime函数被调用的位置

4 内存视图

调试面板的内存视图允许我们在调试时,查看程序进程指定内存位置的值。在地址表达式栏中输入任意返回内存地址的表达式,就可以查看指定位置的内容。例如,下面是我们输入“&n"后的显示结果

5 求值工具

除了监视和局部变量之外,我们还可以使用求值工具来快速计算某个表达式。

注意,求值工具可以执行任意C/C++表达式,包括赋值表达式!其效果和在程序中执行该表达式的作用是相同的。例如,我们在求值输入框中输入n=500,就可以将变量n的值改为500。

6 CPU窗口

CPU窗口让我们可以查看程序对应的机器和汇编指令,以及CPU中各寄存器的状态。通过”运行“菜单的”打开CPU窗口“菜单项即可打开CPU窗口。对于学生和初中级用户而言,这个窗口中的信息可以帮助他们更深入的理解C语言程序的实际工作机理。

最后修改 October 3, 2022: update (99f42a8e)