emacs, отладка
От: L_user  
Дата: 08.11.05 18:08
Оценка: 4 (1)
Собственно, именно из-за этого я выбрал emacs, а не vim — встроенный отладчик (gud)

Но вопросов все равно много осталось:
1. точки останова (breakpoints) — поставить их легко C-x SPC, только как их визуально
наблюдать? (виден только треугольник текущего позиции выполнения)
2. просмотр переменных,- в принципе все ясно,- пишем "p var" в gud и видим значение
переменной var; но хотелось бы иметь окошко, в котором постоянно "лежали" бы переменные,
с изменяющимися значениями по ходу отладки, короче — watch?

К самому редактору претензий нет, но перелезая с VS (чего скрывать уж ), хочется не потерять в качестве разработки на C++
Re: emacs, отладка
От: Kemm  
Дата: 08.11.05 18:47
Оценка:
Здравствуйте, L_user, Вы писали:

L_>Собственно, именно из-за этого я выбрал emacs, а не vim — встроенный отладчик (gud)


L_> 2. просмотр переменных,- в принципе все ясно,- пишем "p var" в gud и видим значение

L_>переменной var; но хотелось бы иметь окошко, в котором постоянно "лежали" бы переменные,
L_>с изменяющимися значениями по ходу отладки, короче — watch?

display var
?
Re[2]: emacs, отладка
От: Аноним  
Дата: 09.11.05 07:07
Оценка:
Здравствуйте, Kemm, Вы писали:

K>Здравствуйте, L_user, Вы писали:


L_>>Собственно, именно из-за этого я выбрал emacs, а не vim — встроенный отладчик (gud)


L_>> 2. просмотр переменных,- в принципе все ясно,- пишем "p var" в gud и видим значение

L_>>переменной var; но хотелось бы иметь окошко, в котором постоянно "лежали" бы переменные,
L_>>с изменяющимися значениями по ходу отладки, короче — watch?

K>display var

K>?

спасиб, display пропустил

А как же насчет точек останова? Мириться с тем, что можно по info breakpoints их посмотреть?
Кстати, а есть ли команда в emacs, указыв номер breakpoint'а которой, перескакиваем в исходник/линию этой точки останова?
Re[3]: emacs, отладка
От: Kemm  
Дата: 09.11.05 07:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А как же насчет точек останова? Мириться с тем, что можно по info breakpoints их посмотреть?

А>Кстати, а есть ли команда в emacs, указыв номер breakpoint'а которой, перескакиваем в исходник/линию этой точки останова?

Иметия не поняю. 8)) Я vim'ом пользуюсь.
Re[4]: emacs, отладка
От: L_user  
Дата: 09.11.05 12:08
Оценка:
Здравствуйте, Kemm, Вы писали:

K>Здравствуйте, Аноним, Вы писали:


А>>А как же насчет точек останова? Мириться с тем, что можно по info breakpoints их посмотреть?

А>>Кстати, а есть ли команда в emacs, указыв номер breakpoint'а которой, перескакиваем в исходник/линию этой точки останова?

K>Иметия не поняю. 8)) Я vim'ом пользуюсь.


ну хорошо, отладчиком-то все равно пользуетесь (ddd или чистый gdb?);
конкретная ситуация — обычно, ища очередную ошибку, в отладчике прогоняю прогамму
до определенного места с помощью continue (типа F5), next (типа F10), step (типа F11);
затем в редакторе "добираюсь" до нужной переменной (структуры!) и жму Shift+F9 (watch),
чтобы просмотреть значение(значения членов структуры);

можно ли также в gdb/ddd — не набирая название переменной узнать ее содержимое

далее, если просматриваемая структура имеет вложенные структуры/указатели на структуры,
как можно "развернуть" их и посмотреть значения (конечно этот процесс может происходить по-другому, но главная цель,- как можно меньше нажать комбинаций клавиш клавиатуры/мышы)?
Re[5]: emacs, отладка
От: Kemm  
Дата: 09.11.05 12:17
Оценка:
Здравствуйте, L_user, Вы писали:

