Как разбить на gdk_x_error() используя gdb?
Моя проблема заключается в следующем: приложение (а именно eclipse) падает на моем компьютере и показывает следующее сообщение об ошибке:
The error was 'BadWindow (invalid Window parameter)'.
(Details: serial 16911 error_code 3 request_code 3 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.)
Теперь я хочу запустить gdb, как указано в сообщении об ошибке. Тем не менее, мне не удалось, и никакой обратной трассировки не отображается.
У меня не так много опыта с отладкой. Вот что я попробовал в любом случае:
1) Активировать -dbgsym репозитории
2) Установите символы eclipse dbg (команда sudo apt-get install ^eclipse-.*dbgsym
)
3) Установить libgtk-3-0-dbg
, libgtk2.0-0-dbg
и все пакеты соответствуют ^libgdk.*dbg
4) Запустите GDB:
(gdb) file /usr/lib/eclipse/eclipse
Reading symbols from /usr/lib/eclipse/eclipse...
Reading symbols from /usr/lib/debug/.build-
id/c2/8e5f4ebdd67159093d8ee6e6daf58ab6fab94c.debug...done.
done.
(gdb) break gdk_x_error
Function "gdk_x_error" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
(gdb) run --sync
[Обновить] Я также попробовал следующее (без успеха):
1) - 3) то же, что и выше
4) Запустите GDB:
(gdb) file /usr/lib/eclipse/eclipse
Reading symbols from /usr/lib/eclipse/eclipse...
Reading symbols from /usr/lib/debug/.build-
id/c2/8e5f4ebdd67159093d8ee6e6daf58ab6fab94c.debug...done.
done.
(gdb) break main
Breakpoint 1 at 0x4010a0: file ../eclipseMain.c, line 101.
(gdb) run --sync
Starting program: /usr/lib/eclipse/eclipse --sync
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Breakpoint 1, main (argc=2, argv=0x7fffffffdf18) at ../eclipseMain.c:101
101 ../eclipseMain.c: file or directory not found.
(gdb) break gdk_x_error
Function "gdk_x_error" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
(gdb) cont
[/Обновить]
Результат:
Когда происходит сбой приложения, вывод такой же, как и выше, дополнительная информация не отображается. Я предполагаю, что мой подход неправильный, или я загрузил неправильные символы отладки. (Потому что там написано "gdk_x_error" не определено.)
[Update2] Когда я печатаю bt
после аварии он показывает мне No Stack.
[/ Обновление2]
Что я могу сделать, чтобы получить значимый след? Есть идеи?