[版权声明] 本站内容采用 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆 (CC BY-NC-SA 3.0 CN) 进行许可。
部分内容和资源来自网络,纯学习研究使用。如有侵犯您的权益,请及时联系我,我将尽快处理。
如转载请注明来自: Broly的博客,本文链接: Clion开发QT5下(GDB)调试打印QString
之前用QT5开发过一个桌面小应用,后来就没怎么用了。最近又有个新东西要折腾,所以要拾起来搞搞。
开发环境用的是Clion,这家公司的IDE就是好用呐。如何用Clion开发QT具体参考我前面的博文:《Clion+Qt5环境搭建》
用Clion开发QT5会有个麻烦,就是QT自带的类不容易调试,比如QString,你期待能直接看到个字符串,然后调试模式下,看到的却是内存地址。
有几个简陋的解决方法,比如GUI模式下QMessage打印字符串,非GUI模式下用qDebug()打印字符串。虽然简单,但是引入更多冗余代码。
也有网友向Clion发起投票希望能改进这方面功能,但是目前还没改善:https://youtrack.jetbrains.com/issue/CPP-605
所以最后还是自己动手丰衣足食吧。
首先说说我的解决思路:Clion调试C++是可以选开发调试环境的,可选项有MSVC、MinGW 、CYGWIN等。安装QT5时,会附带一个可选MINGW环境,我安装了这个环境,搭配Clion编译调试QT。
其实就是用MinGW 环境的GDB工具调试QT,所以找到GDB打印QString的方法即可。
GDB可以通过.gdbinit文件扩展自定义调试方法,网上提供的方案就是通过这种形式把QString打印出来。
具体步骤:
一、测试环境
OS: windows 8/10
我安装的是目前最新版本的QT5.12,在安装的时候有个步骤是选择组件,勾选Tools中的MinGW 7.3.0 64bit,待会用到这个环境的开发工具如g++,gdb等。比如我安装在D盘,D:\Qt\Qt5.12.0\Tools\mingw730_64
打开Clion,点击菜单,File | Settings | Build, Execution, Deployment | Toolchains,
然后新建一个MinGW配置并放置在最上面,填入MinGW Home路径,即D:\Qt\Qt5.12.0\Tools\mingw730_64,确定。
二、配置.gdbinit
在个人用户目录,因为我使用的是windows8/10,所以这个目录是:C:\Users\[username]
新建文件.gdbinit,由于我使用的是windows系统,所以要生成带点的文件,必须借助命令行工具:
1 |
C:\Users\Broly>echo. 2> ".gdbinit" |
编辑.gdbinit文件,填入如下内容保存:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
define printqs5 set $d=$arg0.d printf "(Qt5 QString)0x%x length=%i: \"",&$arg0,$d->size set $i=0 set $ca=(const ushort*)(((const char*)$d)+$d->offset) while $i < $d->size set $c=$ca[$i++] if $c < 32 || $c > 127 printf "\\u%04x", $c else printf "%c" , (char)$c end end printf "\"\n" end printf ".gdbinit loaded.\n" |
三、添加环境变量
gdb在启动的时候会查找${HOME}/.gdbinit,如果存在则载入。
所以下一步即要增加或者修改HOME环境变量,并把路径设置成.gdbinit的目录,如本文中的C:\Users\Broly
然后注销或者重启使环境变量生效。
四、测试使用
启动Clion,在代码中下断点,并运行调试程序。在断点停下来出,进入gdb界面,如果看到了有提示信息“.gdbinit loaded.”,说明已经加载了.gdbinit。
然后在gdb命令行,打印QString字符串,比如我的QString变量名为qs,则
1 2 |
(gdb) printqs5 qs (Qt5 QString)0x91fc48 length=6: "foobar" |
嗯,看起来是已经完成了。
参考链接:《在gdb中显示QString》