Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Вниз

Трассировка порождённых процессов.   Найти похожие ветки 

 
DiamondShark ©   (2004-12-09 14:35) [0]

Есть группа из двух проектов.
Процесс project1 порождает процесс project2. Надо оттрасировать процесс project2, причём важен именно факт порождения его процессом project1.
Конечно, если установить флажок Debug spawned processes и запустить project1, то процесс project2 трассируется. Но только на уровне машинного кода. А хотелось бы полноценной отладки на уровне исходного кода.


 
Digitman ©   (2004-12-09 14:50) [1]

что мешает запустить автономно project2 обычным образом в Делфи-среде под встр.отладчиком, эмулируя передаваемые ему процессом project1 параметры указанием их в меню Run -> Parameters .. ?


 
DiamondShark ©   (2004-12-09 14:57) [2]

А параметры не интересуют.


 
TUser ©   (2004-12-09 14:58) [3]

Я отлаживал такую конструкцию. Перед тем, как породить Pr2 первый процесс проверяет, не запущен ли он. Если уже запущен - работаем с имеющейся копией, если нет - пускаем. Это позволяет его отлаживать.
Заметен глюк ломаной Delphi - при запуске двух ее копий, если в каждой из них идет отладка, то переодически вываливается сообщение (что-то про лицензию) и дальше IDE и отладчик работать отказываются. Спасает только перезагрузка.


 
Digitman ©   (2004-12-09 15:03) [4]


> DiamondShark ©   (09.12.04 14:57) [2]
> А параметры не интересуют.


ну так тем более !
ЧТО мешает отладить project2 ОБЫЧНЫМ образом ?


 
DiamondShark ©   (2004-12-09 15:08) [5]


> Если уже запущен - работаем с имеющейся копией, если нет
> - пускаем. Это позволяет его отлаживать.

К сожалению, не подходит. Нужен именно такой сценарий, как описано.


 
DiamondShark ©   (2004-12-09 15:24) [6]


> ЧТО мешает отладить project2 ОБЫЧНЫМ образом ?

Ничего, кроме бесполезности такой отладки.

Предвидя, что следующим будет вопрос: "А зачем тебе это нужно" объясняю.

Первый процесс подставляет второму хэндлы ввода/вывода.
До второго процесса хэндлы доходят. Это показывает успешный вызов GetStdHandle/ReadFile/WriteFile во втором процессе.

Но эти хэндлы чем-то не нравятся RTL для стандартных read/write.
Чтобы выяснить, чем именно не нравятся, хочу оттрассировать RTL.


 
Digitman ©   (2004-12-09 15:27) [7]

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


 
DiamondShark ©   (2004-12-09 15:47) [8]


> Digitman ©   (09.12.04 15:27) [7]

Точно. А мы и не знали.


 
Digitman ©   (2004-12-09 15:52) [9]


> А мы и не знали


действительно ... а все оказывается проще пареной репы ...


 
DiamondShark ©   (2004-12-09 16:03) [10]


> Digitman ©   (09.12.04 15:52) [9]

Ты ветку перед тем как постить читаешь?


 
Leonid Troyanovsky   (2004-12-09 16:12) [11]


> DiamondShark ©   (09.12.04 15:24) [6]

> Но эти хэндлы чем-то не нравятся RTL для стандартных read/write.


the Win32 API has a function get the standard file handles:

 hStderr := GetStdHandle( STD_ERROR_HANDLE );
 
Getting a Delphi Textfile variable to use this handle requires a bit of
unpleasant digging into the entrails of the file variables. You can do it
this way:

Var
  stderr: Textfile;
 
Begin
  WriteLn;  
  // essential to write something to stdout, otherwise output will
  // not be open!
  Move( output, stderr, Sizeof( stderr ));
  TTextRec( stderr ).Handle := GetStdhandle( STD_ERROR_HANDLE );
 
  WriteLn( stderr, "Bad, bad app!" );
 
There is no need to close this handle, as far as i"m aware.  

Peter Below (TeamB)  100113.1101@compuserve.com)

--
С уважением, LVT.


 
DiamondShark ©   (2004-12-09 17:05) [12]


> Leonid Troyanovsky   (09.12.04 16:12) [11]

Сильно. А главное -- в тему.


 
Юрий Зотов ©   (2004-12-09 18:09) [13]

> DiamondShark ©   (09.12.04 15:24) [6]

> Первый процесс подставляет второму хэндлы ввода/вывода.
> До второго процесса хэндлы доходят...
> Но эти хэндлы чем-то не нравятся RTL для стандартных
> read/write.

Передаваемые хэндлы должны быть наследуемыми. Иначе для дочернего процесса они не будут действительными.


 
Юрий Зотов ©   (2004-12-09 18:17) [14]

Добавление - и передавать наследуемые хэндлы надо не через параметры командной строки, а через параметры CreateProcess (заполнить 5 полей в StartupInfo и выставить флаг bInheritHandles). Тогда GetStdHandle в дочернем процессе даст то, что нужно.


 
DiamondShark ©   (2004-12-09 18:31) [15]

