c++ - 如何进行程序执行检查
问题描述
按下按钮后,我必须执行以下代码:
void stageProgram::on_pushButton_programKeyGrip_clicked()
{
ManageConfigFile configFile; //---> line 1
configFile.keyGripTest(pLabel); //---> line 2
tetra_grip_api::set_sensor_data_rate(SENSOR_ADDRESS_BROADCAST, 0); //--->line 3
disconnect(&api, &tetra_grip_api::tetraGripEvent,this, &stageProgram::stimStatusEventHandler); //---> line 4
disconnect(&api, &tetra_grip_api::tetraGripSensorEvent,this, &stageProgram::sensorEventHandler); //--->line 5
this->close(); //---> line 6
keygripv2 = new ProgramKeyGripV2(pLabel);//---> line 7
keygripv2 -> show();//---> line 8
}
我有一个基本的疑问:在执行第 6,7 8 行等之前,如何确保前五行已成功执行?
在这种情况下,最佳编程实践是什么?
解决方案
当一行“成功执行”时很难定义,因为为此您需要单元测试或至少一些布尔检查......例如,如果仅使用断言未满足某些条件,您可以使应用程序停止。 .. 像:
int divide(int a, int b)
{
Q_ASSERT_X(b != 0, "divide", "division by zero");
return a / b;
}
如果变量 b 为零,此断言将停止应用程序...
现在,一种更简单的方法是检查运行时何时执行代码指令(无论结果是否正常......)为此,您可以附加调试输出......在qt中有QDebug
disconnect(&api, &tetra_grip_api::tetraGripEvent,this, &stageProgram::stimStatusEventHandler); //---> line 4
qDebug() << "tetraGripEvent disconnected"; //<----- like this
disconnect(&api, &tetra_grip_api::tetraGripSensorEvent,this, &stageProgram::sensorEventHandler); //--->line 5
qDebug() << "tetraGripSensorEvent disconnected"; //<----- like this
this->close(); //---> line 6
现在在您的情况下很简单,因为 disconnect 实际上是一个返回布尔值的函数...
请参阅官方文档:其中说明
将对象发送者中的信号与对象接收者中的方法断开。如果连接成功断开,则返回true ;否则返回false。
所以你可以做
auto flag{false};
flag = disconnect(&api, &tetra_grip_api::tetraGripEvent,this, &stageProgram::stimStatusEventHandler); //---> line 4
qDebug() << "tetraGripEvent disconnected? " << flag; //<----- like this
推荐阅读
- java - Eclipse 中集成的 Maven 与 maven.org 网站上的 Maven 之间的区别
- c# - 为 ASP.NET Core MVC 和 EF Core 解决方案提供 Azure SQL DB 连接字符串
- excel - 如何使用动态数组进行结构化引用?
- c# - 当玩家尝试返回某个区域时,我试图在文本冒险类型游戏中重复部分代码,有没有办法做到这一点?
- asp.net - VB.Net 相当于共享方法的“This”
- javascript - Eslint 规则总是把函数放在最后?
- python - 在导出到同一个 CSV 和从同一个 CSV 导入的两个数据框中找到不同的值
- python - 不打印对象详细信息
- database - TDengine,使用连续查询创建表,里面有错误的数据
- c++ - 输入大数字时,输入值的最后一位始终为 7 或 5