标题:Linux下clang调试Qt源码问题
作者:mr_e9
日期:2016-07-19 16:21
内容:
环境:
系统 Ubuntu 16.04LTS
Qt版本 Qt4.8.7 自己编译的debug版本
编译器 clang 3.8
调试器 gdb 7.11.1
问题:
我有分别用clang和gcc编译Qt,之后写了一个简单的测试程序:(描述时直接用gcc和clang代替g++和clang++了)
#include
int main()
{
QString str = "123";
return 0;
}然后又分别用gcc和clang编译测试程序,然后单步调试进QString的构造函数
inline QT_ASCII_CAST_WARN_CONSTRUCTOR QString(const char *ch) : d(fromAscii_helper(ch))
{}我发现如果测试程序是由clang编译,那么断点会停在第2行,再次单步则返回main函数;另外如果在fromAscii_helper函数中打上断点,那么调试时就能单步进fromAscii_helper,之后才会到QString的构造函数,感觉像是用clang编译时,调试会忽略掉一些Qt的函数(如例子中的fromAscii_helper)
而如果测试程序由gcc编译,那么断点会停在第1行,再次单步则直接会进入fromAscii_helper函数(不需要中fromAscii_helper中打断点)。
同时这个结果与Qt本身用什么编译无关,只与测试程序用什么编译有关,这与我的预期正好相反。有比对过编译时的参数,发现也是一样的,百思不得其解,在网上也没有找到相关资料。
所以究竟是gcc和clang本身的差异?还是说在编译时有的参数gcc默认打开,而clang默认关闭的?望各位网友指教一二。