2010-06-25 2 views
4

Мне интересно, можно ли обойти OutputDebugString? Я бы хотел, чтобы выход OutputDebugString отображался в DebugView, а не во внутреннем окне просмотра событий Delphi. Но я не могу найти способ сказать Delphi не проглатывать OutputDebugString. Есть идеи?Bypass OutputDebugString в Delphi 7?

рассматривает

+2

Он должен появиться в окне Delphi _and_ в DebugView. Можете ли вы подтвердить, что это происходит? –

+2

У меня тоже есть Delphi 7, и он не отображается в DebugView, только в журнале событий Delphi. –

+2

Он отображается только в журнале событий Delphi, если он работает в сеансе отладки. Если приложение запущено без прикрепленного отладчика, то OutputDebugString улавливается DebugView. – pantarhei

ответ

0

Отключение «вывода сообщений» в свойствах журнала событий не работает?

+0

Да. Это не работает. – splash

+1

Результатом является то, что сообщения не отображаются во внутреннем журнале событий. Но они все еще поглощены отладчиком. – pantarhei

+0

Я боюсь, что однажды отладчик, подключенный к процессу Windows, отправляет вывод этому отладчику. – 2010-06-25 09:30:21

1

Я думаю, что нет никакого способа обойти это. Ситуация по-прежнему сохраняется в Delphi 2009. Вы должны отправить запрос на функцию: http://qc.embarcadero.com

Мне интересно, какое преимущество должно быть во внутреннем окне журнала событий Delphi?

+0

Преимущество состоит в том, что вы можете отфильтровать строки отладки в DebugView. Делает жизнь намного проще. – pantarhei

+0

Вам действительно нужно больше, чем фильтр включения/выключения в Delphi? ;-) – splash

+0

Отправка запроса функции для D7? Ты шутишь, что ли? Я уверен, что они не собираются добавлять его в D7, если в данный момент это невозможно в D09. – pantarhei

3

Это невозможно.

OutputDebugString отправляет строку в отладчик (как следует из названия). Для каждого процесса может быть только один активный отладчик. Вы запускаете свое приложение в Delphi - Delphi получил сообщения, так как его отладчик. Вы запускаете приложение за пределами Delphi - DebugView может получить к ним доступ, поскольку отладчик не потребовал его.

Однако: ПОЧЕМУ Вам это нужно? Просто отключите другие типы событий в журнале событий Delphi - и вы получите ту же функциональность, что и DebugView.

+1

Я знаю, что вывод отправляется в отладчик. Мой вопрос - как обойти его. Но похоже, что нет возможности обойти его. И я не получаю такую ​​же функциональность, если я отключу другие типы. Я все еще получаю сотни отладочных сообщений. В DebugView я могу отфильтровать вывод, и поэтому я только увижу, что меня интересует в данный момент. Это имеет огромное значение. – pantarhei

+1

@pantharhei: смотрите здесь http://d-fens.net/?idMenu=3&idSub=8&idPage=1&uLinkPages=1&uToc=0, мне кажется, что это должно быть возможно. Исходный код перенаправления предоставляется автором по запросу. –

+0

@Lieven: Это выглядит интересно. Будет более пристальный взгляд, если время давления исчезнет. Это когда-нибудь исчезнет? ;) – pantarhei

0

Не то, что задал первоначальный вопрос, я понимаю, но стоит взглянуть на CodeSite от Raize Software. Он выводит OutputDebugString на совершенно новый уровень. Сообщения (могут) передаваться в средство просмотра CodeSite, что примерно эквивалентно высокоуровневому DebugView. Ну стоит каждый пенни ИМХО.

+0

Несомненно. Но не в моей обязанности заказывать или вводить эти инструменты. Я также посмотрел на SmartInspect. Было бы неплохо иметь, конечно. Но не сейчас. – pantarhei

+0

Напротив, Pantarhei, это * каждая обязанность вводить полезные инструменты своим сверстникам. –

+0

Хорошо. Использовал неправильные слова. Поэтому я уже представил инструменты.Но я не могу решить, будут ли они куплены и интегрированы в существующую оснастку. – pantarhei

1

Вместо DebugView вы можете попробовать использовать Process Monitor и его новую возможность «отладки». Он не использует OutputDebugString, он использует свой собственный API, и есть также обертка Delphi here. Вы можете использовать функции фильтрации Process Monitor, и Delphi не будет захватывать эти сообщения, но это не общие функции, как функции OutputDebugString.

+0

Может использовать его для моих собственных локальных тестов. Но я не думаю, что сделаю это в базе кода. Но я посмотрю на это. Благодарю. – pantarhei