DebugView приводит к сбою моего приложения

У меня есть приложение, написанное на C++ с помощью Visual Studio 2010, и оно запускает много отладочной информации с помощью OutputDebugStringW (около 50 в секунду, что, очевидно, много).

Если я открою и закрою DebugView 3 или 4 раза, мое приложение станет нестабильным и либо выйдет из строя, либо будет вести себя хаотично. Я пробовал то же самое с другим приложением, запускающим такое же количество отладочных отпечатков (также на С++, выполненным с VS 2010), и я испытал такое же поведение, то же самое, если я попробую на другом компьютере. Оба компьютера работают под управлением Windows 7 32bit.

Длина этих отпечатков контролируется так, чтобы она не превышала 512 символов, поэтому я не думаю, что происходит переполнение буфера (OutputDebugStringW кажется ограниченным строками размером 4 КБ).

Я пробовал с Hoo Win Tail (это программное обеспечение, похожее на DebugView), и проблема не возникает.

Кто-нибудь уже сталкивался с этой проблемой?

С наилучшими пожеланиями,

Джет


person Jet    schedule 23.08.2012    source источник
comment
Как это происходит? Любые подробности об исключении, ведущем к этому? DebugView может увеличить время обработки вызовов OutputDebugString и, соответственно, повлиять на поведение во время выполнения.   -  person Roman R.    schedule 23.08.2012
comment
Сбой происходит следующим образом: значок приложения в области уведомлений ничем не заменяется (прозрачный значок), а текст всплывающей подсказки значка заменяется случайными символами. После этого программное обеспечение либо полностью падает, либо зависает, либо делает какую-то странную последовательность конечного автомата. Структура программного обеспечения представляет собой конечный автомат, который по своей конструкции очень медленный (например, делает что-то каждые 5-10 секунд), поэтому перегрузка процессора из OutputDebugString не должна привести к его сбою.   -  person Jet    schedule 29.08.2012


Ответы (2)


Я бы предположил, что у вас есть (тонкое) состояние гонки в вашем приложении, которое проявляется только тогда, когда ваша программа работает на разных «скоростях».

DebugView сделает ваше приложение работать медленнее и поэтому вводит другие тайминги. То, что другие инструменты, которые также фиксируют вывод отладки, не демонстрируют такого поведения в вашем приложении, может быть связано с тем фактом, что они вводят какое-то другое время (быстрее/медленнее).

person Christian.K    schedule 29.08.2012

Вы можете попробовать DebugView++ (https://github.com/djeedjay/DebugViewPP/), он представляет почти отсутствие задержки в отслеживаемом приложении.

person Jan Wilmans    schedule 01.07.2014