А>>>А как же насчет точек останова? Мириться с тем, что можно по info breakpoints их посмотреть?

А>>>Кстати, а есть ли команда в emacs, указыв номер breakpoint'а которой, перескакиваем в исходник/линию этой точки останова?
K>>Иметия не поняю. 8)) Я vim'ом пользуюсь.

L_>ну хорошо, отладчиком-то все равно пользуетесь (ddd или чистый gdb?);

L_>конкретная ситуация — обычно, ища очередную ошибку, в отладчике прогоняю прогамму
L_>до определенного места с помощью continue (типа F5), next (типа F10), step (типа F11);
L_>затем в редакторе "добираюсь" до нужной переменной (структуры!) и жму Shift+F9 (watch),
L_>чтобы просмотреть значение(значения членов структуры);

L_>можно ли также в gdb/ddd — не набирая название переменной узнать ее содержимое


Ну откуда я знаю, что там emacs умеет? Откуда gdb узнает, куда ему смотреть, если даже название ему не сказали? 8))
tab-completion не помогает? display, как я уже говорил, если постоянно в переменную смотреть нужно. tracepoints, watch порой тоже сильно помогают.

L_>далее, если просматриваемая структура имеет вложенные структуры/указатели на структуры,

L_>как можно "развернуть" их и посмотреть значения (конечно этот процесс может происходить по-другому, но главная цель,- как можно меньше нажать комбинаций клавиш клавиатуры/мышы)?

gdb, слава богу, понимает сишный синтаксис.
p *pointer_to_struct
p *(pointer_to_struct->pointer_to_another_struct)

Более того, можно и функцию какую-нибудь позвать. 8))
Re[6]: просто отладка
От: Аноним  
Дата: 09.11.05 14:55
Оценка:
Здравствуйте, Kemm, Вы писали:

L_>>можно ли также в gdb/ddd — не набирая название переменной узнать ее содержимое


K> ... Откуда gdb узнает, куда ему смотреть, если даже название ему не сказали? 8))

K>tab-completion не помогает? display, как я уже говорил, если постоянно в переменную смотреть нужно. tracepoints, watch порой тоже сильно помогают.

ну так это плохо; вот тут и нужна интеграция с редактором, согласитесь
(в случае с gdb получаем меньшую производительность труда,- больше клавиш надо нажать,
чтоб получить тот же результат)
Re[7]: просто отладка
От: Kemm  
Дата: 09.11.05 15:24
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>ну так это плохо; вот тут и нужна интеграция с редактором, согласитесь

А>(в случае с gdb получаем меньшую производительность труда,- больше клавиш надо нажать,
А>чтоб получить тот же результат)

Нафиг-нафиг. Производительность труда мерять в нажатиях клавиш, мягко говоря, странно. Да и не настолько часто приходится отладчиком пользоваться (если он необходим каждый день, да не по разу -- это что-то в консерватории менять надо, имхо).
Re[8]: просто отладка
От: L_user  
Дата: 09.11.05 16:29
Оценка:
Здравствуйте, Kemm, Вы писали:

K>Здравствуйте, Аноним, Вы писали:


А>>ну так это плохо; вот тут и нужна интеграция с редактором, согласитесь

А>>(в случае с gdb получаем меньшую производительность труда,- больше клавиш надо нажать,
А>>чтоб получить тот же результат)

K>Нафиг-нафиг. Производительность труда мерять в нажатиях клавиш, мягко говоря, странно. Да и не настолько часто приходится отладчиком пользоваться (если он необходим каждый день, да не по разу -- это что-то в консерватории менять надо, имхо).


