Отладка многопоточных программ
От: Manticore США http://github.com/fjarri
Дата: 01.08.05 10:48
Оценка:
Подскажите, очень ли геморойно делать сабж? Может быть есть какие-то способы для упрощения?
Единственное, что приходит в голову — скидывание всех задач в один поток и написание
собственного таскменеджера, который бы осуществлял распределение квантов времени между задачами,
но уж очень это долго.
И вообще, используется ли отладчик в больших проектах, или применяются косвенные методы — вывод
отладочной инфы на экран или в лог, ассерты и тому подобные вещи?
Re: Отладка многопоточных программ
От: gbt Россия  
Дата: 01.08.05 11:04
Оценка:
Hello, Manticore, you wrote:

> Подскажите, очень ли геморойно делать сабж? Может быть есть какие-то способы для упрощения?

> Единственное, что приходит в голову — скидывание всех задач в один поток и написание
> собственного таскменеджера, который бы осуществлял распределение квантов времени между задачами,
> но уж очень это долго.
> И вообще, используется ли отладчик в больших проектах, или применяются косвенные методы — вывод
> отладочной инфы на экран или в лог, ассерты и тому подобные вещи?

А что, какие-то проблемы

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

Постоянно работаю с многопоточными приложениями с помощью обычного отладчика
MSVC 7.1 — мне его вполне хватает.

То, что в нем особенно удобно — он позволяет при останове программы просматривать
Call Stack для каждого из потоков, а также усыплять некоторые потоки (чтобы им
не давались кванты), и пробуждать соответственно. Чего не хватает — не дает
прибивать потоки. Для этого использую TaskManagerEx — Add-On к Task Manager.

Кстати, очень удобное дополнение к отладчику этот TaskManagerEx...

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
Re: Отладка многопоточных программ
От: jcukeng  
Дата: 01.08.05 11:07
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Подскажите, очень ли геморойно делать сабж? Может быть есть какие-то способы для упрощения?

M>Единственное, что приходит в голову — скидывание всех задач в один поток и написание
M>собственного таскменеджера, который бы осуществлял распределение квантов времени между задачами,
M>но уж очень это долго.
M>И вообще, используется ли отладчик в больших проектах, или применяются косвенные методы — вывод
M>отладочной инфы на экран или в лог, ассерты и тому подобные вещи?

Отладчик от MS хорош.
NuMega BoundsChecker рулит.
NuMega SoftIce тоже рулит
и вывод логов в файл/EventLog тоже неплох(но лучше в файл),иногда это единственный способ быстро найти проблемный кусок.

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

Напиши отдельный поток, который пишет в лог-файл.
и thread-safe очередь сообщений.
Это не очень напряжно, но потом пригодится в десятке проектов.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[2]: Отладка многопоточных программ
От: MaximE Великобритания  
Дата: 01.08.05 11:18
Оценка: +1
jcukeng wrote:

[]

> Напиши отдельный поток, который пишет в лог-файл.

> и thread-safe очередь сообщений.

Может легко случиться так, что приложение рухнет до того момента, как этот отдельный поток успеет сделать запись в лог файл.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Re[3]: Отладка многопоточных программ
От: jcukeng  
Дата: 01.08.05 11:26
Оценка:
Здравствуйте, MaximE, Вы писали:
ME>Может легко случиться так, что приложение рухнет до того момента, как этот отдельный поток успеет сделать запись в лог файл.
Факт.
Но такое отлаживается стандартными средствами. Тем же баундсчекером.
Я имел в виду поиск сложных ошибок, когда прога работает, но (не совсем) некорректно.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re: Отладка многопоточных программ
От: MaximE Великобритания  
Дата: 01.08.05 11:40
Оценка:
Manticore wrote:

> Подскажите, очень ли геморойно делать сабж? Может быть есть какие-то способы для упрощения?

> Единственное, что приходит в голову — скидывание всех задач в один поток и написание
> собственного таскменеджера, который бы осуществлял распределение квантов времени между задачами,
> но уж очень это долго.

На однопроцессорной тачке (без HT) именно это и происходит — в единицу времени работает только один поток.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Re: Отладка многопоточных программ
От: remark Россия http://www.1024cores.net/
Дата: 05.08.05 13:44
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Подскажите, очень ли геморойно делать сабж?


Если есть ошибки многопоточности, то может быть очень гемморойно, т.к. ошибка может возникать, например, 1 раз в день, или только на определённой машине.

M>Может быть есть какие-то способы для упрощения?


Именно про отладку тут уже писали. Главное программу писать окуратно. Ресурсы делать многопоточными, что бы они сами себя защищали и т.д. Если всё грамотно делать, то отлаживать редко когда приходиться.

M>Единственное, что приходит в голову — скидывание всех задач в один поток и написание

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

А толку??? Менеджер потоков уже написан, и он есть в составе ОС. Смысл??? Будут те же проблемы.

