LINUX.ORG.RU
ФорумTalks

[опрос] отладчик C/C++

 


1

0

Поскольку на ЛОРе много программирующих людей, хотелось бы узнать у тех, кто пишет на C/C++: чем вы отлаживаете свой код?

Лично я использую gdb и в качестве оболочки для него ddd (т. к. не нашёл ничего больше сравнимого по функциональности).

Собственно, меня эта пара удовлетворяет далеко не всегда (к примеру, часто бывают проблемы с установкой брейкпоинта на методы в c++: ставишь брейкпоинт (по имени метода), он ставится, отображается, но ставится, как выясняется, куда-то "не туда", в итоге он не срабатыват когда должен). Вот и хочу узнать - может что получше есть.

★★


в подавляющем большинстве ситуаций - грамотно продуманная система ведения логов. в крайнем случае исследование корок. но это если они есть и нет ничего другого. и никогда - пошаговый отладчик.

// wbr

klalafuda ★☆☆
()

printf, логи, корка. Я бы с удовольствием пользовал отладчик, но программы слишком специфические.

tailgunner ★★★★★
()

> часто бывают проблемы с установкой брейкпоинта на методы в c++: ставишь брейкпоинт (по имени метода), он ставится, отображается, но ставится, как выясняется, куда-то "не туда", в итоге он не срабатыват когда должен).

Это ты не про ту проблему gdb говоришь, когда нельзя breakpoint в констукторе поставить? Если да - то с этим похоже ничего не сделать. Все линуксовые отладчики - обертки над gdb и эту проблему будут иметь.

Сам пользуюсь патчем к VIM: http://clewn.sourceforge.net/

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

> Все линуксовые отладчики - обертки над gdb и эту проблему будут иметь.

Кстати не все. Видел какой-то один полностью самостоятельный. Но он а) только графический (нет командной строки), б) интерфейс хуже чем у ddd (даже не на motif а, похоже, напрямую через xlib), в) функциональность не особо. Названия не помню уже.

По поводу проблемы - если кратко - в чём там дело? Это что ли принципиально в gdb неисправляемо?

slav ★★
() автор топика
Ответ на: комментарий от slav

> По поводу проблемы - если кратко - в чём там дело?

class Bomb
{
public:
  Bomb(int i)
  {  printf("Hello from unary ctor!\n"); }

  Bomb(int i, int j)
  { printf("Hello from binary ctor!\n"); }
};

...

(gdb) b Bomb::Bomb
[0] cancel
[1] all
?HERE
?HERE
> 1
Note: breakpoint -2 (disabled) also set at pc 0x0.
Breakpoint 1 at 0x0
Note: breakpoints -2 (disabled) and 1 also set at pc 0x0.
Breakpoint 2 at 0x0
warning: Multiple breakpoints were set.


> Это что ли принципиально в gdb неисправляемо?


Не знаю, я не разработчик gdb. когда-то давно исследовал эту проблему, видел как на gdb mailing list кто-то писал что это так просто не исправить.

gods-little-toy ★★★
()
Ответ на: комментарий от vaborg

> и как удалось натянуть на вим это? работает?

Это не плагин, а *патч к исходникам* VIM'a. Таким образом можно что угодно натянуть.

Работает, меня в общем и целом устраивает. посмотри там скриншот есть.

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

> Да, если по line number'у в исходнике ставить - брякпоинт поставится но срабатывать не будет

Не совсем. Если ставить в теле - срабатывает почти всегда (если вообще не всегда). Может не сработать (тоже не всегда - сейчас на первом попавшемся классе попробовал - сработал) если ставить на саму функцию, особенно если ставить по имени (b 'Class::Class(arg1_t, arg2_t)'). Но если дойти до нужного места пошаговым исполнением, поставить там брейкпоинт командой 'b' без параметров, то потом срабатывать будет (при этом его адрес оказывается отличным от созданого первой командой).

По-моему там какие-то проблемы возникали с полиморфными классами...

