![]() |
|
Модераторы: xvr |
![]()
|
|
| lamao |
|
||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
Меня интересует, можно ли как-то реализовать собственное отображение содержимого объектов в gdb. Например, есть контейнер, который содержит в себе std::list<SomeClass *>.
Можно ли вывести такой контейнер обьектов где-то так:
Пробовал следующую реализацию
Но, если вызвать метод так
то ничего не выводиться. А если так
то выводиться примерно следующее
Знаю, что, например, в Objective-C можно реализовать метод description и потом в gdb писать
Есть ли схожее решение для С++? P.S. Вопрос немного не по теме. Как можно загнать вывод g++ в файл (g++ main.cpp > log.txt) не получается. Все равно он выводит все на консоль. Это сообщение отредактировал(а) lamao - 26.7.2008, 13:19 |
||||||||||||
|
|||||||||||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
||||
|
||||
| lamao |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
В общем после испробование нескольких вариантов решил, что лучший примерно следующий:
Теперь в gdb можно просто вызвать
Таким образом на основании description можно создавать описание каких угодно котнейнеров и прочих иерархий. К тому же можно создать абстрактный класс с этими двумя методами и наследовть свои классы от него. Если изобрел велосипед, прошу сильно не ругать P.S. Для перенаправления вывода об ошибка от g++ в файл нужно (я имею ввиду при работе в консоли)
Это сообщение отредактировал(а) lamao - 30.7.2008, 21:26 |
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Любые варианты печати классом самого себя имеют один явный недостаток - в случае ошибок (как при печати, так и в любом другом месте) вызов метода класса для печати его в лучшем случае напечатает что то не то, а в худшем уронит программу или испортит какие нибудь внутренние данные отлаживаемой программы.
Для печати лучше воспользоваться макросом из gdb, хотя и его придется писать под каждый тип данных |
|||
|
||||
| lamao |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
А можно поподробнее. Что это за макрос? Как с его помощью организовать вывод своего контейнера объектов? Или где можно почитать про него |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Обычный макрос, через define ... end (info gdb; 20 Canned Sequences of Commands; 20.1 User-defined commands) |
||||
|
|||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |