我的程序有时(低概率)因以下信息回溯而崩溃:
Error: signal 11:
/ri/flamingo_console(_Z7handleri+0x174)[0x884a14]
/lib/libc.so.6(__default_sa_restorer_v2+0x0)[0xb5d3de60]
/lib/libc.so.6(memcpy+0x74)[0xb5d94124]
/ri/Qt5.5/lib/libQt5Core.so.5(_ZN7QString11reallocDataEjb+0x8c)
[0xb60f2f68]
/ri/Qt5.5/lib/libQt5Gui.so.5(+0x2f2284)[0xb6923284]
/ri/flamingo_console[0x5f75a8]
/ri/flamingo_console[0x54f6e4]
我使用addr2line的工具,并在以下函数中找到0x5f75a8的文本地址:
void RElementStyle::drawText( QPainter &painter,
const QRect &rect,
const QString &str,
Qt::AlignmentFlag align )
{
painter.save();
painter.setPen( mCommon.getColor( mStatus, str) );
//! font
QFont font = qApp->font();
font.setPointSize( mCommon.mContentFont.mSize );
painter.setFont( font );
painter.drawText( rect,
align | Qt::AlignVCenter,
str );
painter.restore(); //! this is the crash line 0x54f6e4
}
我学习了一些关于painter.restore()的东西,并且我知道恢复()会弹出画家的设置。但是,我无法理解为什么恢复会导致段故障。有人可以帮我分析一下吗?非常感谢。