如果你用过QtCreator,你一定会喜欢上它。

流畅的速度,强大的功能,优雅的外观,友好的界面,一切让人如此舒服。而且它支持从命令行作为调试器启动,只需加上-debug exe即可。

因此我想如果能将其作为ROS的调试器就完美了,可以秒杀一切linux下的其它C/C++调试器。

但是当前版本的QtCreator有个缺点,就是使用命令行启动调试器的时候,只能指定可执行程序,而不能为可执行程序添加参数,这使其无法作为需要配置大量参数的ROS NODE的调试器。但是这个很好解决,与Qt一样,QtCreater是开源的,我们可以下载源码自己改。

首先下载代码:

git clone git://code.qt.io/qt-creator/qt-creator.git

接下来直接贴改动的代码:

diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 504fb02..dfb1343
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -1148,7 +1148,7 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
{
const QString &option = *it;
// '-debug <pid>'
- // '-debug <exe>[,server=<server:port>][,core=<core>][,kit=<kit>][,terminal={0,1}]'
+ // '-debug <exe>[,server=<server:port>][,core=<core>][,kit=<kit>][,terminal={0,1}][,args=arg1+..+argn]'
if (*it == "-debug") {
++it;
if (it == cend) {
@@ -1195,6 +1195,13 @@ bool DebuggerPluginPrivate::parseArgument(QStringList::const_iterator &it,
rp.useTerminal = bool(val.toInt());
} else if (key == QLatin1String("kit")) {
kit = KitManager::find(Id::fromString(val));
+ } else if (key == QLatin1String("args")) {
+ if (rp.inferior.commandLineArguments.isEmpty())
+ {
+ auto rpspace = val.replace(QRegularExpression(QLatin1String("\\+\\+")), QLatin1String(" "));
+ auto rpequ = rpspace.replace(QRegularExpression(QLatin1String("\\+\\:")), QLatin1String(":="));
+ rp.inferior.commandLineArguments = rpequ;
+                  }
}
}
}

上面代码可以作为patch直接在git中apply,也可以手动改。这里的改动很简单,就是增加了一个参数叫args,该参数分隔符是加号'+',这是为了避免空格。在解析的时候将加号'+'替换为空格即可。

唯一要注意的是这里用的是正则替换,因此正则表达式中加号前面要加转义字符\,在c++的字符串中需要用两个\\表示一个实际的\。

修改完成后编译即可。漫长的等待后编译完成,会生成bin,lib,libexec,share这样几个文件夹,拷贝到任意文件夹。如果代码的版本和当前安装的qtcreator版本相同,则直接用编译出来的lib/qtcreator/plugins/libDebugger.so 替换掉当前安装的qtcreator下相同文件即可。如果代码版本与当前安装的qtcreator版本不同,则需要将当前qtcreator下的lib/Qt这个文件夹拷贝到编译生成的lib文件夹下,并从当前安装的qtcreator的bin文件夹下拷贝qt.conf到编译生成的bin文件夹下。

之后假设新的qtcreator的路径是QTDBG_ROOT,其下有bin,lib,libexec,share四个文件夹。

编写如下bash代码并保存为qtdbg-ros

#!/bin/bash

QTDBG=${QTDBG_BIN}/qtcreator.sh

PROGRAM=$
shift
ARGS=$@ EXEC=${QTDBG} if [ ! -z ${PROGRAM} ]; then
EXEC="${EXEC} -debug ${PROGRAM}"
fi if [ $# -gt ]; then
ARGS_E=",args="
for i in ${ARGS}; do
ARGS_E="${ARGS_E}++${i}"
done
ARGS_E=${ARGS_E//:=/+:}
EXEC="${EXEC}${ARGS_E}"
fi echo ${EXEC}
${EXEC}

保存后运行

chmod +x qtdbg-ros

之后即可使用

在ros工程的blabla.launch文件中为node加入launch-prefix属性:

<launch>
<arg name="debugger" default="" />
<node pkg="blabla" type="blabla_node" name="blabla" launch-prefix="$(arg debugger)">
</launch>

在bash环境下运行

roslaunch blabla blabla.launch debugger:=qtdbg-ros

enjoy.

最后附上我编译好的qtcreator,版本有点差,编了最新的master版,不是官方release的4.2版,但不影响用。

https://pan.baidu.com/s/1qY34xBY

使用QtCreator作为ROS调试器的更多相关文章

  1. 关于qtcreator+vs2008+CDB调试太卡的问题研究(载入符号表,以及VS调试器的注册表信息)

    在刚接触Qt时,对于较大的项目,用qtcreator + vs + cdb 调试时,启动很慢并且单步运行时也经常会出现卡住半分钟以上的情况,一直没有解决.在需要debug的时候大多会在vs2008上安 ...

  2. 配置QtCreator+CDB远程调试环境(要设置_NT_SYMBOL_PATH和QT_PLUGIN_PATH和Path)

    相关环境信息:开发机Win7 x64.远程机器WinXP.调试器是CDB.Qt版本5.2.1 一.部署远程机器环境 我这里用的是虚拟机(Windows XP),根据你要调试的程序选择安装不同架构的Wi ...

  3. ubuntu12.04下Qt调试器的使用

    最近,我一直在用Qt编写C++程序,但在编写过程中遇到了问题,想用Qt Creator中的调试器调试一下,但调试时(在Qt Creator中已配置好相应的调试器)出现“ ptrace:Operatio ...

  4. Qcreator3.1.2调试器(windows)版本

    环境:visual studio 2012 qt:5.3.1 默认的ms版本qtcreator只能使用visual studio的编译器,不能使用调试工具.需要gdb或者cdb进行调试,这里介绍使用的 ...

  5. 配置QtCreator+CDB远程调试环境(用到了符号表) good

    相关环境信息:开发机Win7 x64.远程机器WinXP.调试器是CDB.Qt版本5.2.1 一.部署远程机器环境 我这里用的是虚拟机(Windows XP),根据你要调试的程序选择安装不同架构的Wi ...

  6. Qt Creator配置MSVC调试器

    安装完QT后会看到Qt Creator中的MSVC构建组件带有黄色的感叹号,那是因为没有调试器的原因.由于Qt-MSVC版本套件没有默认安装调试器, 需要我们自己手动下载安装. 根据官方文档http: ...

  7. 选择目录,选择文件夹的COM组件问题。在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常。

    异常: 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的 Main 函数带有 STAThreadAttribute 标记. 只有将调试器附加到该进程才会引发此异常. ...

  8. [连载]《C#通讯(串口和网络)框架的设计与实现》- 11.调试器的设计

    目       录 第十一章     调试器设计... 2 11.1         调试接口... 2 11.2         界面方式调试... 3 11.3         命令行方式调试.. ...

  9. 带调试器(Debugger)的ILSpy(2.2.0.1738)

    2015-03-13 09:40更新: 感谢@dark89757园友提出的调试时不能查看变量的问题. 源码已修改,并提交到了github. 请查看最新发布,二进制文件和源码都在这里: 调试时可查看变量 ...

随机推荐

  1. 解决gradle:download特别慢的问题

    使用AndroidStudio 2.2.2 新增加了一个dependencies,需要下载jar包,此时就会卡在 gradle:download https://….. 这个状态中. 原因就是因为我们 ...

  2. 用JUNCTION映射文件夹内容 解决多系统跑同一个虚拟机而共享文件夹路径不同的问题

    事情由来: 某机器安装了俩系统,WIN7X64用来玩PC游戏,WIN2012R2用来工作,系统分别在两个不同的分区,但进入到系统后,两个系统的系统盘都是C盘.换句话说,在WIN7里,分区1是C盘,分区 ...

  3. codility上的问题 (23)Chi 2012

    这个题也比较有意思.意思是给定一个数组A,长度为M,里面都是正整数,代表每块地形的高度.现在要测试一种加农炮,给定一个炮弹的高度H, 如果存在最小的I,满足0 < I <  M,满足A[I ...

  4. iOS 9之New System Fonts(San Francisco 字体)

    金田 此次苹果发布的iOS 9系统测试版目前已经开放下载,新系统将弃用Helvetica字体,改用了San Francisco字体, 包括系统菜单.App名称等各个部分. 最初San Francisc ...

  5. cf493C Vasya and Basketball

    C. Vasya and Basketball time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  6. first move advantage_百度搜索

    first move advantage_百度搜索 先动优势

  7. 从有限状态机的角度去理解Knuth-Morris-Pratt Algorithm(又叫KMP算法)

    转载请加上:http://www.cnblogs.com/courtier/p/4273193.html 在开始讲这个文章前的唠叨话: 1:首先,在阅读此篇文章之前,你至少要了解过,什么是有限状态机, ...

  8. 什么是 docker?

    关于 Docker 是什么,有个著名的隐喻:集装箱.但是它却起了个“码头工人”( docker 的英文翻译)的名字.这无疑给使用者很多暗示:“快来用吧!用了 Docker ,就像世界出现了集装箱,这样 ...

  9. HDU 4444 Walk (离散化建图+BFS+记忆化搜索) 绝对经典

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给你一些n个矩形,给你一个起点,一个终点,要你求从起点到终点最少需要转多少个弯 题解:因为 ...

  10. curl 学习

    <?php // $username =13800138000; // $password =123456; // $sendto =13912345678; // $message = &qu ...