Использование DebugView при дебаге в VS.NET
От: Kostt  
Дата: 09.02.06 12:32
Оценка:
Здравствуйте!
Я хочу использовать DebugView для ловли Debug output из своего приложения. Все нормально, если это приложение -release, но если его дебажить, OutputDebugString начинает писать в окошко Visual Studio -> Output, а туда же пишется куча "мусорных" сообщений. Как подавить это окошко или сделать так, чтобы вывод шел в оба окна?
Re: Использование DebugView при дебаге в VS.NET
От: Блудов Павел Россия  
Дата: 11.02.06 09: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 08: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]

логи собирать самой утилитой из комплекта.
--
Alter, http://alter.org.ua
Re[3]: Использование DebugView при дебаге в VS.NET
От: Блудов Павел Россия  
Дата: 15.02.06 10: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 и добавить наш доморощенный.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.