вы так уверены? Посмотрите на большие проекты, к примеру Open Source; а точнее на их Bugzill'ы — там кол-во ошибок исчисляется сотнями и тысячами; искать подобные ошибки
(первая задача maintainer'ов) порой приходится по всему коду, и именно с отладчиком;
на нахождение одной такой может уходить, как и пара минут, так и более 2 часов.
Естественно, что во втором случае на производительность сильно повлияет то, что приходится
нажимать больше клавиш, чем это требуется _логически_.
С проприетарным ПО дело обстоит точно также, ну или почти также (не хочу флэймить по этому
поводу)

Конечно, может быть вы пишете ПО как-то по-другому; но мы ведь не на "солнышке" живем,
и в большинстве своем оно преобладает в виде тех же браузеров (IE, Firefox) и офисов.

Итак, вы все же считаете, что отладка не должна занимать много времени, ну скажем 10%;
а если иначе, то надо что-то менять?
Re[9]: просто отладка
От: Глеб Алексеев  
Дата: 09.11.05 16:33
Оценка: +1
Здравствуйте, L_user, Вы писали:

L_>Итак, вы все же считаете, что отладка не должна занимать много времени, ну скажем 10%;

L_>а если иначе, то надо что-то менять?
Позволю себе встрять в беседу без приглашения. Мне кажется, Kemm имел в виду, что отлаживать надо без отладчика, т.е. в первую очередь — юнит-тесты, во вторую — ассерты, в третью — трассировка, в четвертую — отладчик.
Re[10]: просто отладка
От: Kemm  
Дата: 09.11.05 22:25
Оценка: 5 (2)
Здравствуйте, Глеб Алексеев, Вы писали:

L_>>Итак, вы все же считаете, что отладка не должна занимать много времени, ну скажем 10%;

L_>>а если иначе, то надо что-то менять?
ГА>Позволю себе встрять в беседу без приглашения. Мне кажется, Kemm имел в виду, что отлаживать надо без отладчика, т.е. в первую очередь — юнит-тесты, во вторую — ассерты, в третью — трассировка, в четвертую — отладчик.

И это в том числе. А так же:
1) valgrind. Мы же о юниксах говорим? И не о ядре? Тогда на линуксе или фре должно работать. Тогда без этой штуки вообще неясно что делать с memory leak'ами.
2) bug report должен идти вместе с пунктом How To Repeat. Опять отладчик не при чем более чем в 90% случаев.

Итого отладчик нужен редко. Причем в таких случаях, что и он-то особо не помогает обычно. Как показывает практика, именно тогда выявляются самые тупые ошибки. 8))
Re: emacs, отладка
От: Аноним  
Дата: 10.11.05 15:52
Оценка:
Здравствуйте, L_user, Вы писали:

L_>Собственно, именно из-за этого я выбрал emacs, а не vim — встроенный отладчик (gud)


L_>К самому редактору претензий нет, но перелезая с VS (чего скрывать уж ), хочется не потерять в качестве разработки на C++


Хммм. Похоже Основная ваша проблема в том, что та модель разработки (которую вы выбрали по средством выбора инструментария) в корне отличается от той к которой вы привыкли работая с VS. Не знаю причин по которым вы выбирали только из emacs и vim, но я бы предложил вам весьма достойную альтернативу, которая, к тому же, очень схожа (по модели разработки) с VS. Это eclipse + CDT (www.eclipse.org). Очень мощная и приятная IDE во многом превосходящая VS2003 (с VS2005 еще не работал сравнить не могу). Так что очень рекомендую.
Re[11]: просто отладка
От: L_user  
Дата: 10.11.05 16:50
Оценка: 4 (1) +1
Здравствуйте, Kemm, Вы писали:

K>Здравствуйте, Глеб Алексеев, Вы писали:


L_>>>Итак, вы все же считаете, что отладка не должна занимать много времени, ну скажем 10%;

L_>>>а если иначе, то надо что-то менять?
ГА>>Позволю себе встрять в беседу без приглашения. Мне кажется, Kemm имел в виду, что отлаживать надо без отладчика, т.е. в первую очередь — юнит-тесты, во вторую — ассерты, в третью — трассировка, в четвертую — отладчик.

Я не против того, чтобы отладка была в таком виде, в каком вы описали, т.е. юнит-тесты,
...

Но! Это не причина для того, чтобы не улучшать инструментарий для отладки. Сколько не
избегай ее (а также отсутствия юнит-тестов и т.д.), все равно настанет такой момент, что
сложный баг потребует этой самой отладки в "N-ое кол-во времени", и я хочу быть готовым к таким моментам (не дай бог им наступать, но все равно наступает), с самой эффективной
комбинацией из отладчика, редактора, и вообще всем чем можно.

