Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > debug |
Автор: sergioK1 10.5.2011, 01:34 |
Чем удобнее дебажить ? gdb или при помощи IDE и какой? Наверно есть в поиске но Я не нашел |
Автор: MAKCim 10.5.2011, 10:50 |
удобно - понятие субъективное |
Автор: null56 10.5.2011, 13:59 |
если чисто дебагер, то ddd неплох, хорошая обертка http://www.gnu.org/software/ddd/ а так большинство IDE поддерживают удобные обертки для отладки, тот же eclipse... хотя тебе уже дали хороший ответ |
Автор: sergioK1 10.5.2011, 16:24 | ||
В есlipse как раз не работает, игнорирует break-points и все гуглил но ничего рядом не нашел , с DDD буду разбираться , 2 MAKCim - бумаги не жалко для таких ответов ? |
Автор: xvr 11.5.2011, 11:10 |
В Linux есть ровно один дебагер - gdb. Все остальное - разные обвертки над ним. Так что рекомендуется с самим gdb хотя бы ознакомится, а потом искать удобный GUI (если понадобится после знакомства с gdb ![]() Кстати, даже в самом консольном gdb могут быть зачатки GUI (то же консольного) Смотри TUI в info gdb |
Автор: 500mhz 11.5.2011, 12:45 |
не совсем так, есть еще linice![]() |
Автор: xvr 11.5.2011, 16:44 |
Это кернельный дебагер, у него несколько 'не та' сфера применения, что у gdb ![]() Кернельные в Linux'е еще есть - kdb например |
Автор: 500mhz 11.5.2011, 18:00 |
не ну я это понимаю, но я за справедливость) |
Автор: MAKCim 11.5.2011, 21:23 |
ответ аналогичен вопросу |
Автор: sergioK1 12.5.2011, 16:23 | ||||
В смысле ? flag -g не выставил, запускал в debug mode, оно как-бы понятно что выставить нужно но если это дебаг мод то что выставлять и куда ? |
Автор: bsa 13.5.2011, 12:14 |
sergioK1, так флаг -g и отличает отладочную от неотладочной. Добавь две опции компилятора -O0 -g3, пересобери проект и все у тебя будет отлаживаться. |
Автор: sergioK1 13.5.2011, 12:54 |
заработало проблема была в настройках IDE. методом научного тыка нашел , в perspectives должен стоят promt а был never |
Автор: bsa 13.5.2011, 13:02 |
sergioK1, зря ты собрал отладочную версию с третьей оптимизацией. Тебя ждет очень много неожиданных сюрпризов. |
Автор: sergioK1 13.5.2011, 17:57 | ||
И как знать какой уровень оптимизации нужен , ? методом проб и ошибок ? или есть какая-то система ? |
Автор: boostcoder 13.5.2011, 18:01 |
для отладочной версии включать оптимизацию?! ![]() |
Автор: sergioK1 13.5.2011, 18:17 | ||
для релизной естесно, хотя вопрос не этом , есть какая нидь система пусть не на 100% вот тут при таких ситуациях ставим 2 тут 3 тут не ставим , может best practise есть ? или надо тыкать на авось ![]() что будь внятное можно услышать - общие соображения Я сам знаю ![]() |
Автор: bsa 13.5.2011, 20:34 |
sergioK1, в документации это описано. -O0 - без оптимизации (для отладки) -O1 и -Os - оптимизация по размеру (ну если тебе не так важна скорость, как размер) -O2 - оптимизация по скорости (обычно используется в релизах) -O3 - супер оптимизация по скорости. Может вызывать проблемы, поэтому используется редко. |
Автор: xvr 13.5.2011, 20:52 |
Есть - если хочешь отлаживать свою программу, а не оптимизатор компилятора, то оптимизации нужно выключать ![]() |
Автор: kamre 17.5.2011, 13:40 |
А какая IDE в линуксе умеет нормально отображать при отладке контейнеры/итераторы из STL? Чтобы как в MSVC можно было и в data tip посмотреть по быстрому и в отдельной панели Watch поисследовать. |
Автор: bsa 17.5.2011, 16:24 |
kamre, Qt Creator Добавлено через 47 секунд Главное, убедиться, что собраны помощники отладчика (для старых версий актуально). |
Автор: kamre 17.5.2011, 17:02 | ||
Не работает в QtCreator 2.2: ![]() |
Автор: bsa 17.5.2011, 18:29 |
kamre, у меня проблем нет. Попробуй перед return добавить вывод одного элемента на консоль. Возможно, компилятор что-то соптимизировал. |
Автор: sergioK1 17.5.2011, 21:43 | ||
Eclipse все отлично показывает , Сreator тоже , хотя смотреть в дебаге контайнер - мартышкин труд ![]() |
Автор: kamre 17.5.2011, 21:59 | ||||
Ну уж так откровенно то https://bugs.eclipse.org/bugs/show_bug.cgi?id=302121 не стоит. |
Автор: sergioK1 17.5.2011, 22:47 | ||||||
Я не очень понимаю о чем там речь У меня 20 минут назад работало, |
Автор: kamre 17.5.2011, 23:02 | ||
Ну тогда скриншот что ли покажите для того кода выше, как показываются переменные m и i в отладчике CDT? |
Автор: sergioK1 17.5.2011, 23:33 | ||||
Код напишете полностью Я уже стер , и машину закрыл, посмотрю, поставте Эклипсе посмотрите - это быстрее будет, и займет минут 20 , P.S . Вот поэтому Я и говорю что С надежней, а в меня гнилые яблоки кидают ![]() |
Автор: kamre 18.5.2011, 11:25 | ||||||
Код полностью:
В MSVC в data tip показывается все очень удобно и компактно:
Как такое посмотреть в CDT? Насколько я знаю - никак, не реализовали еще. P.S. и в QtCreator у меня тоже упорно не хочет ничего показывать.... |
Автор: bsa 18.5.2011, 11:30 | ||
Проверь состояние помощников отладчика в настройках в разделе Qt4 |
Автор: kamre 18.5.2011, 12:44 | ||||
В QtCreator 2.2:
|
Автор: bsa 18.5.2011, 13:14 |
kamre, добавь cout и выведи один из элементов мэпа. Возможно, оптимизатор компилятора выкинул лишнее. |
Автор: kamre 18.5.2011, 13:38 | ||||||
Добавил
перед
Ничего не поменялось. Да и сборка же debug делается, специально для отладки. |
Автор: bsa 18.5.2011, 13:43 |
kamre, какой у тебя gdb? Обычно, "unavailable synchronous data" выдается после освобождения участка памяти, на который ссылается объект. |
Автор: xvr 18.5.2011, 15:05 |
Дебагер в VS не обладает 'встроенными' знаниями о том, что надо показывать для stl контейнеров. Эти 'знания' у него лежат в отдельном файле ( C:\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\autoexp.dat ) Не уверен, что gdb такое умеет (пока) ![]() |
Автор: bsa 22.5.2011, 22:34 |
В Qt Creator используются дамперы (ныне на питоне), которые эту проблему и решают. |
Автор: sergioK1 24.5.2011, 17:23 | ||
какая разница на питоне или на гадюке ![]() куда эти самые дамперы вставлять ? |
Автор: bsa 24.5.2011, 23:49 |
Никуда. Они должны работать "из коробки". У меня на 3-х машинах (Ubuntu 11.04 x86_64) работают. |
Автор: sergioK1 25.5.2011, 10:20 | ||
в таких случаях говорят Ай гот лост, ![]() Чел спросил про то как дебагить STL . под линукс оно не работает, под мелкософт да, потому что там есть отдельный файл, меня оно тоже заинтересовало, ты сказал что в линуксе есть дамперы на Питоне, ну и ??????? ты думаешь от того бы об этом сказал оно(дебаг стал работать ) ![]() |
Автор: bsa 25.5.2011, 13:50 | ||
То что я это сказал, можно расценить как "неполадки в конкретном случае конкретного человека". И надо разбираться с этим отдельно. И не надо тут троллить. Твое отношение к С++ и STL, как неотъемлемой его части, уже давно известно. |
Автор: spyswamp 2.11.2011, 11:59 |
Подниму, пожалуй, данную тему. У меня установлена ОС Windows 7, QtCreator 2.3.0 (based on Qt 4.7.4 32 bit). Поставилось все это вместе с QtSDK-win. Проблема проявляется в том, что в дебаге не могу смотреть значения переменных-"коллекций". Например, QHash, QVector и других подобных структур. Гуглил, даже в jira разработчиков сказано, что такое должно быть исправлено. Gdb, судя по всему, последней версии (если верить components.xml) - 7.2.0-4. Дома на Ubuntu 10.04.3 LTS + QtCreator 1.3.1 (based on Qt 4.6.2) все показывается идеально. Кто может подсказать, в чем дело? Добавлено через 2 минуты и 22 секунды Хм, только сейчас увидел, что топик в программировании под *nix. Удалите, пожалуйста, эти дописки, я сейчас создам тему в соответствующем разделе. |
Автор: Amp 2.11.2011, 13:01 |
Да умеет он это все. Называется "pretty printers" - такие небольшие скриптики на питоне. В интернетах можно найти в т.ч. для qt и wx контейнеров. Как написали выше, для stl-контейнеров они должны идти "искаропки". Их отсутствие наверное лежит на совести мейнтейнеров. Другое дело, что связка gdb + IDE частенько не работает ![]() |
Автор: spyswamp 2.11.2011, 15:36 |
Amp, а ты не нашел способа решения проблемы? У меня, судя по всему, как раз такая неработающая связка на винде попалась. |
Автор: Amp 2.11.2011, 16:31 |
spyswamp, там от случая к случаю проблемы разные. У меня, например, в линупсе не работает, а в виндовс все хорошо. Т.к. работа не связана с этим, то я и забил. |