如果你用过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. 再转一篇gtest1.6安装

    http://www.cppblog.com/izualzhy/archive/2012/07/31/185772.html googletest是一个用来写C++单元测试的框架,它是跨平台的,可应用 ...

  2. 不知道算不算另类的ASP.NET MVC4 Ajax分页

    以往用Ajax来实现无刷新分页,用户一按F5,页数就记不住了,点了一个链接也是同一个问题,再想回退回来,就回到第一页了.上次看到一篇文章,说到window.location.hash的用途,于是萌生了 ...

  3. Android Studio Gradle Running报错:Failed to complete Gradle execution.

    错误信息如下图所示: 重启AndroidStudio问题解决.

  4. 【转】Win7与Ubuntu 14.04双系统修改启动项顺序

    原文网址:http://blog.sina.com.cn/s/blog_b381a98e0102v1gy.html 一.Ubuntu14.04采用默认安装方式的情况 采用默认安装方式,在win7下安装 ...

  5. Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统

  6. 学习phpcms模板方法:

    1.改官方模板,读里面的代码,改改它,看看有什么变化,如果不明白,去官方论 坛.查手册.专业人士还可以看数据库.2.复制实例代码,整理笔记,到实战的时候,就直接复制,改改参数即可.

  7. AJAX上传文件

    function up_files() { var fileSelect = document.getElementById('file-select'); var files = fileSelec ...

  8. (转)iOS Wow体验 - 第二章 - iOS用户体验解析(1)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第一部分,其余章节将陆续放出.上一 ...

  9. POJ 3450 Corporate Identity (KMP+暴搞)

    题意: 给定N个字符串,寻找最长的公共字串,如果长度相同,则输出字典序最小的那个. 找其中一个字符串,枚举它的所有的字串,然后,逐个kmp比较.......相当暴力,可二分优化. #include & ...

  10. Excel函数大全

    我们在使用Excel制作表格整理数据的时候,经常要用到它的函数功能来自己主动统计处理表格中的数据.这里整理了Excel中使用频率最高的函数的功能.用法,以及这些函数在实际应用中的实例剖析,并配有具体的 ...