• 3805阅读
  • 0回复

[提问]Linux下clang调试Qt源码问题 [复制链接]

上一主题 下一主题
离线mr_e9
 

只看楼主 倒序阅读 楼主  发表于: 2016-07-19
环境:
系统     Ubuntu 16.04LTS
Qt版本 Qt4.8.7 自己编译的debug版本
编译器 clang 3.8
调试器 gdb 7.11.1

问题
我有分别用clang和gcc编译Qt,之后写了一个简单的测试程序:(描述时直接用gcc和clang代替g++和clang++了)
  1. #include <QString>
  2. int main()
  3. {
  4.     QString str = "123";
  5.     return 0;
  6. }
然后又分别用gcc和clang编译测试程序,然后单步调试进QString的构造函数
  1. inline QT_ASCII_CAST_WARN_CONSTRUCTOR QString(const char *ch) : d(fromAscii_helper(ch))
  2.     {}
我发现如果测试程序是由clang编译,那么断点会停在第2行,再次单步则返回main函数;另外如果在fromAscii_helper函数中打上断点,那么调试时就能单步进fromAscii_helper,之后才会到QString的构造函数,感觉像是用clang编译时,调试会忽略掉一些Qt的函数(如例子中的fromAscii_helper)
而如果测试程序由gcc编译,那么断点会停在第1行,再次单步则直接会进入fromAscii_helper函数(不需要中fromAscii_helper中打断点)。

同时这个结果与Qt本身用什么编译无关,只与测试程序用什么编译有关,这与我的预期正好相反。有比对过编译时的参数,发现也是一样的,百思不得其解,在网上也没有找到相关资料
所以究竟是gcc和clang本身的差异?还是说在编译时有的参数gcc默认打开,而clang默认关闭的?望各位网友指教一二。
快速回复
限100 字节
 
上一个 下一个