我在我的c ++程序中使用第三个库,在某些情况下会发出SIGABRT信号.我知道尝试释放非初始化指针或类似的东西可能是这个信号的原因.不过,我希望在发出此信号后继续运行我的程序,以显示消息并允许用户更改设置,以便处理此信号.
(我使用QT进行开发.)
我怎样才能做到这一点?
我在我的c ++程序中使用第三个库,在某些情况下会发出SIGABRT信号
如果您有该库的源代码,则需要更正错误(错误可能在您的代码中).
BTW,可能是SIGABRT因为abort(3)被间接调用(可能是因为你违反了该库的某些约定或不变量,可能使用assert(3) - 并且间接调用abort).我想在caffe中各种CHECK*宏可以间接调用abort.我让你去调查一下.
如果您没有源代码或没有足够的时间来修复该第三方库中的该错误,您应该放弃使用该库并使用其他内容.
在许多情况下,您应该信任外部库而不是您自己的代码.可能是你滥用或滥用该库.仔细阅读其文档,并确保您自己的代码正确使用该库并尊重其不变量和约定.可能这个错误在你自己的代码中,在其他地方.
我想继续运行我的程序
这是不可能的(或非常不可靠,如此不合理).我想你的程序有一些未定义的行为.是很 害怕,并努力避免UB.
您需要提高调试技巧.更好地了解如何使用gdb调试器,Valgrind的,GCC消毒剂(如仪表选项一样-fsanitize=address,-fsanitize=undefined等),等等.
你SIGABRT原则上可以合理地不应该尝试处理(但仔细阅读信号(7),信号安全(7)和关于在Qt中处理Unix信号的提示).我强烈建议避免尝试捕捉SIGABRT.