Форум: "Основная";
Текущий архив: 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