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

Вниз

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

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

Наверх




Память: 0.54 MB
Время: 0.036 c
4-1099691264
GanibalLector
2004-11-06 00:47
2004.12.26
Handle is edit???


1-1102606780
Wolffgang
2004-12-09 18:39
2004.12.26
Hot key?


14-1102443677
Def
2004-12-07 21:21
2004.12.26
Операционные усилители


3-1101180476
Wood
2004-11-23 06:27
2004.12.26
Методы DBGrid или DataSet?


1-1103073956
Builder
2004-12-15 04:25
2004.12.26
Убить себя