我无法调试工作。
我正在使用REDHAWK的2.1.0版本,我正在尝试创建自定义组件。
我可以获得发布版本来运行和工作。
这就是我所做的,我创建了一个非常基本的自定义组件,它接受输入,将它乘以2并将其推送到输出流,非常简单。现在我尝试在沙盒中以调试模式运行此组件,即时崩溃。我唯一能看到的是callstack的最后一个条目,即
boost::shared_ptr<rh_logger::Logger>::operator->() at shared_ptr.hpp:653
如果我选择在没有调试的情况下运行我的组件,一切正常。它甚至可以实现倍增。
我不知道发生了什么,显然这个智能指针类会进行断言检查以验证它返回的指针并最终崩溃,因为它为零。成为 - &gt;操作员,这似乎很危险。 SIGSEGV是抛出的错误,我想知道BOOST_ASSERT是否会导致失败?
操作系统是CentOS 7 64位并且它在常规桌面intel处理器上运行,不记得是哪一个。
我按照REDHAWK手册2.2部分的说明下载了存储库,安装了REDHAWK。
新组件是使用REDHAWK IDE(基于eclipse)创建的,我选择C ++作为程序语言。它似乎是一个共享库,当我运行它时,会启动一个名为ComponentHost的进程。
我正在尝试通过右键单击“项目”菜单中的组件并在沙箱中选择“调试为 - 组件”来启动沙箱中的组件。以这种方式在发布模式下运行组件。
答案 0 :(得分:0)
我可以通过Python沙箱调试组件,所以只需要几个变量来帮助缩小它,我的测试系统在[]中:
另一种可能的调试方法是正常启动组件,然后从另一个终端窗口附加GDB。
首先,找到组件流程:
如果是共享库:
ps -o pid,comm -C ComponentHost
如果它是可执行文件(其中“”是组件可执行文件的名称):
ps -o pid,cmd -C <name>
希望很清楚哪个流程是您的目标组件。如果您从同一个沙箱运行多个共享库组件,它们将都是同一个ComponentHost实例的一部分。
然后,使用GDB附加到流程:
gdb -p <pid>
这实际上是沙盒如何附加GDB;但是,独立运行它允许您在连接调试器之前先根据自己的喜好设置流程。