Неприятная проблема с Dbus - ошибка dbus_connection_send - PullRequest
0 голосов
/ 24 ноября 2011

Я новичок в DBus и написал пример приложения на dbus, но столкнулся со странной проблемой. Мое приложение отлично работает на гостевой ОС под Ubuntu (на виртуальной коробке с хостом Windows), но то же самое приложение не работает на автономной системе Ubuntu (также пробовал на meego, но тоже не повезло).

Затем я проверил очевидные сомнения относительно версий библиотек dbus, glib. Это одинаково на обеих средах, и проблема является последовательной. Я имею в виду, что приложение всегда работает без каких-либо проблем на виртуальной коробке и всегда вылетает на автономной Ubuntu.

Вот краткое описание вопроса.

  1. Приложение должно отправлять 150 сигналов на dbus, а другое приложение получать эти сигналы. (Здесь нет проблем при отправке и получении).
  2. У меня есть массив DbusMessage [150] (также пробовал со списком 150 DBusMessage) ... добавление аргументов к сообщению dbus и отправка на шину .. один за один раз ... без зацикливания. ..
  3. Последовательность API-интерфейсов dbus верна и проверена путем ссылки на несколько примеров исходного кода.
  4. Все вышеперечисленное прекрасно работает, но в автономной системе Ubuntu я всегда вижу ошибку сегментации при вызове dbus_connection_send ().
  5. Я перепроверил все возможные места, где могут происходить "ошибки сегмента", и все это выглядит хорошо для меня. Вот как я добавляю свой arg к сообщению dbus.

    dbus_message_append_args(pDbusMsg, DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &pData, sizeof(pData), DBUS_TYPE_INVALID) != TRUE)

затем соединение отправьте .. а затем calling dbus_connection_flush(). Кроме того, так как мое приложение должно отправлять то же сообщение снова (но не сразу), я повторно регистрирую тот же сигнал, вызывая dbus_message_new_signal() .. Я проверил все указатели / memory / dbusmessage..все выглядит нормально и работает нормально виртуализированная ОС Ubuntu.

Просто добавлю, я попытался отправить с dbus_connection_send_preallocated(), и он отлично работает для нескольких сообщений (10-15 ~), но недостаточно согласованно.

У вас когда-нибудь возникала такая проблема, пожалуйста, дайте мне знать любую подсказку, чтобы решить эту проблему .... Буду признателен за любую помощь или любые примеры / учебники, учитывая, что я только начинаю с dbus: P

Спасибо

1 Ответ

0 голосов
/ 05 января 2012

Я не знаю, слышали ли вы об инструментах отладки, связанных с dbus.Для начала вы можете попробовать вызвать открытые функции с помощью некоторого dbus-debugging-tool.Если при вызове с использованием инструмента ошибка сегментации не возникает, вероятно, вам следует искать проблемы в своем коде.В противном случае вам следует проверить вещи, связанные с окружением.

Один из таких инструментов - DFeet

Другой такой отладчик (на основе командной строки) также предоставляется людьми из Qt.*

...