Кстати, и пример недалеко,- http://rsdn.ru/Forum/?mid=1479579&flat=0
Автор: Dmi_3
Дата: 09.11.05



Скажите, что такое редко случается? Такие редко, но все равно, 10 часов — лучше чем 20 часов или ничего (в смысле, вообще не найти ошибку).

Еще пример? Пожалуйста,- и самый, что ни на есть, юниксовый; до сих пор в отладчике gdb
(версия 6.3) не исправлена мерзкая ошибка с установкой точек останова (ошибка gdb/1091)
в конструкторах и деструкторах ("ставишь в конструктор break, а не работает, пролетает мимо "); Так вот, нашелся хороший человек,- http://people.freenet.de/BalaGi/, который
сделал patch, исправляющий ее (см. там же). Ему для этого потребовался целый день (он
не мэйнтэйнер, а ошибка-то его видно достала); догадайтесь, сколько времени из этого
он провел в отладчике?

K>И это в том числе. А так же:

K>1) valgrind. Мы же о юниксах говорим? И не о ядре? Тогда на линуксе или фре должно работать. Тогда без этой штуки вообще неясно что делать с memory leak'ами.

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

K>2) bug report должен идти вместе с пунктом How To Repeat. Опять отладчик не при чем более чем в 90% случаев.


даже с how to repeat в проекте размером с, например, Firefox искать ошибку очень долго
отладчик "при чем" более 50%, если не 90%

K>Итого отладчик нужен редко. Причем в таких случаях, что и он-то особо не помогает обычно. Как показывает практика, именно тогда выявляются самые тупые ошибки. 8))


замечаете,- разная у нас статистика; может у вас проект(ы) слишком специализированные
(это к вопросу,- "а не на солнышке ли вы живете?")
Re[2]: emacs, и другие IDE/редакторы
От: L_user  
Дата: 10.11.05 17:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, L_user, Вы писали:


L_>>Собственно, именно из-за этого я выбрал emacs, а не vim — встроенный отладчик (gud)


L_>>К самому редактору претензий нет, но перелезая с VS (чего скрывать уж ), хочется не потерять в качестве разработки на C++


А>Хммм. Похоже Основная ваша проблема в том, что та модель разработки (которую вы выбрали по средством выбора инструментария) в корне отличается от той к которой вы привыкли работая с VS. Не знаю причин по которым вы выбирали только из emacs и vim, но я бы предложил вам весьма достойную альтернативу, которая, к тому же, очень схожа (по модели разработки) с VS. Это eclipse + CDT (www.eclipse.org). Очень мощная и приятная IDE во многом превосходящая VS2003 (с VS2005 еще не работал сравнить не могу). Так что очень рекомендую.


Не, я, конечно, и на другие IDE смотрел и смотрю сейчас. Просто хочу узнать всю
"магическую силу" еmacs/vim.

Вот список того, что я уже перебрал-попробовал (у каждой есть свои плюсы/минусы, это не blacklist):

Anjuta
Kdevelop
vim+ddd/gdb
Eclipse+CDT
emacs или xemacs
C-Forge

На очереди пока двое — SlickEdit и Code::Blocks

Народ, если чего еще есть на Linux-платформе,- черкните в этот тред,
буду сильно благодарен
Re[12]: просто отладка
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 10.11.05 18:20
Оценка:
Здравствуйте, L_user, Вы писали:

L_>Кстати, и пример недалеко,- http://rsdn.ru/Forum/?mid=1479579&flat=0
Автор: Dmi_3
Дата: 09.11.05

L_>

L_>Скажите, что такое редко случается? Такие редко, но все равно, 10 часов — лучше чем 20 часов или ничего (в смысле, вообще не найти ошибку).


