gpt4 book ai didi

c++ - 如何阻止来自 cURL 库的 Qt 应用程序信号 SIGSEGV?

转载 作者:行者123 更新时间:2023-11-30 19:08:33 25 4
gpt4 key购买 nike

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

最佳答案

TL;博士:

不要尝试阻止或忽略 SIGSEGV。它只会给你带来痛苦。

说明:

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

请原谅我的加拿大人。

你的程序坏了。您不能再相信它会以任何理性的方式运行,并且实际上应该感谢 SIGSEGV 让您知道这一点。尽管您不想看到 SIGSEGV,但这比损坏的程序继续运行并输出错误信息要好得多。

您可以使用信号处理程序捕获 SIGSEGV,但假设您确实捕获并尝试处理它。可能性是程序会立即返回到触发 SIGSEGV 的代码,并且很可能在信号处理程序后再次引发它。或者做一些其他奇怪的事情。可能还有更糟糕的事情。

实际上甚至不值得用信号处理程序捕获 SIGSEGV 来尝试输出消息,因为消息会说什么? “噢,蓝 Sprite 。发生了非常糟糕的事情。”?

所以,是的,你可以捕获它,但你无法做任何事情来恢复。该程序已经损坏得太严重而无法继续。这就需要首先阻止 SIGSEGV,这意味着修复您的代码。

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

通常是指向 Eric Lippert's How to debug small programs 的链接就在这里就能找到,我想不出有什么好理由把它排除在外。

不过还有一件事。 cURL 是一个非常可靠的库。您错误使用它或向其传递错误信息的可能性非常大:死指针、未终止的 C 风格字符串、指向爆炸性函数的指针。我首先看看您如何使用 cURL。

关于c++ - 如何阻止来自 cURL 库的 Qt 应用程序信号 SIGSEGV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45022165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com