Форум: "Прочее";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
ВнизКак же неудобно отлаживать многопоточное приложение в Дельфи :( Найти похожие ветки
← →
Piter © (2006-01-05 13:51) [0]Это ужас... Сегодня до трех ночи сидел... Дебаггер все время виснет, причем вешает за собой весь "сеанс" :(
Приходится WIN+L и в другом сеансе снимать Delphi :(
Просто мучение... Интересно, а на всяких VC студиях такая же фигня?
← →
Игорь Шевченко © (2006-01-05 13:52) [1]
> на всяких VC студиях такая же фигня?
Такая же.
← →
TUser © (2006-01-05 14:04) [2]3 потока отлаживал - не видел проблем. D7, Metro edition.
← →
Piter © (2006-01-05 14:15) [3]Игорь Шевченко © (05.01.06 13:52) [1]
а, кстати, ваше решение проблемы?
Я так подозреваю использовать дебагер некошерно в данном случае... Логи?
← →
Игорь Шевченко © (2006-01-05 14:27) [4]Piter © (05.01.06 14:15) [3]
> а, кстати, ваше решение проблемы?
1. Использовать более одного физического процессора
2. Руки выпрямить
← →
Piter © (2006-01-05 15:15) [5]Игорь Шевченко © (05.01.06 14:27) [4]
1. Использовать более одного физического процессора
а каким образом количество процессоров связано с отладкой многопоточного приложения? И сколько должно быть процессоров? Столько же, сколько и потоков?
Игорь Шевченко © (05.01.06 14:27) [4]
. Руки выпрямить
кому руки выпрямить? Мне?
А вы их видели, они кривые?
Что я не так делаю?
← →
Игорь Шевченко © (2006-01-05 15:37) [6]Piter © (05.01.06 15:15) [5]
> а каким образом количество процессоров связано с отладкой
> многопоточного приложения? И сколько должно быть процессоров?
>
На однопроцессорной системе потоки выполняются последовательно, на многопроцессорной системе - параллельно. При этом все ошибки синхронизации проявляются гораздо быстрее, чем при последовательном выполнении. HyperThreading в этом отношении немного лучше, но более одного физического процессора позволяет наступить на грабли гораздо быстрее.
> А вы их видели, они кривые?
> Это ужас... Сегодня до трех ночи сидел... Дебаггер все время
> виснет, причем вешает за собой весь "сеанс" :(
> Приходится WIN+L и в другом сеансе снимать Delphi :(
>
> Просто мучение...
Считай, что видел
← →
Piter © (2006-01-05 16:07) [7]Игорь Шевченко © (05.01.06 15:37) [6]
Считай, что видел
Игорь, вы вот сами то как считаете - вы сейчас помогаете или понты раскидываете?
"- Я делаю так-то, у меня не получается
- У тебя руки кривые"
Это все, что вы можете сказать? Тогда иногда лучше жевать, уж извините.
Игорь Шевченко © (05.01.06 15:37) [6]
При этом все ошибки синхронизации проявляются гораздо быстрее
вряд ли у меня ошибка в синхронизации. Там потоки делают выборку из TThreadList и собственно все, больше не взаимодействуют...
← →
Piter © (2006-01-05 16:12) [8]Игорь Шевченко © (05.01.06 15:37) [6]
Считай, что видел
тем более - вы вот говорите о кривости моих рук.
Да даже если у меня руки СВЕРХ-кривые, это что нужно сделать, чтобы винда зависла?
Или вы мне не верите, что зависает? Ну я тогда даже не знаю как доказать - может, видеоролик снять?
Все работает нормально, но стоит поставить BreakPoint - он срабатывает и все виснет. Explorer не реагирует, Delphi тоже, воообще ничего не работает. CTRL+ALT+DEL без реакции.
Я обнаружил, что Windows реагирует только на WIN+L, тогда без проблем выкидывает в Logon screen, загружаешься под другой записью и снимаешь процесс Delphi.
Виснет, конечно, по breakpoint"у ДАЛЕКО не всегда, но часто. Если активно трассировать программу - то раз в минуту зависнет точно.
← →
TUser © (2006-01-05 16:13) [9]
> Piter ©
Кстати, у тебя три одного TThread"а выполняются, или несколько разных потоков?
← →
Игорь Шевченко © (2006-01-05 16:20) [10]Piter © (05.01.06 16:07) [7]
> Игорь, вы вот сами то как считаете - вы сейчас помогаете
> или понты раскидываете?
прости, а ты где-то просишь о помощи ? Не увидел. На мой взгляд ты просто описываешь впечатления о процессе отладки, не давая никакой конкретики. В случае отсутствия конкретики я могу предположить только единственную проблему, которую честно посоветовал исправить.
← →
Piter © (2006-01-05 16:39) [11]TUser © (05.01.06 16:13) [9]
Кстати, у тебя три одного TThread"а выполняются, или несколько разных потоков?
ничего не понял... У меня, конечно, есть наследник от TThread, этого наследника несколько экземпляров есть, но так как это разные экземпляры, то и потоки разные...
Что-то я не понял вороса
Игорь Шевченко © (05.01.06 16:20) [10]
прости, а ты где-то просишь о помощи ?
ну в целом я, конечно, не отказался бы от способа, при котором Delphi перестанет зависать и вешать всю систему. Несомненно не отказался бы.
Просто подозреваю, что проблему никто не решит, ибо:
1) пишу я вроде все правильно. по крайней мере работает корректно...
2) даже если предположить, что пишу я криво - то в любом случае не должно быть такого, что все вешается, верно?
Это вроде того:
- Народ, я тут из под Гостя работаю, писал программку и обнаружил, что получил права администратора
На что следует ответ:
- а у тебя руки кривые
Понимаете, руки может и кривые, но какие бы они не были кривые - такого не должно быть. Имхо.
Конечно, вы легко можете говорить, что у меня кривые руки и проблем с отладкой многопоточных приложений в D7 на WinXP SP2 нету. Я вам обратного не докажу.
Могу кинуть код - но вы вряд ли в нем будете разбираться.
Я все таки грешу на Delphi / Windows, как бы вас это не смешило.
Я и при отладке библиотек (DLL) встречал неадекватное поведение отладчика Delphi, опять же при работе с НЕ основным потоком, выражающееся в зависании всей Delphi.
← →
Игорь Шевченко © (2006-01-05 17:03) [12]
> ну в целом я, конечно, не отказался бы от способа, при котором
> Delphi перестанет зависать и вешать всю систему. Несомненно
> не отказался бы.
Ну вот видишь, тогда сделай первый шаг - выполни мой совет.
← →
Lamer@fools.ua © (2006-01-05 17:10) [13]>>Piter © (05.01.06 13:51)
Глобальные хуки есть?
← →
Marser © (2006-01-05 17:11) [14]
> Логи?
Хороший вариант.
← →
pasha_golub © (2006-01-05 17:17) [15]Логи, кстати, классная штука. Только их надо при поектировании закладывать, а то потом устаешь вставлять по коду...
← →
Piter © (2006-01-05 20:01) [16]Игорь Шевченко © (05.01.06 17:03) [12]
Ну вот видишь, тогда сделай первый шаг - выполни мой совет
мне это недоступно. Я даже думаю, вы догадываетесь об этом. Зачем тут ломать комедию?
Lamer@fools.ua © (05.01.06 17:10) [13]
Глобальные хуки есть?
нету
← →
Zeqfreed © (2006-01-05 20:05) [17]Lamer@fools.ua © (05.01.06 17:10) [13]
Вот, у меня тоже есть на что пожаловаться! :)
У меня при попытке трассировки программы, использующей (устанавливающей) глобальный хук все намертво виснет. Видимо так и должно быть, раз появился такой вопрос? Мне просто интересно, есть ли способ трассировать такую программу из IDE Delphi?
Надеюсь, сильно не помешал своим «встреванием».
← →
jack128 © (2006-01-05 20:30) [18]Zeqfreed © (05.01.06 20:05) [17]
Видимо так и должно быть,
да, так и должно быть. исходя из ОПРЕДЕЛЕНИЯ глобального хука.
Zeqfreed © (05.01.06 20:05) [17]
Мне просто интересно, есть ли способ трассировать такую программу из IDE Delphi?
Может быть.. смотря, что ты хочешь добится эти глоальным хуком.. На вскидку - отладь свою прогу на локальном хуке, а потом переставь на глобальный..
← →
Zeqfreed © (2006-01-05 20:42) [19]jack128 © (05.01.06 20:30) [18]
> смотря, что ты хочешь добится эти глоальным хуком
Ну, на самом деле от этого хука мне требуется только внедрение в чужое ВАП. Есть, конечно, и другие способы, но этот мне кажется более удобным, хотя и появляются такие «осложнения» :)
← →
jack128 © (2006-01-05 20:49) [20]Zeqfreed © (05.01.06 20:42) [19]
Ну, на самом деле от этого хука мне требуется только внедрение в чужое ВАП
Это не подходит?
jack128 © (05.01.06 20:30) [18]
отладь свою прогу на локальном хуке
← →
Zeqfreed © (2006-01-05 21:30) [21]jack128 © (05.01.06 20:49) [20]
> отладь свою прогу на локальном хуке
Если честно, то я не совсем понимаю как можно отладить мой перехват API-функций локальным хуком. По сути, сама ф-ция хука у меня пустая и просто вызывает следующую ловушку в цепи.
← →
jack128 © (2006-01-05 22:22) [22]если чесно тоже не понимаю в чем проблема. Устанавливаешь хук на конкретный поток контретной программы и смотришь как эта конкретная программа реагирует на перехват апи. в теории зависнуть должна только эта прогамма..
← →
Zeqfreed © (2006-01-05 22:27) [23]jack128 © (05.01.06 22:22) [22]
Все, теперь понял :) Я просто почему-то зациклился на мысли, что локальный — это тот, который на текущий поток ставится. Про одиночный чужой поток я как-то и не подумал. Спасибо, будем пробовать :)
← →
iZEN © (2006-01-05 22:48) [24]Аналогично — Piter © (05.01.06 14:15) [3].
Нужно вести логи.
← →
SPeller © (2006-01-05 23:35) [25]Можно задать конкретный вопрос - есть ли причины, однозначно вешающие IDE при отладке многопоточного приложения? А то полемики вокруг мудрых советов и кривых рук полно, а всеми желаемого вопроса и ответа так и не прозвучало.
← →
Marser © (2006-01-06 00:14) [26]
> iZEN © (05.01.06 22:48) [24]
> Аналогично — Piter © (05.01.06 14:15) [3].
> Нужно вести логи.
Я так и делаю. У меня до восьми собственных невизуальных потоков.
← →
Fay © (2006-01-06 00:20) [27]2 Marser © (06.01.06 0:14) [26]
> невизуальных потоков
Интуитивно понятно, что имелось ввиду, но звучит дико 8)
← →
Джо © (2006-01-06 00:24) [28]> [26] Marser © (06.01.06 00:14)
> У меня до восьми собственных невизуальных
> потоков.
А есть и визуальные? ;)
← →
Marser © (2006-01-06 00:43) [29]
> А есть и визуальные? ;)
Ну ваще-та один :-)
> Интуитивно понятно, что имелось ввиду, но звучит дико 8)
Понимаю. Немного под влиянием змия ;-)
← →
Piter © (2006-01-06 01:59) [30]SPeller © (05.01.06 23:35) [25]
есть ли причины, однозначно вешающие IDE при отладке многопоточного приложения?
абсолютно, имхо, спонтанно.
Тем более при работе то все ок :) Проблема, когда ставишь брекпоинт и происходит остановка по нему...
Можно заморочиться и попытаться писать простые примеры с потоками, чтобы демонстрировать глюк... Но мне лично сейчас некогда...
← →
Гаврила © (2006-01-06 02:34) [31]
> Piter ©
А какая версия Delphi?
А насчет кривости рук не обижайся на Игоря, это он всем раздает ))
мне тоже досталось давеча, и ровно по той же причине :Среда глючит (следовательно, руки кривые) :-)
← →
Игорь Шевченко © (2006-01-06 11:14) [32]Piter © (05.01.06 20:01) [16]
> мне это недоступно.
С чего-то надо надо начинать, верно ? Начни хотя бы с малого :)
Гаврила © (06.01.06 02:34) [31]
Компоненты у тебя кривые :) Уже обсуждали, не возводи напраслину.
← →
SPeller © (2006-01-06 11:24) [33]Игорь Шевченко © (06.01.06 11:14) [32]
Компоненты у тебя кривые
Может вы покажете свои прямые руки, позволяющие не виснуть IDE при отладке многопоточных приложений? Или дадите ссылочку, где описаны способы выпрямления? А то один пустой флейм не в тему. Если никто не знает ответа на вполне конкретный вопрос [25], то закрывайте ветку нафик. Всё сетуем на то, что вопросы не те, а как получаем тот вопрос, то отвечающие становятся не те.
← →
Игорь Шевченко © (2006-01-06 11:35) [34]SPeller © (06.01.06 11:24) [33]
Приезжай в гости, посмотришь :)
← →
DiamondShark © (2006-01-06 11:53) [35]Хуком слева и прямым в челюсть...
(так... музыкой навеяло...)
← →
Sandman29 © (2006-01-06 11:58) [36]DiamondShark © (06.01.06 11:53) [35]
А мне вот интересно - что первично: музыка или сознание? Ты слушаешь агрессивную музыку, потому что агрессивный, или агрессивный, потому что слушаешь агрессивную музыку? Или причина вообще третья?
← →
Alex Konshin © (2006-01-06 12:20) [37]Надо не логи использовать, а ODS (OutputDebugString). Она, правда тоже замедляет исполнение, но зато меньше влияет на сам процесс. Смотреть ODS лучше из DebugView (http://www.sysinternals.com), так как он несравнимо легче Delphi IDE и позволяет смотреть ODS на другой машине.
← →
SPeller © (2006-01-06 12:21) [38]Опять интересный вопрос пропадает во флуде. Ну что-ж...
← →
Mystic © (2006-01-06 12:32) [39]> Может вы покажете свои прямые руки, позволяющие не виснуть
> IDE при отладке многопоточных приложений?
У меня IDE не виснет. Что я делаю не так?
← →
Piter © (2006-01-06 14:36) [40]Гаврила © (06.01.06 2:34) [31]
А какая версия Delphi?
D7
Alex Konshin © (06.01.06 12:20) [37]
Надо не логи использовать, а ODS (OutputDebugString)
была идея. Но опять же - ну не тыкать же везде где только можно вывод значения переменных?
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.046 c