Забавно так народ клинит...


 
Игорь Шевченко ©   (2004-12-09 18:43) [16]

DiamondShark ©   (09.12.04 18:31) [15]

А привести ключевые моменты кода и кода с проблемой религия не позволяет ?

С уважением,


 
DiamondShark ©   (2004-12-09 19:13) [17]


> Игорь Шевченко ©   (09.12.04 18:43) [16]

Нету у меня кода с проблемами. НЕ-ТУ!

Есть вопрос по фичам среды.


 
Leonid Troyanovsky   (2004-12-10 08:55) [18]


> DiamondShark ©   (09.12.04 17:05) [12]
> Сильно. А главное -- в тему.


Ну извини, что отвлек.
Трассируй дальше.

--
С уважением, LVT.


 
TUser ©   (2004-12-10 10:09) [19]

Здесь очень умные люди обсуждают, но с моей ламерской позиции Delphi запускает отлаживаемый процесс наверное через CreateProcess с флагом DEBUG_PROCESS. Т.е. отлажиаваемый процесс порождается Делфей и наследовать хендлы может только от него. Он не может быть порожден сразу и от Delphi, и от первого процесса.

Можно попробовать не наследовать хендлы, а передавать их через DuplicateHandle.


 
DiamondShark ©   (2004-12-10 11:43) [20]


> TUser ©   (10.12.04 10:09) [19]

Но ведь дельфи умеет подключаться к запущенным процессам.
И порождённые процессы тоже отлаживает (Флаг Debug spawned processes). Только в машинных кодах.
Вот я и думал, что может быть можно точно так же, но с исходным кодом.

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


 
Суслик ©   (2004-12-10 11:56) [21]


> бы до второго пришествия мучали бы распросами: "А зачем
> тебе это надо? А давно это у тебя началось? А вы хотите
> об этом поговорить?"


А ты чего хотел - чтобы тебе ответ дали?


 
DiamondShark ©   (2004-12-10 12:27) [22]


> Суслик ©   (10.12.04 11:56) [21]

Ну, я по наивности полагал, что да.
Тем более, что ответ-то простой. Либо: "А нету нифига такой фичи", либо: "Делается это так-и-так".


 
VMcL ©   (2004-12-10 12:33) [23]

>>DiamondShark ©  (10.12.04 12:27) [22]

Не уверен, но можно попробовать сбилдить с внешней дебажной информацией (той, которая в EXE включается; забыл, как называется) - опция DCC32 "-V", если не ошибаюсь. А потом приаттачиться к этому EXE с помощью TD32 (не уверен, что можно, - Delphi нет, чтобы проверить).


 
DiamondShark ©   (2004-12-10 12:37) [24]


> VMcL ©   (10.12.04 12:33) [23]

Попробую.
Сечас нет ТД, чтоб попробовать ;)


 
Digitman ©   (2004-12-10 13:44) [25]


> DiamondShark ©   (09.12.04 16:03) [10]


нет, ты чего вновь клоунаду устроил-то, умник ?

в [2] ты заявил, что параметры тебе не интересуют
в [7] я предположил, что раз параметры тебя не интересуют, то оба процесса у тебя ВОБЩЕ НИКАК не взаимодействуют

и лишь в [12] ты снизошел таки до открытия коленопреклоненной общественности твою великую страшную тайну, что у тебя, оказывается

> Первый процесс подставляет второму хэндлы ввода/вывода


 
DiamondShark ©   (2004-12-10 14:13) [26]


> Digitman ©   (10.12.04 13:44) [25]

У тебя какие-то проблемы? Хочешь поговорить об этом?

Если ты вообразил себя коленопреклонённым, чьи это проблемы?
Если ты ощутил в себе вселенскую миссию дать окончательное решение всем вопросам, чьи это проблемы?
Если описание, лично тебе не понятное, ты считаешь личным оскорблением и не спишь по ночам, чьи это проблемы?

Расслабься, и не делай из своих глюков мировых проблем.


 
Digitman ©   (2004-12-10 14:35) [27]


> DiamondShark ©   (10.12.04 14:13) [26]


лишний раз убедился в правильности своих представлений о тебе



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.091 c
3-1101714458
ruslan_as
2004-11-29 10:47
2004.12.26
Какими компонентами и как создавать скриптами таблицы InterBase


4-1100368684
Cheburek
2004-11-13 20:58
2004.12.26
Быстро получить список директории с его подкатал-ми и файлами?


11-1084540772
Yustas
2004-05-14 17:19
2004.12.26
Много памяти


1-1102916467
Sicwell
2004-12-13 08:41
2004.12.26
Создать поток в DLL


1-1102678554
Zilog
2004-12-10 14:35
2004.12.26
Как завершить работу потока принудительно, в ходе его работы?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский