从这一节开始,我们正式使用先前配置好的项目结构。
调试程序
熟悉 JetBrains 家 IDE 的应该知道,左键代码左侧行号即可对这行代码打下一个「断点」。
列出以下代码:
在循环进行的过程中,如果我们想要了解其中变量的变化,可以将其打印出来。但只了解变量犹如管中窥豹,当我们需要了解代码运行的全过程,就需要用上断点了。
如上文所述,我们左键单击 prinf 对应行数,你会看见一个红点,此时成功打下断点。
接着,按下工具栏的 Debug 按钮,我们会得到以下结果:
调试会在运行时通过 LLDB(msvc)/GDB (MinGW/Linux 下) 链接程序并在运行到断点处代码时停止执行,此处我们使用 msvc 进行调试。
此外,我们还可以对获取到的变量进行简单的操作。在
Evaluate expression...
中,我们可以操作变量,例如获取该变量的地址,如图所示:
不仅如此,我们还可以通过调试查看编译后的汇编指令。单击
LLDB
输入命令 disas
(disassemble),输出反编译后的汇编指令。常见汇编指令类型包括 Intel 与
AT&T,这里不做过多阐述,默认为 AT&T
(att)。输出的指令在不同编译器不同环境下结果也会不同。
最后介绍 Memory View,CLion 默认不会输出内容,我们需要手动指定地址跳转。
在 Evaluate expression 中输入 &main
获取 main
函数的地址,右键 result 并点击 Show in memory view
(或
Ctrl+Enter) ,我们就能看见 main 函数的 Memory View:
在 Memory View 中,我们可以通过 Go to 指定变量地址,在继续运行后查看其变化。
至此,基础调试 C 程序的方法已介绍完毕。在下一节中,我们将介绍 C 语言的数据类型。