Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在程序中切换调试模式?_C++_C_Debugging_Signals - Fatal编程技术网

C++ 如何在程序中切换调试模式?

C++ 如何在程序中切换调试模式?,c++,c,debugging,signals,C++,C,Debugging,Signals,我有一个关于使用信号和信号处理器的项目,我基本上已经完成了;然而,有一点我很困惑。下面是老师提示中粘贴的部分:“……当它收到sigusr2时,它应该切换到或关闭 调试模式,例如,如果调试模式当前处于“开启”状态,则应 关闭调试,如果调试为“关闭”,则应打开调试 当调试处于“开启”状态时,您的程序应报告 每x秒总计一次,忽略信号1。 当调试处于“关闭”状态时,应关闭警报并启动程序 应像以前一样处理sigusr1(即报告 总数)” 他切换到调试模式的确切意思是什么?我唯一熟悉的调试模式是eclips

我有一个关于使用信号和信号处理器的项目,我基本上已经完成了;然而,有一点我很困惑。下面是老师提示中粘贴的部分:“……当它收到sigusr2时,它应该切换到或关闭 调试模式,例如,如果调试模式当前处于“开启”状态,则应 关闭调试,如果调试为“关闭”,则应打开调试

当调试处于“开启”状态时,您的程序应报告 每x秒总计一次,忽略信号1。 当调试处于“关闭”状态时,应关闭警报并启动程序 应像以前一样处理sigusr1(即报告 总数)”


他切换到调试模式的确切意思是什么?我唯一熟悉的调试模式是eclipse版本。问另一位同学,我得到的回答是我应该建立自己的调试模式,我也不知道这意味着什么。有谁能给我点启示,为我指明正确的方向吗?感谢您的阅读,并提前感谢您的帮助

这仅仅意味着程序保留了一些关于调试级别的状态信息,如下所示:

int debug_level = 0;

void log(const char * message)
{
  if (debug_level > 0)
  {
    printf("Debug message: %s\n", message);
  }
}
然后你可以说
log(“开始循环”)或类似的东西,并且只有在调试级别足够高的情况下才会打印它


注册信号处理程序时,只需让它修改全局
debug\u level
变量即可。(请确保对变量使用type
sigatomic\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:你呢