Если бы там в крутизну в песочницу не игрались, и делали нормальные thread-safe классы вместо "умных" оберток для thread-unsafe классов, то им и не пришлось бы ничего отлаживать. ИМХО.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: emacs, и другие IDE/редакторы
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 10.11.05 18:20
Оценка: 1 (1)
Здравствуйте, L_user, Вы писали:

L_>Не, я, конечно, и на другие IDE смотрел и смотрю сейчас. Просто хочу узнать всю

L_>"магическую силу" еmacs/vim.

L_>Вот список того, что я уже перебрал-попробовал (у каждой есть свои плюсы/минусы, это не blacklist):


L_>Anjuta

L_>Kdevelop
L_>vim+ddd/gdb
L_>Eclipse+CDT
L_>emacs или xemacs
L_>C-Forge

L_>На очереди пока двое — SlickEdit и Code::Blocks


L_>Народ, если чего еще есть на Linux-платформе,- черкните в этот тред,

L_>буду сильно благодарен

Еще вот сюда загляни: 10 Reasons to Dump Your [Java] IDE
Автор: Павел Кузнецов
Дата: 11.10.05


И в качестве совета (если позволено будет) -- попробуй вместо отладчика использовать отладочные печати и логирование. Очень сильно меняет мышление. А в многопоточных или многопроцессовых/распределенных приложениях помощь от отладчика стремиться к нулю.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: просто отладка
От: Kemm  
Дата: 10.11.05 19:12
Оценка:
Здравствуйте, L_user, Вы писали:

L_>>>>Итак, вы все же считаете, что отладка не должна занимать много времени, ну скажем 10%;

L_>>>>а если иначе, то надо что-то менять?
ГА>>>Позволю себе встрять в беседу без приглашения. Мне кажется, Kemm имел в виду, что отлаживать надо без отладчика, т.е. в первую очередь — юнит-тесты, во вторую — ассерты, в третью — трассировка, в четвертую — отладчик.
L_>Я не против того, чтобы отладка была в таком виде, в каком вы описали, т.е. юнит-тесты,
L_>...
L_>Но! Это не причина для того, чтобы не улучшать инструментарий для отладки. Сколько не
L_>избегай ее (а также отсутствия юнит-тестов и т.д.), все равно настанет такой момент, что
L_>сложный баг потребует этой самой отладки в "N-ое кол-во времени", и я хочу быть готовым к таким моментам (не дай бог им наступать, но все равно наступает), с самой эффективной
L_>комбинацией из отладчика, редактора, и вообще всем чем можно.

Скажем так: мне пока(?) потребности в данном сорте колбасы нет.

L_>Кстати, и пример недалеко,- http://rsdn.ru/Forum/?mid=1479579&amp;flat=0
Автор: Dmi_3
Дата: 09.11.05

L_>
L_>Скажите, что такое редко случается? Такие редко, но все равно, 10 часов — лучше чем 20 часов или ничего (в смысле, вообще не найти ошибку).

Я предпочитаю писать не "изящно". 8)) Уж лучше пусть кода будет в два раза больше, чем потом изыскивать какой-нибудь особо злое^Wхитрый баг. Причем повторить его (чтобы можно было тот самый отладчик заиспользовать) получается далеко не всегда.

L_>Еще пример? Пожалуйста,- и самый, что ни на есть, юниксовый; до сих пор в отладчике gdb

L_>(версия 6.3) не исправлена мерзкая ошибка с установкой точек останова (ошибка gdb/1091)
L_>в конструкторах и деструкторах ("ставишь в конструктор break, а не работает, пролетает мимо "); Так вот, нашелся хороший человек,- http://people.freenet.de/BalaGi/, который
L_>сделал patch, исправляющий ее (см. там же). Ему для этого потребовался целый день (он
L_>не мэйнтэйнер, а ошибка-то его видно достала); догадайтесь, сколько времени из этого
L_>он провел в отладчике?

