C++ 如何阻止来自cURL库的Qt应用程序信号SIGSEGV?
我的Qt应用程序使用cURL库发送HTTP请求,有时cURL发送SIGSEGV,然后我的应用程序崩溃。C++ 如何阻止来自cURL库的Qt应用程序信号SIGSEGV?,c++,c,qt,curl,crash,C++,C,Qt,Curl,Crash,我的Qt应用程序使用cURL库发送HTTP请求,有时cURL发送SIGSEGV,然后我的应用程序崩溃。 是否可以捕捉该信号并防止分段故障 不,不是。相反,修复错误并以这种方式防止分段错误。大概您的平台提供了某种调试器。TL;博士: 不要试图阻止或忽略SIGSEGV。这只会给你带来痛苦 说明: SIGSEGV意味着发生了非常糟糕的事情,并且您的程序已经进入了不允许访问的内存。这意味着你的程序完全被水淹没了 请原谅我的加拿大人 你的程序坏了。你不能再相信它会以任何理性的方式表现,应该感谢SIGSEG
是否可以捕捉该信号并防止分段故障 不,不是。相反,修复错误并以这种方式防止分段错误。大概您的平台提供了某种调试器。TL;博士: 不要试图阻止或忽略SIGSEGV。这只会给你带来痛苦 说明: SIGSEGV意味着发生了非常糟糕的事情,并且您的程序已经进入了不允许访问的内存。这意味着你的程序完全被水淹没了 请原谅我的加拿大人 你的程序坏了。你不能再相信它会以任何理性的方式表现,应该感谢SIGSEGV让你知道这一点。虽然你不想看到SIGSEGV,但它比一个坏程序继续运行并释放虚假信息要好得多 你可以用信号处理器捕捉SIGSEGV,但是说你确实捕捉并尝试处理它。很可能程序会直接返回到触发SIGSEGV的代码中,并且很可能在信号处理程序启动后再次引发它。或者做了其他奇怪的事。可能更糟 甚至不值得用信号处理程序捕捉SIGSEGV来尝试输出消息,因为消息会说什么?“哦,蓝精灵,发生了非常糟糕的事情。” 所以,是的,你可以抓住它,但你不能做任何事情来恢复。程序已损坏,无法继续。这就把防止SIGSEGV放在了第一位,这意味着修复代码 你能做的最好的事情就是确定程序崩溃的原因。最简单的方法是使用运行程序,等待崩溃,然后检查回溯以获取有关程序如何遭遇厄运的提示 通常可以在这里找到指向的链接,我想不出什么好的理由将其忽略
不过,还有一件事。cURL是一个非常可靠的库。极有可能是您错误地使用了它或向它传递了错误信息:一个无效指针、一个未终止的C样式字符串、一个指向爆炸性函数的指针。首先,我来看看您是如何使用cURL的。实际上是另一种方式:发送SIGSEGV是因为您的应用程序崩溃了。另请参阅