调试机器人程序

程序不可避免地不会像我们期望的那样运行。发生这种情况时,有必要弄清楚该程序为什么会执行其所执行的操作,以便我们可以使它执行我们想要执行的操作。这种期望外的程序行为称为“错误”,而此过程称为“调试”。

调试器是用于控制程序流和监视变量以帮助调试程序的工具。本节将描述如何为FRC|reg|机器人程序设置调试会话。

备注

对于需要调试程序但不知道/没有时间学习如何使用调试器的入门用户,通常只需将相关程序状态打印到控制台即可调试程序。但是,强烈建议学生最终学习使用调试器。

运行调试器

Running the debugger via the Command Palette.

Ctrl+Shift+P 并输入 WPILib 或单击 WPILib Menu Item 打开带有预填充的WPILib的命令面板。键入Debug并选择Debug Robot Code menu项以开始调试。该代码将下载到roboRIO并开始调试。

断点

“断点”是一行代码,调试器将在该代码行处暂停程序执行,以便用户可以检查程序状态。这在调试时非常有用,因为它允许用户在有问题的代码中的特定位置暂停程序,以确定程序在哪些地方偏离了预期的行为。

调试器将在遇到的第一个断点处自动暂停。

设定断点

Where to place the cursor to create a breakpoint.

在源代码窗口的左边距中(在行号的左边)单击以在用户程序中设置一个断点:红色小圆圈表示已在相应行上设置了断点。

使用打印语句进行调试

调试程序的另一种方法是在代码中使用print语句,并使用Visual Studio Code或Driver Station中的RioLog查看它们。打印语句应谨慎添加,因为它们效率不高,尤其是在大量使用时。应将它们及时移除,因为它们可能导致循环超限。

System.out.print("example");
wpi::outs() << "example\n";

使用网络表进行调试

:doc:`网络表</docs/software/networktables/networktables-intro>`可用于与调试计算机共享机器人信息。可以使用您喜欢的仪表板或:ref:`OutlineViewer <docs/software/wpilib-tools/outlineviewer/index:OutlineViewer>`查看网络表。网络表的优点之一是可以使用:doc:`Shuffleboard </docs/software/dashboards/shuffleboard/getting-started/shuffleboard-tour>`之类的工具来图形化分析数据。然后,这些相同的工具可以与相同的数据一起使用,以在以后为驱动程序提供操作员界面。

了解更多

  • 要了解有关使用VS Code进行调试的更多信息,请参见`链接<https://code.visualstudio.com/docs/editor/debugging>`__。

  • VS Code`文章 <https://code.visualstudio.com/docs/editor/editingevolved>`__ 中提到的某些功能将帮助您了解和诊断代码问题。快速修复(黄色灯泡)功能对包括导入内容在内的各种问题很有帮助。

  • 避免调试很多问题的最佳方法之一是进行单元测试。

  • 验证您的机器人是否可以在:doc:模拟 </docs/software/wpilib-tools/robot-simulation/introduction> 中运行,也是避免在实际机器人上进行复杂调试的一种好方法。