C++ 如何在程序中切换调试模式?
我有一个关于使用信号和信号处理器的项目,我基本上已经完成了;然而,有一点我很困惑。下面是老师提示中粘贴的部分:“……当它收到sigusr2时,它应该切换到或关闭 调试模式,例如,如果调试模式当前处于“开启”状态,则应 关闭调试,如果调试为“关闭”,则应打开调试 当调试处于“开启”状态时,您的程序应报告 每x秒总计一次,忽略信号1。 当调试处于“关闭”状态时,应关闭警报并启动程序 应像以前一样处理sigusr1(即报告 总数)”C++ 如何在程序中切换调试模式?,c++,c,debugging,signals,C++,C,Debugging,Signals,我有一个关于使用信号和信号处理器的项目,我基本上已经完成了;然而,有一点我很困惑。下面是老师提示中粘贴的部分:“……当它收到sigusr2时,它应该切换到或关闭 调试模式,例如,如果调试模式当前处于“开启”状态,则应 关闭调试,如果调试为“关闭”,则应打开调试 当调试处于“开启”状态时,您的程序应报告 每x秒总计一次,忽略信号1。 当调试处于“关闭”状态时,应关闭警报并启动程序 应像以前一样处理sigusr1(即报告 总数)” 他切换到调试模式的确切意思是什么?我唯一熟悉的调试模式是eclips
他切换到调试模式的确切意思是什么?我唯一熟悉的调试模式是eclipse版本。问另一位同学,我得到的回答是我应该建立自己的调试模式,我也不知道这意味着什么。有谁能给我点启示,为我指明正确的方向吗?感谢您的阅读,并提前感谢您的帮助 这仅仅意味着程序保留了一些关于调试级别的状态信息,如下所示:
int debug_level = 0;
void log(const char * message)
{
if (debug_level > 0)
{
printf("Debug message: %s\n", message);
}
}
然后你可以说log(“开始循环”)代码>或类似的东西,并且只有在调试级别足够高的情况下才会打印它
注册信号处理程序时,只需让它修改全局debug\u level
变量即可。(请确保对变量使用typesigatomic\t
,以确保您可以从信号处理程序中安全地修改它!)这只是意味着您的程序保留了一些有关调试级别的状态信息,如下所示:
int debug_level = 0;
void log(const char * message)
{
if (debug_level > 0)
{
printf("Debug message: %s\n", message);
}
}
然后你可以说log(“开始循环”)代码>或类似的东西,并且只有在调试级别足够高的情况下才会打印它
注册信号处理程序时,只需让它修改全局debug\u level
变量即可。(请确保使用“类型<代码> SigaMICIGT< <代码> >变量,以确保您可以在信号处理程序中安全地修改它!”暂时忘记“调试”,只需考虑程序需要有两种模式。在一种模式下,它应该以某种方式运行,而在另一种模式下,它以不同的方式运行
跟踪两个州的简单方法是什么?具有两个(或更多)可能值的变量,例如bool
。因此,声明一个全局变量以跟踪您是处于一种模式还是另一种模式(但由于技术上不支持从信号处理程序使用全局bool
变量,请改用sig\u atomic\t
):
当您收到控制程序应处于哪种模式的信号时,请更改变量的值,然后确保程序的行为方式与该模式一致。如果收到信号但未处于调试模式,则在调试模式下设置,设置SIGALRM处理程序,并禁用SIGUSR1处理程序。如果收到信号且处于调试模式,则在调试模式下设置=false
,清除SIGALRM处理程序,然后设置SIGUSR1处理程序
模式的名称是不相关的。为了分配的目的,它被称为“调试模式”,但它与您熟悉的任何其他程序的调试特性无关。 暂时忘记“调试”,只需考虑您的程序需要有两种模式。在一种模式下,它应该以某种方式运行,而在另一种模式下,它以不同的方式运行
跟踪两个州的简单方法是什么?具有两个(或更多)可能值的变量,例如bool
。因此,声明一个全局变量以跟踪您是处于一种模式还是另一种模式(但由于技术上不支持从信号处理程序使用全局bool
变量,请改用sig\u atomic\t
):
当您收到控制程序应处于哪种模式的信号时,请更改变量的值,然后确保程序的行为方式与该模式一致。如果收到信号但未处于调试模式,则在调试模式下设置,设置SIGALRM处理程序,并禁用SIGUSR1处理程序。如果收到信号且处于调试模式,则在调试模式下设置=false
,清除SIGALRM处理程序,然后设置SIGUSR1处理程序
模式的名称是不相关的。就作业而言,它被称为“调试模式”,但与您可能熟悉的任何其他程序的调试功能无关。您从讲师那里得到了什么样的响应?那是你应该首先回答所有关于作业的问题的地方。啊,当然。=)是的,我在今天中午左右联系了他,但仍然没有回复(电子邮件),不幸的是截止日期是晚上11点。你从你的导师那里得到了什么回复?那是你应该首先回答所有关于作业的问题的地方。啊,当然。=)是的,我在今天中午左右联系了他,但仍然没有回复(电子邮件),不幸的是截止日期是11 pmOk,但是调试级别是如何更新的?从这里开始,它将保持在0,除非来自程序的外部内容将对其进行修改。=)你的教授告诉你如何通过信号SIGUSR2更新。编写一个切换位的信号处理器(正如Kerrek所说)。请参阅@Derek:您还需要帮助编写信号处理程序吗?你应该在你的问题中说,或者更确切地说,提出一个不同的问题,“我如何用C编写一个信号处理程序”?好的,调试级是如何更新的?从这里开始,它将保持在0,除非来自程序的外部内容将对其进行修改。=)你的教授告诉你如何通过信号SIGUSR2更新。编写一个切换位的信号处理器(正如Kerrek所说)。看@Derek:你呢