M>И вообще, используется ли отладчик в больших проектах, или применяются косвенные методы — вывод

M>отладочной инфы на экран или в лог, ассерты и тому подобные вещи?

В больших проектах применяется всё и сразу!

1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Отладка многопоточных программ
От: volk  
Дата: 09.08.05 17:50
Оценка:
Здравствуйте, Manticore, Вы писали:

M>Подскажите, очень ли геморойно делать сабж? Может быть есть какие-то способы для упрощения?

M>Единственное, что приходит в голову — скидывание всех задач в один поток и написание
M>собственного таскменеджера, который бы осуществлял распределение квантов времени между задачами,
M>но уж очень это долго.
M>И вообще, используется ли отладчик в больших проектах, или применяются косвенные методы — вывод
M>отладочной инфы на экран или в лог, ассерты и тому подобные вещи?

Делать не геморойно. Методы отладки довольно быстро вырабатываются свои.
Вот еще один: использовать барьерную синхронизацию, чтобы в каждый момент был активен только один поток. Но это уже для особо тяжелых случаев.
Тот, кто желает, но не делает, распространяет чуму.
Re: Отладка многопоточных программ
От: Awaken Украина  
Дата: 10.08.05 07:00
Оценка:
M>Подскажите, очень ли геморойно делать сабж? Может быть есть какие-то способы для упрощения?
M>Единственное, что приходит в голову — скидывание всех задач в один поток и написание
M>собственного таскменеджера, который бы осуществлял распределение квантов времени между задачами,
M>но уж очень это долго.
M>И вообще, используется ли отладчик в больших проектах, или применяются косвенные методы — вывод
M>отладочной инфы на экран или в лог, ассерты и тому подобные вещи?


не так уж геморойно
алгоритм отлаживаешь в однопоточном варианте.
если он уж точно работает в однопоточном варианте и есть проблемы с синхронизацией —
пишешь в лог (лучше в файл) -чтобы восстановить временную последовательность
захвата определенных ресурсов

для тестирования многопоточных приложений хорошо бы написать фреймворк (каркас)
в простейшем варианте это консольное приложение с возможностью задания
числа потоков, таймаутов между ними и уровня логирования (verbose)
Re[2]: Отладка многопоточных программ
От: MaximE Великобритания  
Дата: 10.08.05 08:24
Оценка: +1
Здравствуйте, Awaken, Вы писали:

[]

A>если он уж точно работает в однопоточном варианте и есть проблемы с синхронизацией -

A>пишешь в лог (лучше в файл) -чтобы восстановить временную последовательность
A>захвата определенных ресурсов

Запись в лог будет может сериализовывать твои потоки, поэтому с логгингом криво написанный многопоточный код может заработать.
Re: Отладка многопоточных программ
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.08.05 09:00
Оценка: 10 (1)
Здравствуйте, Manticore, Вы писали:

M>Подскажите, очень ли геморойно делать сабж? Может быть есть какие-то способы для упрощения?


Отладка приложений Microsoft .NET и Microsoft Windows
Автор(ы): Джон Роббинс

Ошибки — жуткая гадость. Многоточие... Ошибки являются причиной обреченных
на гибель проектов с сорванными сроками, ночными бдениями и опостылевшими
коллегами. Ошибки могут превратить вашу жизнь в кошмар, поскольку, если
изрядное их число затаится в вашем продукте, пользователи могут прекратить
его применение, и вы потеряете работу. Ошибки — серьезный бизнес.
-> Глава 15, Глава 18
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Отладка многопоточных программ
От: Ka3a4oK  
Дата: 14.08.05 11:03
Оценка:
gbt>Для этого использую TaskManagerEx — Add-On к Task Manager.
gbt>Кстати, очень удобное дополнение к отладчику этот TaskManagerEx...
Это та, которая на Codeproject ?

gbt>--

gbt> Igor Polyakov — igorpol_gbt (at) mail (dot) ru
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[3]: Отладка многопоточных программ
От: gbt Россия  
Дата: 14.08.05 16:48
Оценка:
Hello, Ka3a4oK, you wrote:

gbt>>Для этого использую TaskManagerEx — Add-On к Task Manager.

gbt>>Кстати, очень удобное дополнение к отладчику этот TaskManagerEx...
> Это та, которая на Codeproject ?

Он(а) самый(ая).

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
Re[4]: Отладка многопоточных программ
От: Ka3a4oK  
Дата: 14.08.05 16:58
Оценка:
Что-то mdm.exe себя как-то странно ведет с эти add-on ом. Загрузка ЦП 100 %
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[5]: Отладка многопоточных программ
От: gbt Россия  
Дата: 15.08.05 07:10
Оценка:
Hello, Ka3a4oK, you wrote:

> Что-то mdm.exe себя как-то странно ведет с эти add-on ом. Загрузка ЦП 100 %


У меня все в порядке и под Server 2003, и под XP SP2.

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.