Видео смотреть бесплатно

Смотреть 365 видео

Официальный сайт mydebut 24/7/365

Смотреть видео бесплатно

02.05.10 22:33 digiwhite

Есть вопрос!Отладка Qt приложений в GDB

Есть приложение, которое я пишу на языке С++ с использованием библиотеки Qt. И возникла трудность с отладкой из под gdb.

Соответственно имеется файл с описание правил для qmake. Вот его содержимое:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

######################################################################
# Automatically generated by qmake (2.01a) ?? ???. 24 18:45:38 2010
######################################################################

TEMPLATE = app
TARGET =  
DEPENDPATH += . src
INCLUDEPATH +=  . \
                src \
                src/include
DESTDIR = obj
OBJECTS_DIR = obj
CONFIG += debug qtcore console

QMAKE_CXXFLAGS+=-ggdb -O0
QMAKE_CFLAGS+=-ggdb -O0

# Input

HEADERS +=  src/include/inky.h \
            src/pacmanconfig/pacmanconfig.h \
            src/pacmanconfig/qpacmanconfigfilter.h \
            src/config/qconfigreader.h \
            src/config/qconfiguration.h \
            src/config/qconfigparam.h \
            src/config/qconfigsection.h \
            src/config/qconfigmanager.h \
            src/config/appconfig.h \
            src/appbase/qapplicationcontroller.h \
            src/errors/qerrormarker.h \
            src/logging/qlogger.h
           

SOURCES +=  src/main.cpp \
            src/appbase/qapplicationcontroller.cpp \    
            src/pacmanconfig/qpacmanconfigfilter.cpp \
            src/config/qconfigreader.cpp \
            src/config/qconfiguration.cpp \
            src/config/qconfigparam.cpp \
            src/config/qconfigsection.cpp \
            src/config/qconfigmanager.cpp \
            src/errors/qerrormarker.cpp \
            src/logging/qlogger.cpp
 


Вся проблема в том, что не получается нормально отлаживать приложение. Выполняю запуск отладчика:
gdb inky

И на команду отладчика:
info sources

получаю следующий вывод:
1
2
3
4
5
6
7
8
9
10
11
12

(gdb) info sources
Source files for which symbols have been read in:


Source files for which symbols will be read in on demand:

/home/digiwhite/devel/inky/src/logging/qlogger.cpp, /home/digiwhite/devel/inky/src/errors/qerrormarker.cpp, /home/digiwhite/devel/inky/src/config/qconfigmanager.cpp,
/home/digiwhite/devel/inky/src/config/qconfigsection.cpp, /home/digiwhite/devel/inky/src/config/qconfigparam.cpp, /home/digiwhite/devel/inky/src/config/qconfiguration.cpp,
/home/digiwhite/devel/inky/src/config/qconfigreader.cpp, /home/digiwhite/devel/inky/src/pacmanconfig/qpacmanconfigfilter.cpp,
/home/digiwhite/devel/inky/src/appbase/qapplicationcontroller.cpp, /home/digiwhite/devel/inky/src/main.cpp
 


Далее пытаюсь выставить команду останова:
1
2
3

