Использование DebugView при дебаге в VS.NET в избранное  новое    подписка   модер. 
От: Kostt 
Дата: 09.02.06 11:32
Здравствуйте!
Я хочу использовать DebugView для ловли Debug output из своего приложения. Все нормально, если это приложение -release, но если его дебажить, OutputDebugString начинает писать в окошко Visual Studio -> Output, а туда же пишется куча "мусорных" сообщений. Как подавить это окошко или сделать так, чтобы вывод шел в оба окна?
Re: Использование DebugView при дебаге в VS.NET в избранное  новое    модер. 
От: Блудов Павел модераторhttp://altergeo.ru/
Дата: 11.02.06 08:17
Здравствуйте, Kostt, Вы писали:

K>Как подавить это окошко или сделать так, чтобы вывод шел в оба окна?


Проще всего написать свой TraceListener.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re[2]: Использование DebugView при дебаге в VS.NET в избранное  новое    модер. 
От: Alter_http://alter.org.ua
Дата: 15.02.06 07:29
Здравствуйте, Блудов Павел, Вы писали:

БП>Здравствуйте, Kostt, Вы писали:


K>>Как подавить это окошко или сделать так, чтобы вывод шел в оба окна?


БП>Проще всего написать свой TraceListener.


Или взять готовый:
http://alter.org.ua/soft/win/dbgdump/

и вместо OutputDebugString() использовать DbgDump_PrintXXX()
из тамошнего [url=http://alter.org.ua/soft/win/dbgdump/sdk.php]SDK[/i]

логи собирать самой утилитой из комплекта.
Re[3]: Использование DebugView при дебаге в VS.NET в избранное  новое    модер. 
От: Блудов Павел модераторhttp://altergeo.ru/
Дата: 15.02.06 09:18
Здравствуйте, Alter_, Вы писали:

A_>и вместо OutputDebugString() использовать DbgDump_PrintXXX()


В том-то и дело, что в DefaultTraceListener до OutputDebugString дело не доходит, если программа запущена из-под отладчика.
Иначе бы и DbgView нормально работал. Лечится это вот таким кодом:

public class ODSTraceListener : DefaultTraceListener
{
    public ODSTraceListener() : base("ODS")
    {
    }

    public override void Write(string message)
    {
        base.Write(message);
        if (Debugger.IsLogging())
        {
            if (message == null)
            {
                API.OutputDebugString(string.Empty);
            }
            else
            {
                API.OutputDebugString(message);
            }
        }
    }
}


Ну и дальше нужно выкинуть из списка Listener'ов DefaultTraceListener и добавить наш доморощенный.