Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1136193020
SergP
2006-01-02 12:10
2006.01.29
ИЕ. Начиная с какой версии поддерживается длина ключа 128 бит?


2-1136800381
Foxtrot
2006-01-09 12:53
2006.01.29
Как в SQL использовать CreateIndex (забыл синтаксис)


2-1137080568
Дева
2006-01-12 18:42
2006.01.29
нетипизированный файл и процедура BlockRead


6-1129727738
Sergey840
2005-10-19 17:15
2006.01.29
IdHTTP (Загрузка страницы с 404 ошибкой)


15-1135972937
версия для печати
2005-12-30 23:02
2006.01.29
События года





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский