环境:
系统
Ubuntu 16.04LTS
Qt版本 Qt4.8.7 自己
编译的debug版本
编译器 clang 3.8
调试器 gdb 7.11.1
问题:
我有分别用clang和gcc编译Qt,之后写了一个简单的测试程序:(描述时直接用gcc和clang代替g++和clang++了)
- #include <QString>
- 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默认关闭的?望各位网友指教一二。