Dbus - 没有收到回复
Dbus - Did not receive a reply
我对 Dbus 有一个奇怪的问题...
我用的是Dbus-1.
问题是,它只是有时发生在不同的地方。
有时 IDAMsg_GetFontName,有时 IDAMsg_GetForeColor(例如)。
也许程序运行十次正常,然后有一次出错。或者四次正常,然后两次错误。
但是我的 std::cout 和 Dbus:
总是出现相同的错误信息
Too few arguments
和
Did not receive a reply
但是我怎么有时候论据太少了呢?
以及如何给 Dbus 这个错误消息,就像它看起来的那样,回复已发送并收到?
非常感谢您的帮助。
TIA
早期
Dbus 消息是:
Did not receive a reply. Possible causes include: the remote
application did not send a reply, the message bus security policy
blocked the reply, the reply timeout expired, or the network
connection was broken.
发送方法:
if(vMethod == IDAMsg_Init || vMethod == IDAMsg_GetFontName
|| vMethod == IDAMsg_AppQuit
|| vMethod == IDAMsg_GetBackColor || vMethod == IDAMsg_GetForeColor
|| vMethod == IDAMsg_GetBorderColor){
dbus_message_iter_init_append(msg, &args);
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &vMsg.Str_Send[0])) {
cout << "DBUS -- SEND -- OUT OF MEMORY 1" << endl; return 0;
}
if(vMethod == IDAMsg_GetBorderColor || vMethod == IDAMsg_AppQuit){
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &vMsg.Str_Send[1])) {
cout << "DBUS -- SEND -- OUT of Memory 2" << endl; return 0;
}
}
}
回复是:
if(vMethod == IDAMsg_Init || vMethod == IDAMsg_AppQuit
|| vMethod == IDAMsg_GetFontName
|| vMethod == IDAMsg_GetBackColor || vMethod == IDAMsg_GetForeColor
|| vMethod == IDAMsg_GetBorderColor){
if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args)){
cout << "DBUS -- REPLY -- ARG is not String 1 " << endl;
} else {
dbus_message_iter_get_basic(&args, &nStr_In[0]);
}
if(vMethod == IDAMsg_GetBorderColor || vMethod == IDAMsg_AppQuit){
if (!dbus_message_iter_next(&args)){
cout << "DBUS -- REPLY -- Message has too few arguments 1" << endl;
} else if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args)){
cout << "DBUS -- REPLY -- Argument is not STRING 2" << endl;
} else {
dbus_message_iter_get_basic(&args, &nStr_In[1]);
}
}
reply = dbus_message_new_method_return(msg);
dbus_message_iter_init_append(reply, &args);
}
if(vMethod == IDAMsg_Init){
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_BOOLEAN, &stat)) {
cout << "DBUS -- REPLY -- OUT of Memory 1" << endl; return;
}
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT32, &level)) {
cout << "DBUS -- REPLY -- OUT of Memory 2" << endl; return;
}
}
std::cout正常输出是:
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetForeColor
DBUS -- IDABrowse -- Got Reply 245_245_245 21614
IDA -- IDABrowse -- INCOMING CALLBACK : GetBorderColor
DBUS -- IDABrowse -- Request send with : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABrowse -- Got Reply 102_143_165 21614
IDA -- IDABrowse -- INCOMING CALLBACK : GetBorderColor
DBUS -- IDABrowse -- Request send with : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABrowse -- Got Reply 126_177_204 21614
IDA -- IDABrowse -- INCOMING CALLBACK : GetBorderColor
DBUS -- IDABrowse -- Request send with : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABrowse -- Got Reply 148_207_239 21614
但如果出现问题,它看起来像这样:
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetForeColor
DBUS -- IDABase -- Got Reply 245_245_245 21614
IDA -- IDABase -- INCOMING CALLBACK : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABase -- Request send with : GetBorderColor
DBUS -- SEND -- Message has too few arguments 1
DBUS -- IDABase -- Got Reply Did not receive a reply. Possible
causes include: the remote application did not send a reply, the
message bus security policy blocked the reply, the reply timeout
expired, or the network connection was broken. 32723
编辑:
我认为问题是这样显示的:
这是正常的输出顺序:
IDA -- IDABrowse -- INCOMING CALLBACK : GetBorderColor
DBUS -- IDABrowse -- Request sending with : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABrowse -- Got Reply 126_177_204 21614
发生错误时:
IDA -- IDABrowse -- INCOMING CALLBACK : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABrowse -- Request sending with : GetBorderColor
DBUS -- IDABrowse -- Got Reply 126_177_204 21614
如果错误,第 2 行和第 3 行已更改。
然后,回复存在 before request sending...
调试方法是使用dbus-monitor
or Bustle查看总线上的流量(请求、回复、错误)。这应该可以查明错误并向您显示导致错误的消息。
我对 Dbus 有一个奇怪的问题...
我用的是Dbus-1.
问题是,它只是有时发生在不同的地方。
有时 IDAMsg_GetFontName,有时 IDAMsg_GetForeColor(例如)。
也许程序运行十次正常,然后有一次出错。或者四次正常,然后两次错误。
但是我的 std::cout 和 Dbus:
总是出现相同的错误信息Too few arguments
和
Did not receive a reply
但是我怎么有时候论据太少了呢?
以及如何给 Dbus 这个错误消息,就像它看起来的那样,回复已发送并收到?
非常感谢您的帮助。
TIA
早期
Dbus 消息是:
Did not receive a reply. Possible causes include: the remote
application did not send a reply, the message bus security policy
blocked the reply, the reply timeout expired, or the network
connection was broken.
发送方法:
if(vMethod == IDAMsg_Init || vMethod == IDAMsg_GetFontName
|| vMethod == IDAMsg_AppQuit
|| vMethod == IDAMsg_GetBackColor || vMethod == IDAMsg_GetForeColor
|| vMethod == IDAMsg_GetBorderColor){
dbus_message_iter_init_append(msg, &args);
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &vMsg.Str_Send[0])) {
cout << "DBUS -- SEND -- OUT OF MEMORY 1" << endl; return 0;
}
if(vMethod == IDAMsg_GetBorderColor || vMethod == IDAMsg_AppQuit){
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &vMsg.Str_Send[1])) {
cout << "DBUS -- SEND -- OUT of Memory 2" << endl; return 0;
}
}
}
回复是:
if(vMethod == IDAMsg_Init || vMethod == IDAMsg_AppQuit
|| vMethod == IDAMsg_GetFontName
|| vMethod == IDAMsg_GetBackColor || vMethod == IDAMsg_GetForeColor
|| vMethod == IDAMsg_GetBorderColor){
if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args)){
cout << "DBUS -- REPLY -- ARG is not String 1 " << endl;
} else {
dbus_message_iter_get_basic(&args, &nStr_In[0]);
}
if(vMethod == IDAMsg_GetBorderColor || vMethod == IDAMsg_AppQuit){
if (!dbus_message_iter_next(&args)){
cout << "DBUS -- REPLY -- Message has too few arguments 1" << endl;
} else if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&args)){
cout << "DBUS -- REPLY -- Argument is not STRING 2" << endl;
} else {
dbus_message_iter_get_basic(&args, &nStr_In[1]);
}
}
reply = dbus_message_new_method_return(msg);
dbus_message_iter_init_append(reply, &args);
}
if(vMethod == IDAMsg_Init){
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_BOOLEAN, &stat)) {
cout << "DBUS -- REPLY -- OUT of Memory 1" << endl; return;
}
if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_UINT32, &level)) {
cout << "DBUS -- REPLY -- OUT of Memory 2" << endl; return;
}
}
std::cout正常输出是:
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetForeColor
DBUS -- IDABrowse -- Got Reply 245_245_245 21614
IDA -- IDABrowse -- INCOMING CALLBACK : GetBorderColor
DBUS -- IDABrowse -- Request send with : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABrowse -- Got Reply 102_143_165 21614
IDA -- IDABrowse -- INCOMING CALLBACK : GetBorderColor
DBUS -- IDABrowse -- Request send with : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABrowse -- Got Reply 126_177_204 21614
IDA -- IDABrowse -- INCOMING CALLBACK : GetBorderColor
DBUS -- IDABrowse -- Request send with : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABrowse -- Got Reply 148_207_239 21614
但如果出现问题,它看起来像这样:
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetForeColor
DBUS -- IDABase -- Got Reply 245_245_245 21614
IDA -- IDABase -- INCOMING CALLBACK : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABase -- Request send with : GetBorderColor
DBUS -- SEND -- Message has too few arguments 1
DBUS -- IDABase -- Got Reply Did not receive a reply. Possible
causes include: the remote application did not send a reply, the
message bus security policy blocked the reply, the reply timeout
expired, or the network connection was broken. 32723
编辑:
我认为问题是这样显示的:
这是正常的输出顺序:
IDA -- IDABrowse -- INCOMING CALLBACK : GetBorderColor
DBUS -- IDABrowse -- Request sending with : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABrowse -- Got Reply 126_177_204 21614
发生错误时:
IDA -- IDABrowse -- INCOMING CALLBACK : GetBorderColor
DBUS -- EBIDA_IDA_Server -- Method Reply for : GetBorderColor
DBUS -- IDABrowse -- Request sending with : GetBorderColor
DBUS -- IDABrowse -- Got Reply 126_177_204 21614
如果错误,第 2 行和第 3 行已更改。
然后,回复存在 before request sending...
调试方法是使用dbus-monitor
or Bustle查看总线上的流量(请求、回复、错误)。这应该可以查明错误并向您显示导致错误的消息。