break `qconfiguration.cpp:QConfiguration::appendSection(QString const&)
 

Получаю:
1
2
3
4
5

Function "`qconfiguration.cpp:QConfiguration::appendSection(QString const&)" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y  
Breakpoint 1 (`qconfiguration.cpp:QConfiguration::appendSection(QString const&)) pending.
 


Хотя в файле этот метод определен совершенно точно. Об этом так же говорит следующая команда:
1
2
3
 
objdump -t inky | c++filt | grep "appendSection"
 


Вывод получаем от нее такой:
1
2
3
4

000000000040758a g     F .text  0000000000000213              QConfiguration::appendSection(QString const&)
000000000040779e g     F .text  000000000000012d              QConfiguration::appendSection(QConfigSection*)
 

Т.е. метод в объектном файле явно имеется. Ну и далее при выполнении программы из под отладчика остановки на точке останова не происходит. Пробовал указывать не по имени метода, а по номеру строки в файле с исходниками, однако результат такой же.

Вопрос, что я делаю не так? Может не с теми флагами собираю?


Теги:

pashazz 02.05.10 22:46 # +2
Юзайте Qt Creator, там есть интеграция с GDB, у меня никаких проблем не возникало.
digiwhite 02.05.10 22:52 # +0
Не хочется. Мне он не нравится. Да и в нем такая же беда по сути происходит. Короче ваше предложение - не вариант. Хочется докопаться до сути.
chemikadze 09.05.10 03:30 # +0
Переходи на темную сторону, у нас есть печеньки =)
cblp 02.05.10 23:14 # +0
А если поставить брэйк по номеру строки?
digiwhite 02.05.10 23:17 # +0
Пробовал указывать не по имени метода, а по номеру строки в файле с исходниками, однако результат такой же.
kstep 03.05.10 02:03 # +0
Первая ссылка с несколькими вариантами на попробовать.
digiwhite 03.05.10 10:50 # +0
Попробовал вариант что предлагали:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

[digiwhite@mollari obj]$ gdb inky
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu"...
(gdb) set breakpoint pending on
(gdb) break 'qconfiguration.cpp:QConfiguration::appendSection(QString const&)'
Function "qconfiguration.cpp:QConfiguration::appendSection(QString const&)" not defined.
Breakpoint 1 ('qconfiguration.cpp:QConfiguration::appendSection(QString const&)') pending.
(gdb) info sources
Source files for which symbols have been read in:

<<C++-namespaces>>, /home/digiwhite/devel/inky/src/config/qconfiguration.cpp, /usr/include/QtCore/qglobal.h, /usr/include/QtCore/qbasicatomic.h,
/usr/include/QtCore/qatomic_x86_64.h, /usr/include/QtCore/qbytearray.h

Source files for which symbols will be read in on demand:

/home/digiwhite/devel/inky/src/logging/qlogger.cpp, /home/digiwhite/devel/inky/src/errors/qerrormarker.cpp, /home/digiwhite/devel/inky/src/config/qconfigmanager.cpp,
/home/digiwhite/devel/inky/src/config/qconfigsection.cpp, /home/digiwhite/devel/inky/src/config/qconfigparam.cpp, /home/digiwhite/devel/inky/src/config/qconfigreader.cpp,
/home/digiwhite/devel/inky/src/pacmanconfig/qpacmanconfigfilter.cpp, /home/digiwhite/devel/inky/src/appbase/qapplicationcontroller.cpp, /home/digiwhite/devel/inky/src/main.cpp
(gdb) break '/home/digiwhite/devel/inky/src/config/qconfiguration.cpp:QConfiguration::appendSection(QString const&)'
Function "/home/digiwhite/devel/inky/src/config/qconfiguration.cpp:QConfiguration::appendSection(QString const&)" not defined.
Breakpoint 2 ('/home/digiwhite/devel/inky/src/config/qconfiguration.cpp:QConfiguration::appendSection(QString const&)') pending.
(gdb) info break
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   <PENDING>          'qconfiguration.cpp:QConfiguration::appendSection(QString const&)'
2       breakpoint     keep y   <PENDING>          '/home/digiwhite/devel/inky/src/config/qconfiguration.cpp:QConfiguration::appendSection(QString const&)'
(gdb) r
 


Короче говоря это не помогает. Может что-то не то с флагами при сборке?
Denis 03.05.10 15:02 # +1
Подозреваю, что это могут быть злобные происки MOC'а. Ковырять его глубоко мне не довелось, так что всю эту кухню я знаю довольно плохо, но посмотреть в его сторону стоит.
digiwhite 03.05.10 19:33 # +0
Вы знаете, я еще не пробовал копать в сторону moc`а, но вам спасибо большое хотя бы за то, что напомнили мне про использования макроса Q_OBJECT в объектах наследуемых от QObject. Блин бывает же такое :)
digiwhite 03.05.10 19:35 # +0
Хотя щас думаю, что оно особо и не нужно. Пока ни сигналы ни слоты не используются.
digiwhite 03.05.10 19:45 # +0
Проверил. Действительно, при использовании Q_OBJECT и натравке на файл moc`а gdb начинает видеть методы. Однако это говорит о том, что и в книгах могут быть ошибки. Или недоговорки.

Как написано в справке:
The Q_OBJECT macro must appear in the private section of a class definition that declares its own signals and slots or that uses other services provided by Qt's meta-object system.


Как написано в книге:

В начале определения класса содержится макрос Q_OBJECT для MOC; это необходимо, если ваш класс использует сигналы и слоты, а в других случаях, если у вас нет нужды в метаинформации, то этим макросом можно пренебречь.


Короче я смущен :)
kstep 05.05.10 00:46 # +0
Поэтому учить такие вещи нужно по офдокам, а не по книгам.
Толстые книги пишут авторы пишут для себя, чтоб заработать (как правило, исключения редки).
Документацию пишут для людей, для fellow-разработчиков.
digiwhite 05.05.10 09:31 # +0
Я вам скажу, что пока что проблема не решена толком. Есть подозрение, что еще может быть беда в наименовании классов, даже не смотря на пространства имен. Еще одна вещь-Qt creator использует для отладки некий помощник-динамическую библиотеку.

Лучшие блоги (все 133)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Элита (все 2589 из 203 городов)
Топ пользователей Топ блогов
welinux.ru

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн