Qt:慎用qDebug,小心qDebug带来的崩溃问题

不少人喜欢使用qDebug,因为方便。
本人一般不怎么使用。此次,为跟踪一个问题,随意加了一句qDebug,也没判断qDebug输出的指针是否为空。如下:

qDebug() << focusWidget() << focusWidget()->focusWidget();

问题解决之后,并没有删除此语句。很显然,这样的代码,在Release版本中仍然会执行,至少会执行到 focusWidget() 和 focusWidget()->focusWidget(),而在 << 这个运算符重载函数中,大概率才会去判断是否输出Debug日志。这里就不去翻代码了,姑且这样推测。

于是Release版本中,出现了崩溃。大概定位为此行代码的问题。

因此,程序中应该尽量不使用qDebug,如果一定要使用,应该这样:

#ifdef _DEBUG
qDebug() << focusWidget() << focusWidget()->focusWidget();
#endif

很多脚本语言输出日志,都是通过变量开关控制是否输出。而C++这样的编译型的编程语言,应该尽量避免编译Debug的代码和字符串,因为这些都会泄露程序的细节,给逆向者提供了信息。

 

转载请注明来源,谢谢。

有偿解决C++编程问题,承接项目定制开发;寻一份全职或兼职Windows C++开发工作。联系邮箱:[email protected]


老刀的技术日志 » Qt:慎用qDebug,小心qDebug带来的崩溃问题

发表评论