我用 C++ 编写了一个 Linux 守护进程。代码是这样的:
int main(int argc, char** argv)
{
daemon(1, 0); // Daemonize itself, retaining the current working directory and redirecting stdin, stdout and stderr to /dev/null.
// My program logic goes here
}
问题是,我的程序逻辑偶尔会抛出异常。我如何捕获异常以便知道哪里出了问题?
我知道对于一个普通的控制台应用程序,未捕获的异常将被转储到控制台。在我的例子中,在调用 daemon(1, 0) 之后,控制台不再可访问。
在 Windows 上,任何未捕获的异常都将由操作系统保存,并可以通过计算机管理中的事件查看器查看。 Linux 上有没有类似的机制?
最佳答案
您有两个解决方案:
一:你把对守护函数的调用改成
daemon(1,1);
这将使程序仍然可以访问标准输出,随后将保留将未捕获的异常转储到控制台的默认行为。
二:你不改变调用,但是你添加一个全局的
try { /* main code here */ } catch(...){ /* logging code here */ }
将任何未捕获的异常记录到文件中。
关于c++ - Linux 是否记录守护进程抛出的未捕获异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13219105/