如何从cURL库中阻止我的Qt应用程序信号SIGSEGV?

时间:2017-07-10 21:47:03

标签: c++ c qt curl crash

我的Qt应用程序使用cURL库发送HTTP请求,有时cURL发送SIGSEGV,然后我的应用程序崩溃。 是否有可能捕获此信号并防止分段错误?

2 个答案:

答案 0 :(得分:1)

TL; DR:

请勿尝试阻止或忽略SIGSEGV。它会给你带来痛苦。

说明:

SIGSEGV意味着发生了非常糟糕的事情,并且您的程序已经进入内存,不允许访问。这意味着你的程序完全被冲洗了。

原谅我的加拿大人。

你的程序坏了。你不能相信它以任何理性的方式表现出来,并且应该真的感谢SIGSEGV让你知道这一点。就像你不想看到SIGSEGV一样,它比一个破碎的程序继续运行并喷出虚假信息更好。

您可以使用信号处理程序捕获SIGSEGV,但是说您确实捕获并尝试处理它。可能性是程序回到触发SIGSEGV的代码中,并且很可能在信号处理程序时再次引发它。或做其他奇怪的事情。可能更糟糕的事情。

使用信号处理程序捕获SIGSEGV并不值得尝试输出消息,因为消息会说什么? “哦,Smurf。发生了一件非常糟糕的事情。”?

所以,是的,你可以抓住它,但你无法做任何事情来恢复。该程序已经太破坏而无法继续。这首先阻止了SIGSEGV,这意味着修复你的代码。

你能做的最好的事情就是确定程序崩溃的原因。最简单的方法是使用whatever debugger came with your development environment运行程序,等待崩溃,然后检查回溯以获取有关程序如何满足其厄运的提示。

通常情况下,可以在此处找到Eric Lippert's How to debug small programs的链接,我无法想出将其排除在外的充分理由。

另一件事是。 cURL是一个非常可靠的库。如果您使用错误或传递错误信息,则赔率非常高:死指针,未终止的C风格字符串,指向爆炸性功能的指针。我首先看一下你如何使用cURL。

答案 1 :(得分:0)

不,不是。相反,修复错误并以这种方式防止分段错误。大概你的平台提供某种调试器。