Трассировка с использованием WinAPI функции OutputDebugString

07.01.14

Разработка - Универсальные функции

Простой способ отображения отладочных сообщений из нескольких сеансов в одном окне

Возникла потребность отладить код, который выполняется в нескольких параллельных сеансах. Хотелось видеть сообщения из всех сеансов в одном  окне. Журнал регистрации меня не устраивал. Решил использовать WinAPI функцию OutputDebugString. Сообщения, передаваемые этой функции, можно отслеживать с помощью программы DebugView или аналогичной.

Вызов WinAPI функции OutputDebugString осуществил с помощью внешней компоненты DynamicWrapperX. В модуле приложения создал экспортируемую фунцию, которая создает СОМ Объект DynamicWrapperX и помещает его в глобальную переменную для повторного использования, затем зарегистрировал в этом СОМ объекте WinAPI функцию OutputDebugString. И после успешной регистрации вызываю OutputDebugString и передаю ей отладочную строку. После выполнения функции отладочное сообщение появляется в окне программы DBGView.exe.

Программу DBGView.exe необходимо запустить до того, как начнут генерироваться отладочные сообщения.

 

// Вовод отладочной информации во внешние трассировщики типа DebugView - Dbgview.exe 
Процедура OutputDebugString( ОтладочнаяСтрока ) Экспорт

	Если гл_UserWrap = Неопределено Тогда		
		Попытка
			гл_UserWrap = Новый COMОбъект( "DynamicWrapperX" );
			гл_UserWrap.Register( "Kernel32.dll", "OutputDebugString", "i=s" );			
		Исключение
			гл_UserWrap = Ложь;
		КонецПопытки; 		
	КонецЕсли;
	
	Если гл_UserWrap <> Неопределено И ТипЗнч( гл_UserWrap ) = Тип( "COMОбъект" ) Тогда			
		гл_UserWrap.OutputDebugString( ОтладочнаяСтрока );		
	КонецЕсли;
	
КонецПроцедуры 

 

DebugView от Марка Руссиновича из Sysinternals (ныне Microsoft) живет здесь.

Внешняя компонента DynamicWrapperX живет здесь.

Трассировка отладка OutputDebugString WinAPI Win32API

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2670    0    John_d    8    

54

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4607    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3960    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8821    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16143    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7243    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. andrewks 1368 08.01.14 10:25 Сейчас в теме
это всё, конечно, круто, но чем не устроил вариант записывать лог в текстовый файл?
3. loy 28 08.01.14 16:45 Сейчас в теме
(1)Этот способ хорош для получения сообщений в реальном времени. Позволяет увидеть картинку в процессе. И что для меня было важно - отображает сообщения от нескольких одновременно работающих сеансов. Такие задачи, конечно, возникают не часто. Текстовый лог файл тоже можно использовать, только в случае нескольких процессов надо обеспечить бесконфликтную запись в файл. Для той задачи, которую пришлось мне решать, эта функция из WinAPI подошла оптимально.
Прикрепленные файлы:
GoodBeaver; +1 Ответить
4. bashinsky 133 09.01.14 08:42 Сейчас в теме
(3) loy, а вся история где-нибудь хранится? Или ее нужно вручную сохранять?
6. loy 28 09.01.14 10:31 Сейчас в теме
(4) bashinsky, В DebugView можно включить авто-сохранение лог файла. Помимо имени файла, можно настраивать размер, периодичность и ряд других параметров лог файла.
8. Rothschild 09.01.14 10:45 Сейчас в теме
(3) loy,
Да,
наверное будет полезно при отладке фоновых заданий,
запускающих параллельно дочерние фоновые задания.
2. пользователь 08.01.14 12:09
Сообщение было скрыто модератором.
...
5. quick 583 09.01.14 09:52 Сейчас в теме
отличная тема для отладки COM компонент, спасибо за подсказку.
7. JohnyDeath 301 09.01.14 10:45 Сейчас в теме
Как я понял, это прокатит только для неуправляемого приложения. Так?
11. Rothschild 09.01.14 11:15 Сейчас в теме
(7) JohnyDeath, в смысле?
Сомневаешься, что можно подключить внешнюю компоненту COM
в управляемом приложении ???
13. JohnyDeath 301 09.01.14 11:36 Сейчас в теме
(11) Rothschild, сомневаюсь в глобальной переменной на сервере.
14. Rothschild 09.01.14 14:34 Сейчас в теме
(13) JohnyDeath,
ну для файловой базы вроде бы справедливо утверждение: Сервер = Клиент

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

---

А что нельзя для выдачи каждого отладочного сообщения создавать свой COM-объект ???
9. Rothschild 09.01.14 10:52 Сейчас в теме

Внешняя компонента DynamicWrapperX живет здесь.



ссылка не работает, которая на слове "здесь".


нашел рабочую ссылку http://www.script-coding.com/dynwrapx1_00.zip
на этом ресурсе http://www.script-coding.com/dynwrapx.html#download
10. Rothschild 09.01.14 11:02 Сейчас в теме
странно, что-то IE у меня глючит.


после добавления ссылок в пост (9) хитрая ссылка в статье
http://infostart.ru/redirect.php?url=aHR0cDovL3d3dy5zY3JpcHQtY29kaW5nLmNvbS9keW53cmFweC5odG1s­
заработала.
12. mdie 86 09.01.14 11:32 Сейчас в теме
Отличная идея, но я бы использовал DbgPrint из ntdll
15. Rothschild 09.01.14 14:40 Сейчас в теме
(0)(14):
что будет,
если одновремено выдаются сообщения как на стороне клиентов, так и на стороне сервера
и все это еще выполняетися на разных машинах ???
---
прога DebugView может ловить сообщения с разных компов?
16. loy 28 09.01.14 17:26 Сейчас в теме
(15) Rothschild, Да, эта программа может ловить сообщения и с удаленных компьютеров, в help есть раздел Remote Monitoring, а в меню программы есть пункты Computer\Connect..., но, если честно, я эту возможность ни разу не пробовал. Рекомендую глянуть эту программку - она не требует установки - в архиве только exe, help и текст лицензии. Если раньше не приходилось сталкиваться с утилитами от Sysinternals http://technet.microsoft.com/ru-ru/sysinternals - очень рекомендую, утилит много, на самые разные темы. Некоторыми из них пользуюсь регулярно.
Rothschild; +1 Ответить
17. AlX0id 09.01.14 20:10 Сейчас в теме
Таки это.. а чем все же журнал регистрации был плох? %)
18. loy 28 09.01.14 23:46 Сейчас в теме
(17) AlX0id, О том, почему я выбрал именно этот вариант решения, я писал в сообщении (3). Я пробовал использовать для той задачи журнал регистрации. Было не удобно - он сильно тормозил и надо было постоянно обновлять список. И я вспомнил о DebugView - эта утилита неоднократно выручала меня в различных проектах (не для 1С:Предприятия)
19. AlX0id 10.01.14 01:28 Сейчас в теме
(18) loy,
Какая-то странная постановка задачи - для целей отладки реализовать онлайн-просмотр сообщений от софта.. Ну ладно, каждый пляшет, как умеет )
20. haggart 13.01.14 15:21 Сейчас в теме
Постановка задачи действительно странная, можно было просто записывать сообщения в общее хранилище. Но раз уже так модно заморачиваться с API функциями, то можно было бы сваять, как мне кажется, более востребованный tool вырубания сеансов зависших пользователей на удаленных компьютерах.
Оставьте свое сообщение