Без понятия. У нас plain-C. 8))) Мне больше не нравится косяк в gdb, когда он как-то странно по шагам проходит. 100% воспроизведения добиться не удалось... 8(( Но анноит сильно.

K>>И это в том числе. А так же:

K>>1) valgrind. Мы же о юниксах говорим? И не о ядре? Тогда на линуксе или фре должно работать. Тогда без этой штуки вообще неясно что делать с memory leak'ами.
L_>подобный инструмент, конечно, очень помогает; но не избавляет от отладки

Не избавляет. Это в дополнение, очевидно. Зато позволяет отсечь кучу моментов, против которых отладка не поможет.

K>>2) bug report должен идти вместе с пунктом How To Repeat. Опять отладчик не при чем более чем в 90% случаев.

L_>даже с how to repeat в проекте размером с, например, Firefox искать ошибку очень долго
L_>отладчик "при чем" более 50%, если не 90%



K>>Итого отладчик нужен редко. Причем в таких случаях, что и он-то особо не помогает обычно. Как показывает практика, именно тогда выявляются самые тупые ошибки. 8))

L_>замечаете,- разная у нас статистика; может у вас проект(ы) слишком специализированные
L_>(это к вопросу,- "а не на солнышке ли вы живете?")

Возможно. Только вот если 10% времени в отладчике -- это все равно перебор. Еще вариант: я привык пользоваться gdb без привязки к редактору.

По делу: попробуй kdevelop (вдруг понравится, мне не пошел ни под каким соусом), vim с привязкой к gdb (скрипт на vim.sf.net)
Re: emacs, отладка
От: z00n  
Дата: 11.11.05 04:26
Оценка:
Здравствуйте, L_user, Вы писали:

L_>Собственно, именно из-за этого я выбрал emacs, а не vim — встроенный отладчик (gud)


L_>Но вопросов все равно много осталось:

L_> 1. точки останова (breakpoints) — поставить их легко C-x SPC, только как их визуально
L_>наблюдать? (виден только треугольник текущего позиции выполнения)
L_> 2. просмотр переменных,- в принципе все ясно,- пишем "p var" в gud и видим значение
L_>переменной var; но хотелось бы иметь окошко, в котором постоянно "лежали" бы переменные,
L_>с изменяющимися значениями по ходу отладки, короче — watch?

L_>К самому редактору претензий нет, но перелезая с VS (чего скрывать уж ), хочется не потерять в качестве разработки на C++


Начиная с версии 21.4 у емакса есть нормальный графический интерфейс к gdb, там это есть.
Вот тут можно посмотреть: http://www.linuxjournal.com/article/7876
Модуль называется gdb-ui.el
Re[2]: emacs, отладка
От: L_user  
Дата: 11.11.05 08:26
Оценка:
Здравствуйте, z00n, Вы писали:

L_>>К самому редактору претензий нет, но перелезая с VS (чего скрывать уж ), хочется не потерять в качестве разработки на C++


Z>Начиная с версии 21.4 у емакса есть нормальный графический интерфейс к gdb, там это есть.

Z>Вот тут можно посмотреть: http://www.linuxjournal.com/article/7876
Z>Модуль называется gdb-ui.el

спасибо; похоже, это именно то, что надо
Re[13]: просто отладка
От: L_user  
Дата: 11.11.05 08:44
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, L_user, Вы писали:


L_>>Кстати, и пример недалеко,- http://rsdn.ru/Forum/?mid=1479579&amp;flat=0
Автор: Dmi_3
Дата: 09.11.05

L_>>

L_>>Скажите, что такое редко случается? Такие редко, но все равно, 10 часов — лучше чем 20 часов или ничего (в смысле, вообще не найти ошибку).


E>Если бы там в крутизну в песочницу не игрались, и делали нормальные thread-safe классы вместо "умных" оберток для thread-unsafe классов, то им и не пришлось бы ничего отлаживать. ИМХО.


Вы никогда не делаете ошибок? Или, вы всегда все делаете правильно с первого раза?

Я думаю, что после этой ошибки были сделаны соответствующие выводы; а до этого просто все работало, и никто даже
и предполагать не мого, что возможны проблемы. Уверен, что там кроме этой ошибки есть еще и другие (это нормальная
ситуация в софтверной индустрии), просто еще не "стрельнули"; и той команде их придется отловить, как отловили
эту. ИМХО.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.