【问题标题】:REDHAWK component debuggingREDHAWK 组件调试
【发布时间】:2017-05-15 13:20:43
【问题描述】:

我无法进行调试。

我正在使用 2.1.0 版本的 REDHAWK,我正在尝试创建自定义组件。

我可以让发布版本运行和工作。

这就是我所做的,我创建了一个非常基本的自定义组件,它接受输入,将其乘以 2 并将其推送到输出流,非常简单。现在我尝试在沙盒中以调试模式运行这个组件,瞬间崩溃。我唯一能看到的是调用堆栈的最后一个条目,即

boost::shared_ptr<rh_logger::Logger>::operator->() at shared_ptr.hpp:653

如果我选择在不调试的情况下运行我的组件,那么一切正常。它甚至可以进行乘法运算。

我不知道发生了什么,显然这个智能指针类做了一个断言检查来验证它返回的指针并最终崩溃,因为它是零。作为 -> 运算符,这似乎很危险。 SIGSEGV 是抛出的错误,我想知道 BOOST_ASSERT 是否会导致失败?


操作系统是 CentOS 7 64 位,运行在普通桌面英特尔处理器上,不记得是哪个。

我按照 REDHAWK 手册 2.2 部分的说明通过下载存储库来安装 REDHAWK。

新组件是使用 REDHAWK IDE(基于 Eclipse)创建的,我选择 C++ 作为程序语言。它似乎是一个共享库,当我运行它时,会启动一个名为 ComponentHost 的进程。

我正在尝试通过右键单击“项目”菜单中的组件并选择“调试为 - 沙盒中的组件”来启动沙盒中的组件。以这种方式在 Release 模式下运行组件是可行的。

【问题讨论】:

  • 这东西对我来说真的是在扼杀REDHAWK。我遇到了一些代码问题,导致它崩溃。

标签: redhawksdr


【解决方案1】:

我可以通过 Python 沙箱调试组件,因此只需几个变量来帮助缩小范围,我的测试系统位于 []:

  1. 哪个操作系统? [CentOS 7]
  2. REDHAWK 是从源代码还是 RPM 安装的? [RPM]
  3. 这是一个新的基于 C++ 共享库的组件(入口点类型是“SharedLibrary”)还是可执行文件(“Executable”)? [两者]
  4. 如何启动组件?通过 Python 沙箱,使用“debugger='gdb'”作为启动参数?还有其他启动参数吗?

另一种可能的调试方法是正常启动组件,然后从另一个终端窗口附加 GDB。

首先,找到组件进程:

  • 如果是共享库:

    ps -o pid,comm -C ComponentHost

  • 如果它是可执行文件(其中“”是组件可执行文件的名称):

    ps -o pid,cmd -C &lt;name&gt;

希望您清楚哪个进程是您的目标组件。如果您在同一个沙箱中运行多个共享库组件,它们都将属于同一个 ComponentHost 实例。

然后,使用 GDB 附加到进程:

gdb -p &lt;pid&gt;

这本质上是沙盒附加 GDB 的方式;但是,独立运行它允许您在附加调试器之前先根据自己的喜好设置流程。

【讨论】:

  • 是的,我想过这样做。我想我可能会使用 KDevelop 来进行调试,因为它为 gdb 提供了一个简洁的前端。我什至可以把它变成一个可运行的东西,通过让启动调用所需的python命令来启动沙箱中的组件。
  • (从您在其他用户线程中的链接签入。)我没有前进到 REDHAWK 2.1,因为它是一个预发布版(根据the repo 的标签,所以只是一个头脑上)。
猜你喜欢
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多