如何捕获LibRabbitMQ相关异常?C++程序异常处理求助
LibRabbitMQ异常处理与断点设置问题
背景
我正在开发一个与RabbitMQ交互的C++程序,RabbitMQ以Windows服务形式部署在远程机器上,程序通过VCPKG使用LibRabbitMQ库。
问题现象
我使用以下代码从队列中获取消息:
__try { reply = amqp_consume_message(connection, envelope, timeout, 0); } __except (EXCEPTION_EXECUTE_HANDLER)
这段代码无法正常工作,程序弹出“未指定错误”提示框。此前我尝试过try ... catch()结构,同样无法捕获异常。
由于amqp_consume_message(...)被持续调用,我无法直接在该函数上设置断点。
出现错误对话框时,调用栈如下:
ntdll.dll!_NtWaitForSingleObject@12() Unknown mswsock.dll!SockWaitForSingleObject() Unknown mswsock.dll!_WSPSelect@24() Unknown ws2_32.dll!select() Unknown > rabbitmq.4.dll!amqp_poll(int fd, int event, amqp_time_t_ deadline) Line 216 C rabbitmq.4.dll!recv_with_timeout(amqp_connection_state_t_ * state, amqp_time_t_ timeout) Line 673 C rabbitmq.4.dll!wait_frame_inner(amqp_connection_state_t_ * state, amqp_frame_t_ * decoded_frame, amqp_time_t_ timeout_deadline) Line 785 C rabbitmq.4.dll!amqp_simple_wait_frame_noblock(amqp_connection_state_t_ * state, amqp_frame_t_ * decoded_frame, const timeval * timeout) Line 930 C rabbitmq.4.dll!amqp_consume_message(amqp_connection_state_t_ * state, amqp_envelope_t_ * envelope, const timeval * timeout, int flags) Line 122 C librabbitmq_tester.exe!SafeConsumeMessage(amqp_connection_state_t_ * connection, amqp_envelope_t_ * envelope, const timeval * timeout, unsigned long * pExceptionCode) Line 33 C++ librabbitmq_tester.exe!CRabbitMQWrapper::ListenerThreadProc() Line 460 C++ [Inline Frame] librabbitmq_tester.exe!std::invoke(void(CRabbitMQWrapper::*)() &&) Line 1686 C++ librabbitmq_tester.exe!std::thread::_Invoke<std::tuple<void (__thiscall CRabbitMQWrapper::*)(void),CRabbitMQWrapper *>,0,1>(void * _RawVals) Line 61 C++ ucrtbased.dll!thread_start<unsigned int (__stdcall*)(void *),1>(void * const parameter) Line 97 C++ kernel32.dll!@BaseThreadInitThunk@12() Unknown ntdll.dll!___RtlUserThreadStart@8() Unknown ntdll.dll!__RtlUserThreadStart@8() Unknown
疑问
- 我该如何进行异常处理?
- @Jarod42,你建议我如何修改断点设置?
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

