Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Трассировка порождённых процессов. [D5, Win2k]


Страницы:   1 2

DiamondShark ©   (2004-12-09 14:35:00) 

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


Digitman   (2004-12-10 14:35:00) [1]


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


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


DiamondShark   (2004-12-10 14:13:00) [2]


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

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

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

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


Digitman   (2004-12-10 13:44:00) [3]


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


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

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

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

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


DiamondShark   (2004-12-10 12:37:00) [4]


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

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


VMcL   (2004-12-10 12:33:00) [5]

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

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


DiamondShark   (2004-12-10 12:27:00) [6]


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

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


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


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


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


DiamondShark   (2004-12-10 11:43:00) [8]


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

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

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


TUser   (2004-12-10 10:09:00) [9]

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

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


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


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


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

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


DiamondShark   (2004-12-09 19:13:00) [11]


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

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

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


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

DiamondShark ©   (09.12.04 18:31) [15]

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

С уважением,


DiamondShark   (2004-12-09 18:31:00) [13]

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


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

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


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

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

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

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


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


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

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


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


> 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 16:03:00) [18]


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

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


Digitman   (2004-12-09 15:52:00) [19]


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


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


DiamondShark   (2004-12-09 15:47:00) [20]


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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо