Re[13]: просто отладка
От: L_user  
Дата: 11.11.05 09:13
Оценка:
Здравствуйте, Kemm, Вы писали:

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

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

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


ну так,- прямой путь ловить ошибку-отлаживать gdb ; не привыкать же к глюкам, как это приходиться делать Windows-пользователям, исходники-то есть, правильно?

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

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

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

Да не против я Valgrind'а (а также Purify, BoundsChecker и т.д.); я против того, чтоб были узкие звенья в "цепи
разработки", коим, похоже, является отладка в Unix посредством одного gdb

K>По делу: попробуй kdevelop (вдруг понравится, мне не пошел ни под каким соусом), vim с привязкой к gdb (скрипт на vim.sf.net)



см. http://www.rsdn.ru/Forum/NewMsg.aspx?gid=22
Re[4]: emacs, и другие IDE/редакторы
От: Cyberax Марс  
Дата: 11.11.05 09:20
Оценка:
eao197 wrote:

> И в качестве совета (если позволено будет) -- попробуй вместо

> отладчика использовать отладочные печати и логирование. Очень сильно
> меняет мышление. А в многопоточных или многопроцессовых/распределенных
> приложениях помощь от отладчика стремиться к нулю.

Если в этом отладчике нет потоковых меток — тогда он будет незаменим

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[14]: просто отладка
От: Kemm  
Дата: 11.11.05 09:27
Оценка:
Здравствуйте, L_user, Вы писали:

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

L_>ну так,- прямой путь ловить ошибку-отлаживать gdb ; не привыкать же к глюкам, как это приходиться делать Windows-пользователям, исходники-то есть, правильно?

Я выделил. Без How-To-Repeat дебажить можно долго и со вкусом. Только без толку. 8)) Причем замечено проявление только на FC2 и соляре 8/9. Пока не до того.

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

L_>Да не против я Valgrind'а (а также Purify, BoundsChecker и т.д.); я против того, чтоб были узкие звенья в "цепи
L_>разработки", коим, похоже, является отладка в Unix посредством одного gdb

ХЗ. Я, честно говоря, не писал сложный _пользовательских_ приложений. А так наш софт при включенном полном дебаге валит достаточно сообщений, чтобы можно было найти баг без gdb. Другое дело -- кору посмотреть, если вдруг нарисовалась.

K>>По делу: попробуй kdevelop (вдруг понравится, мне не пошел ни под каким соусом), vim с привязкой к gdb (скрипт на vim.sf.net)

L_>
L_>см. http://www.rsdn.ru/Forum/NewMsg.aspx?gid=22

Хм. И что в форме для нового сообщения я должен увидеть? 8))
Re[15]: просто отладка
От: L_user  
Дата: 11.11.05 09:35
Оценка:
Здравствуйте, Kemm, Вы писали:

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


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

L_>>ну так,- прямой путь ловить ошибку-отлаживать gdb ; не привыкать же к глюкам, как это приходиться делать Windows-пользователям, исходники-то есть, правильно?

K>Я выделил. Без How-To-Repeat дебажить можно долго и со вкусом. Только без толку. 8)) Причем замечено проявление только на FC2 и соляре 8/9. Пока не до того.


ну ладно, я же не настаиваю,

K>>>По делу: попробуй kdevelop (вдруг понравится, мне не пошел ни под каким соусом), vim с привязкой к gdb (скрипт на vim.sf.net)

L_>>
L_>>см. http://www.rsdn.ru/Forum/NewMsg.aspx?gid=22

K>Хм. И что в форме для нового сообщения я должен увидеть? 8))


промахнулся я, вот ссылка
http://www.rsdn.ru/Forum/?mid=1482119&flat=0
Автор: L_user
Дата: 10.11.05
Re[4]: emacs, и другие IDE/редакторы
От: L_user  
Дата: 11.11.05 10:05
Оценка:
Здравствуйте, eao197, Вы писали:

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


L_>>Anjuta

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

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


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

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

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


Видел я эту статью. Всей правды она не сказала, однобокая она.
Хотя бы потому, что обучить новичка (вчерашний студент) и нормально втянуть его в серьезный проект — это очень долго и стоит много денег. Вот тут-то IDE и помогает (и проект соберет, и в навигации поможет, и все это без излишних технических деталей). А со временем он разберется, если голова на плечах есть; это ведь ему самому нужно,
а не огранизации, где он работает, правильно?

Кстати, а чем Emacs не IDE (интегрированная среда разработки)? Все признаки есть: и окно компиляции, и окно
отладки, и speedbar для навигации, и привязка к CVS/RCS/... . И все это в включено в базовый пакет, а не внешние плугины.

Так что автор даже с терминами не разобрался ; так, на троечку ...

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


Не все ПО исчерпывается многопоточными/многопроцессорными программами. А если уж очень нужно добавить такой код
в проект, то адекватно организовать процесс след. образом:
— выделить пару-тройку знающих человек для разработки такого кода;
— всем остальным ограничить доступ к правке такого кода;

И тогда отладчик останется полезным инструментом (конечно, при условии, что те трое ответственно подходят
к своей работе).
Re[14]: просто отладка
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 11.11.05 10:19
Оценка:
Здравствуйте, L_user, Вы писали:

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


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


Почему же? Делаю и ошибки, и серьезные промахи при проектировании и пр. и пр.

L_>Я думаю, что после этой ошибки были сделаны соответствующие выводы; а до этого просто все работало, и никто даже

L_>и предполагать не мого, что возможны проблемы.

А вот здесь я не согласен. Использование нетривиальных конструкций языка (например, шаблон для перегрузки оператора запятая), да еще без опыта разработки многопоточных приложений -- это, имхо, явное напрашивание на неприятности. Пословица есть хорошая: "Не зная броду -- не суйся в воду".

L_> Уверен, что там кроме этой ошибки есть еще и другие (это нормальная

L_>ситуация в софтверной индустрии), просто еще не "стрельнули"; и той команде их придется отловить, как отловили
L_>эту. ИМХО.

Применение простых конструкций и решений серьезно уменьшают количество потенциальных и реальных ошибок в программе. И не требуют затем сложных инструментов для поиска ошибок. Вот, например, сколько тебе нужно времени, чтобы разобраться, как работает и как применять приведенный в Re[2]: sequence points
Автор: Dmi_3
Дата: 09.11.05
код (классы shared_resource, out_argument и lock, а так же функции access и swap)? А теперь сравни это с классом ACE_Guard:
/**
 * @class ACE_Guard
 *
 * @brief This data structure is meant to be used within a method or
 * function...  It performs automatic aquisition and release of
 * a parameterized synchronization object <ACE_LOCK>.
 *
 * The <ACE_LOCK> class given as an actual parameter must provide at
 * the very least the <acquire>, <tryacquire>, <release>, and
 * <remove> methods.
 */
template <class ACE_LOCK>
class ACE_Guard
{
public:

  // = Initialization and termination methods.
  ACE_Guard (ACE_LOCK &l);

  /// Implicitly and automatically acquire (or try to acquire) the
  /// lock.  If <block> is non-0 then <acquire> the <ACE_LOCK>, else
  /// <tryacquire> it.
  ACE_Guard (ACE_LOCK &l, int block);

  /// Initialise the guard without implicitly acquiring the lock. The
  /// <become_owner> parameter indicates whether the guard should release
  /// the lock implicitly on destruction. The <block> parameter is
  /// ignored and is used here to disambiguate with the preceding
  /// constructor.
  ACE_Guard (ACE_LOCK &l, int block, int become_owner);

  /// Implicitly release the lock.
  ~ACE_Guard (void);

  // = Lock accessors.

  /// Explicitly acquire the lock.
  int acquire (void);

  /// Conditionally acquire the lock (i.e., won't block).
  int tryacquire (void);

  /// Explicitly release the lock, but only if it is held!
  int release (void);

  /// Relinquish ownership of the lock so that it is not released
  /// implicitly in the destructor.
  void disown (void);

  // = Utility methods.
  /// 1 if locked, 0 if couldn't acquire the lock
  /// (errno will contain the reason for this).
  int locked (void) const;

  /// Explicitly remove the lock.
  int remove (void);

  /// Dump the state of an object.
  void dump (void) const;

  // ACE_ALLOC_HOOK_DECLARE;
  // Declare the dynamic allocation hooks.

protected:

  /// Helper, meant for subclass only.
  ACE_Guard (ACE_LOCK *lock): lock_ (lock) {}

  /// Pointer to the ACE_LOCK we're guarding.
  ACE_LOCK *lock_;

  /// Keeps track of whether we acquired the lock or failed.
  int owner_;

private:
  // = Prevent assignment and initialization.
  ACE_UNIMPLEMENTED_FUNC (void operator= (const ACE_Guard<ACE_LOCK> &))
  ACE_UNIMPLEMENTED_FUNC (ACE_Guard (const ACE_Guard<ACE_LOCK> &))
};



В общем, программирование -- это борьба со сложностью, а не порождение оной.
... << RSDN@Home 1.1.4 stable rev. 510>>


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

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


L_>Видел я эту статью. Всей правды она не сказала, однобокая она.


Да я не про стаью, а про обсуждение Забыл уточнить.

L_>Кстати, а чем Emacs не IDE (интегрированная среда разработки)? Все признаки есть: и окно компиляции, и окно

L_>отладки, и speedbar для навигации, и привязка к CVS/RCS/... . И все это в включено в базовый пакет, а не внешние плугины.

Кстати, а нафига IDE вообще нужна? А то я никогда не пользовался, не знаю, может это-то хорошее?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[15]: просто отладка
От: Kemm  
Дата: 11.11.05 10:27
Оценка: +1 :)
Здравствуйте, eao197, Вы писали:

L_>>Я думаю, что после этой ошибки были сделаны соответствующие выводы; а до этого просто все работало, и никто даже

L_>>и предполагать не мого, что возможны проблемы.
E>А вот здесь я не согласен. Использование нетривиальных конструкций языка (например, шаблон для перегрузки оператора запятая), да еще без опыта разработки многопоточных приложений -- это, имхо, явное напрашивание на неприятности. Пословица есть хорошая: "Не зная броду -- не суйся в воду".

Мне такое, честно говоря, больше анекдот напоминает:
-- Доктор, когда я делаю вот так (изображает что-то из йоги), у меня жутко болит спина.
-- А вы так не делайте!
Re[15]: просто отладка
От: Dmi_3 Россия  
Дата: 12.11.05 22:44
Оценка:
Здравствуйте, eao197, Вы писали:

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

Как раз там в крутизну не игрались. Даже template как в ACE_Guard не использовали. А явно повторили его код в каждом class lock_resource{…}; Для каждого типа ресурса.
Приведённые мной обёртки всего лишь обобщили и защитили их способ блокировок. И никак не провоцировали, а наоборот исправляли ошибку.

L_>Я думаю, что после этой ошибки были сделаны соответствующие выводы; а до этого просто все работало, и никто даже и предполагать не мого, что возможны проблемы.

E>А вот здесь я не согласен. Использование нетривиальных конструкций языка (например, шаблон для перегрузки оператора запятая), да еще без опыта разработки многопоточных приложений -- это, имхо, явное напрашивание на неприятности. Пословица есть хорошая: "Не зная броду -- не суйся в воду".
Это тоже неверно шаблон для перегрузки оператора запятая был введён специально для решения поставленной задачи. ПРИВЕСТИ К ТРУДНО ОБНАРУЖИМЫМ ОШИБКАМ ПРИЛОЖЕНИЯ. С чем блестяще справился. И наверно доставил массу радости своему создателю. (чего не скажешь обо мне, но я решал противоположную задачу).
Вы будете смеяться, но (несколько лет назад) это был именно мой первый практический опыт в многопоточном программировании.

E>> Применение простых конструкций и решений серьезно уменьшают количество потенциальных и реальных ошибок в программе. И не требуют затем сложных инструментов для поиска ошибок. Вот, например, сколько тебе нужно времени, чтобы разобраться, как работает и как применять приведенный в Re[2]: sequence points код (классы shared_resource, out_argument и lock, а так же функции access и swap)? А теперь сравни это с классом ACE_Guard:

Ну lock и ACE_Guard если не родные то двоюродные братья. А остальное связано с тем что я решал гораздо более сложный комплекс задач чем решает ACE_Guard. Например я ставил задачу запретить пользоваться разделяемым ресурсом без блокировок.
А о простоте и сложности я планирую написать в философии…
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.