У нас довольно большая кроссплатформенная программа на C ++, работающая на wxWidgets. Недавно большая часть кода была перенесена из windows в linux, и с тех пор программа вылетает при отображении всплывающего диалога. Сообщение об ошибке, выводимое на консоль:
The program 'program name' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadAlloc (insufficient resources for operation)'.
(Details: serial 12425 error_code 11 request_code 53 minor_code 0)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)
libxcb: WARNING! Program tries to lock an already locked connection,
which indicates a programming error.
There will be no further warnings about this issue.
Проходя по коду с помощью отладчика, выглядят следующие строки:
wxBitmap* maskBmp = new wxBitmap(iconPath, wxBITMAP_TYPE_BMP);
wxMask* mask = new wxMask(*maskBmp, wxColour(255, 0, 255));
После второй строки вылетает. Кажется, что растровые изображения загружаются правильно, так как те же значки используются в других местах на панели инструментов без проблем. Я попытался отладить с помощью «--sync», как следует из сообщения об ошибке, но, похоже, это не очень помогает, так как gdb не может поставить точку останова на функцию gdk_x_error ().
Есть идеи о том, откуда может исходить ошибка, или, по крайней мере, как ее отследить?
Спасибо
ОБНОВЛЕНИЕ: обратите внимание, что я получаю журнал ошибок утверждений xWindows, таких как:
(main:5322): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(main:5322): Gdk-CRITICAL **: gdk_drawable_get_image: assertion `GDK_IS_DRAWABLE (drawable)' failed
(main:5322): Gdk-CRITICAL **: gdk_image_get_colormap: assertion `GDK_IS_IMAGE (image)'failed
(main:5322): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
но это, кажется, происходит постоянно, даже когда программа работает хорошо!