Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

Как же неудобно отлаживать многопоточное приложение в Дельфи :(   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.044 c
2-1137076824
worldmen
2006-01-12 17:40
2006.01.29
Из Paradoxa 7 в другую БД.


2-1137160380
tech
2006-01-13 16:53
2006.01.29
Модератору


15-1136064024
begin...end
2006-01-01 00:20
2006.01.29
С днём рождения! 1 января


2-1137261934
Vovik
2006-01-14 21:05
2006.01.29
кодировки


3-1132920032
VadimSpb
2005-11-25 15:00
2006.01.29
Копирование таблицы