slav ★★
() автор топика
Ответ на: комментарий от DemonZLa

> гы.... а я не отлаживаю..... я пишу на питоне.... хехехе.....

ч0рт, а я и на Питоне отлаживаю :( Что я не так делаю, доктор?

tailgunner ★★★★★
()
Ответ на: комментарий от slav

> Не совсем. Если ставить в теле - срабатывает почти всегда (если вообще не всегда). Может не сработать (тоже не всегда - сейчас на первом попавшемся классе попробовал - сработал) если ставить на саму функцию, особенно если ставить по имени (b 'Class::Class(arg1_t, arg2_t)').

Да, действительно пару раз попробовал - работает. Странно, я уверен, что у меня был случай, где как не ставь - не работало. Начну ставить в конструкторы, спасибо :-)

gods-little-toy ★★★
()
Ответ на: комментарий от tailgunner

> ч0рт, а я и на Питоне отлаживаю :( Что я не так делаю, доктор?

Похоже фанаты лиспа/ФП свалили все куда-то... а то б щас тебе объяснили :-)))

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

>Похоже фанаты лиспа/ФП свалили все куда-то... а то б щас тебе объяснили :-)))

А что такого страшного в дебаге? Например, в drScheme есть режим выполнения Debug, видимо, для самых маленьких :)

seiken ★★★★★
()
Ответ на: комментарий от gods-little-toy

Да он и так всё знает, в питоне что отлаживай что не отлаживай - результат един.

bugmaker ★★★★☆
()
Ответ на: комментарий от seiken

Да вобщем ничего страшного, только как же без expand-form ?

bugmaker ★★★★☆
()

Хорошим программистам отладчики не нужны

ip1981 ☆☆
()

Пишу на C, отлаживаю с помощью printf/printk и через gdb в емаксе (gud-mode, M-x gdb <RET>), и valgrind (цепляется к процессу gdb, работает так же в емаксе). Брейкпойнты расставляются по C-x <SPC>, шагаем по gud-step. Мне такая связка показалась весьма удобной.

Zmacs
()

Логи, gdb без оболочек для исследования stack-trace'ов. Пошаговая отладка хороша только для небольших однопоточных программулек.

С breakpoint'ами там вообще беда. А по поводу твоей проблемы: скорее всего, надо просто при компиляции указать -O0.

watashiwa_daredeska ★★★★
()

в основном логи, иногда gdb (обычно логов хватает)

AcidumIrae ★★★★★
()

В этом вопросе я полностью солидарен с Линусом. Отладчики - для быдла. Если это ТВОЙ код, то ты должен быть в состоянии без отладчика понять, что происходит. Отладчик - прямой путь к помойке в коде (через резиновую женщину и продажу Родины).

anonymous
()
Ответ на: комментарий от anonymous

> Отладчики - для быдла. Если это ТВОЙ код, то ты должен быть в состоянии без отладчика понять, что происходит.

А чё, все, кому приходится копаться в чужом коде - быдло? И те, кто reverse engineer'ит всякие проприетарные вещи - тоже? Ну-ну.

gods-little-toy ★★★
()

Есть такая штука как SlickEdit - замечательная вещь. По сути дела среда разработки, лучше которой я в жизни не видел. Достоинств очень много, в том числе и очень грамотная оболочка для gdb (в итоге отладка по умолчанию может быть настроена на работу аля MVS.. да простят меня товарищи линуксоиды - я не знаю, как иные гении, но лично я впервые программировал под виндой.. потому, может это качество быдла, но отладчик использовать, к сожалению, приучился.. и кроме того, не всегда можно эффективно найти ошибку в огромном проекте без хорошего отладчика - зависит от специфики проекта).

Кстати, никогда не было проблем с брейкпоинтами. Они просто не могут ставиться на другие части кода, если вы не используете при компиляции для отладки флаги оптимизации.

aign
()

Ну и printf() - штука незаменимая.. чаще использую ее :)

aign
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.