我正在使用 zeromqpp
将数据发送到另一个进程。我已经成功地将zeromqpp
与其他信号一起使用了但是我的最后一条消息被添加到生产者我经常得到运行时断言:
zmqpp::frame::~frame()68: assertion "0 == result" failed
消费者程序永远不会得到错误,只有生产者,它会导致生产者程序崩溃。如果我删除发布消息的代码,那么我就不会看到断言。
zeromq
服务器不会报告任何错误。 GDB
没有给我一个堆栈跟踪,并且在多个程序执行期间断言并不会同时发生,因此我很难跟踪问题所在。我已经开始评论大部分代码以试图缩小范围,但我仍然对问题的原因感到迷茫。
任何人都可以告诉我这个断言错误意味着什么,所以我可以缩小要查找的内容吗?
这是第0步。
signalProducer_->publish(SIGNAL_NAME, producerData, 1, VALID_SIGNAL_DATA);
答案 0 :(得分:0)
也发布了实际开始产生问题的代码,请参阅您自己的文字
cit。:“如果我删除发布消息的代码,那么我就看不到断言。”
Review the ZeroMQ
low-level API documentation,而不是实际使用的c++
包装器/绑定实现,预先设计的详细信息对错误原因的识别&在最低级别区分,以便实现和理解在特定API服务调用中出现可能的根本原因:
如果成功,
zmq_send()
函数将返回消息中的字节数。否则,它将返回-1
并将 errno 设置为以下定义的值之一。
<强>错误强>
EAGAIN
请求了非阻止模式,此时无法发送消息。
ENOTSUP
{此套接字类型不支持{1}}操作。
zmq_send()
此时无法在此套接字上执行EFSM
操作套接字未处于适当的状态。对于在多个状态(例如zmq_send()
)之间切换的套接字类型,可能会发生此错误。有关详细信息,请参阅ZMQ_REP
的消息传递模式部分。
zmq_socket(3)
与指定套接字关联的ØMQ上下文已终止。
ETERM
提供的套接字无效。
ENOTSOCK
操作因交付邮件发送前发出信号。
EINTR
邮件无法路由。
EHOSTUNREACH