【发布时间】:2016-06-03 02:20:15
【问题描述】:
我正在使用 zeromqpp 将数据发送到另一个进程。我已经成功地将zeromqpp 与其他信号一起使用,但是将我的最后一条消息添加到生产者后,我经常得到运行时断言:
zmqpp::frame::~frame()68: assertion "0 == result" failed
消费者程序永远不会收到错误,只有生产者会导致生产者的程序崩溃。如果我删除发布消息的代码,则看不到断言。
zeromq 服务器不报告任何错误。 GDB 没有给我堆栈跟踪,并且断言不会在多个程序执行期间同时发生,所以我很难找出问题所在。我已经开始注释掉大部分代码以试图缩小范围,但我仍然不知道问题的原因。
谁能告诉我这个断言错误是什么意思,以便我可以缩小要查找的范围?
编辑
这是第 0 步。
signalProducer_->publish(SIGNAL_NAME, producerData, 1, VALID_SIGNAL_DATA);
【问题讨论】:
-
您能否发布您的
assertSLOC + 一些“围绕”它的源代码上下文?assert至少包括:a)断言失败的表达式(result == 0),b)源文件的名称和c)它发生的行号。所以实际上 -- 您曾经“缩小要查找的范围”还有什么其他疑问? 如果您阅读了ZeroMQAPI 文档,关于此的更多详细信息如下: ZeroMQ 团队通常使用result == 0断言来检测各种可能的异常。 errno 中报告了更多详细信息。 -
@user3666197 在我的原始帖子中,我已经包含了发生断言的源文件名、类名和函数名。它在 ~frame() 中的名声.cpp 中。但是我确实忘记了行号。我现在已经添加了。
-
那么,您打算什么时候搬到
[Step 0]? -
@user3666197 我不明白你的问题“你还有什么疑问......”
-
@user3666197 添加步骤 0