Dbgview как пользоваться
Перейти к содержимому

Dbgview как пользоваться

  • автор:

Dbgview как пользоваться

Мне нужно отладить службу. Как я понял для этого удобно использовать программу DebugView и функцию OutputDebugString.

Но как пользоваться DebugView — не могу понять. Я её подключил, но сообщения не ловятся.

Сделал тестовую программу.

procedure TForm3.FormCreate(Sender: TObject);
begin
OutputDebugString(«. String. «);
end;

Дельфовый Эвент лог сообщение ловит, а DebugView — нет


Страница программы
http://technet.microsoft.com/ru-ru/sysinternals/bb896647%28en-us%29.aspx


Сергей М. © ( 2009-11-17 14:14 ) [1]


> нужно отладить службу

Локальную ?
Так а чем встроенный отладчик не угодил ?


Kolan © ( 2009-11-17 14:16 ) [2]

А как им цепляться — не пойму. Я на плей нажимаю, что-то запускается, но точки не срабатывают.


Сергей М. © ( 2009-11-17 14:18 ) [3]

Так ты справку-то почитай..
Там же раздел на эту тему имеется — «Debugging service applications»..


Ухарь ( 2009-11-17 14:43 ) [4]

Attach To Process


Ухарь ( 2009-11-17 14:43 ) [5]

Attach To Process


Kolan © ( 2009-11-17 14:55 ) [6]

Благодарю, Сергей, почитал. Только одного не могу понять, Attach To Process показывает CPU окно, как теперь на год перейти?

Я знаю, что идиот.


Kolan © ( 2009-11-17 15:05 ) [7]

* на код


Piter © ( 2009-11-17 15:24 ) [8]

Любой сервис можно запустить как обычный EXE — и отлаживай на здоровье, в чем проблема? Или есть сильные особенности его функционирования как сервиса?

Что касается изначальной проблемы:

Kolan © (17.11.09 14:09)
Дельфовый Эвент лог сообщение ловит, а DebugView — нет

естественно, у приложения может быть только один отладчик. Если ты запускаешь приложение из под среды Delphi — то она и указывает себя в качестве отладчика, к таким процессам DV не цепляется. Он цепляется к тем, у которых нет отладчика, то есть DV будет работать, если ты запустишь приложение не из под дельфи, а «обычным образом».

DV при этом должен быть запущен с правами администратора.


Kolan © ( 2009-11-17 15:32 ) [9]


> Любой сервис можно запустить как обычный EXE — и отлаживай
> на здоровье, в чем проблема?

Проблема в том, что я не врублюсь как это сделать.
Нажимаю F9. Оно компилится и тут же вырубается. Точки никакие не срабатывают. Хотя ServiceExecute такой:

procedure TminiCalibratorStartService.ServiceExecute(Sender: TService);
begin
while Status = csRunning do
begin
ReportStatus;
ServiceThread.ProcessRequests(False);
Sleep(100);
end;
end;

+ к рекомендации в справке:

поставь вызов sleep(достаточное_время) в отлаживаемый обработчик

достаточное_время — время, достаточное для того чтобы ты успел запустить сервис из меню «Службы», перейти в делфи и приаттачиться к стартовавшему процессу

Точку останова ставь после слипа


Kolan © ( 2009-11-17 16:16 ) [11]

А, а потом из CPU — View source. Получилось, попал в ServiceExecute.

Мне сервис нужен-то для чего. Мне нужно ловить факт подкл. железки и запускать нужную программу. Для определения подключения я ловлю событие WM_DEVICECHANGE

procedure TminiCalibratorStartService.WMDEVICECHANGE(var Msg: TWMDeviceChange);
var
.
begin

Нэ ловица. Почему?


Rouse_ © ( 2009-11-17 18:13 ) [12]


> Для определения подключения я ловлю событие WM_DEVICECHANGE

Это не верно, для сервиса нужно подписаться либо на уведомление SERVICE_CONTROL_DEVICEEVENT при помощи RegisterDeviceNotification, либо на SERVICE_CONTROL_HARDWAREPROFILECHANGE добавив флаг SERVICE_ACCEPT_HARDWAREPROFILECHANGE в параметр dwControlsAccepted при вызове функции SetServiceStatus, ну и отлавливать уже сами уведомления в ServiceCtrlHandler


Rouse_ © ( 2009-11-17 18:14 ) [13]

А по поводу:

> Дельфовый Эвент лог сообщение ловит, а DebugView — нет

Ловить должен кто-то один. Если ты работаешь под отладчиком — отладчик и будет получать сообщения. Запускай приложение не из под IDE и будет тебе счастье.


clickmaker © ( 2009-11-17 18:16 ) [14]

> Нэ ловица. Почему?

потому что это оконное сообщение.


Rouse_ © ( 2009-11-18 00:44 ) [15]


> clickmaker © (17.11.09 18:16) [14]
>
> > Нэ ловица. Почему?
>
> потому что это оконное сообщение.

Ну это не ограничение для сервиса, по крайней мере до висты.
И даже после висты он тоже может абсолютно без последствий для себя иметь окна. Пошаманить правда нужно с некоторыми мелочами.
В свое время долго бился с сокетным сервисом в режиме WSAAsyncSelect без интерактива.
Отказался ввиду не перспективного направления, но даже на семерке старый вариант нормально запустился.
Но увы и ах — не желательно 🙂


Kolan © ( 2009-11-18 12:03 ) [16]

Понятно, благодарю за разъяснения про отладку и события, буду курить по указанным словам.


Kolan © ( 2009-11-19 14:06 ) [17]

Пара вопросов.

Как получить хендл сервиса для RegisterDeviceNotification?

Как заполнить структуру NotificationFilter? В интернете есть пример с использованием TDevBroadcastDeviceInterface, где взять описание этого типа?


Сергей М. © ( 2009-11-19 14:45 ) [18]


> Как получить хендл сервиса для RegisterDeviceNotification?

см. TService.GetServiceController


Kolan © ( 2009-11-19 15:26 ) [19]

Нашел. А как быть со структурой.

А как быть со структурой? DEV_BROADCAST_HDR описана в модуле DBT, который у меня есть, а где брать DEV_BROADCAST_DEVICEINTERFACE?

var
Info: DEV_BROADCAST_HDR;
begin
Info.dbch_size := SizeOf(DEV_BROADCAST_DEVICEINTERFACE);
Info.dbch_devicetype := DBT_DEVTYP_DEVICEINTERFACE;
Info.dbch_reserved := ;

FNotifyHandle := RegisterDeviceNotification(GetServiceController,
@Info, DEVICE_NOTIFY_WINDOW_HANDLE);
end;


Сергей М. © ( 2009-11-19 15:44 ) [20]

Известно где — в MSDN.. если, конечно, ни в Jedi ни где-либо еще не нагуглится ..

DebugView в Google Analytics 4

Контекстная, таргетированная реклама и веб-аналитика

В этой статье я расскажу об инструменте DebugView, который доступен в Google Analytics 4, и его использовании применительно к веб-сайтам.

DebugView является незаменимым помощником в GA4 при отладке событий и отслеживании взаимодействий пользователей с вашим сайтом или мобильным приложением в реальном времени. С его помощью вы сможете гораздо быстрее проверить корректность передачи данных специальных параметров, показателей и свойств пользователя в Google Analytics 4, а также обнаружить ошибки в различных настройках отслеживаний.

Как правило, для отладки событий и конверсий в Universal Analytics мы чаще всего использовали стандартные отчеты В режиме реального времени.

DebugView в Google Analytics 4

Отчет «В режиме реального времени» (Universal Analytics)

Реже — специальные инструменты отладки типа Google Analytics Debugger и GTM/GA Debug. Но если приходилось отлаживать настройку электронной торговли, функцию User ID или др., то время задержки между совершением события и попаданием данных в отчеты Google Analytics могло составлять от 15 минут до нескольких часов. Приходилось ждать.

С появлением инструмента DebugView такая проблема исчезла. Кто-то может возразить и напомнить мне, что в Google Analytics 4 тоже есть отчет В реальном времени. Почему бы не использовать его? Дело в том, что данный отчет не всегда отображает передаваемые данные в реальном времени. В нем также присутствует задержка. В моей практике встречались эпизоды, когда отслеживаемое событие передавалось через 10 минут после его совершения, а некоторые и вовсе не отображались в отчете.

В DebugView таких расхождений я не наблюдал. Именно «мгновенная», посекундная фиксация всех событий и отображение их на шкале времени делает этот инструмент очень полезным для интернет-маркетолога. По сути, он представляет из себя отчет в реальном времени, который изолирует и показывает данные только с устройства, на котором включен режим отладки (debug_mode). Сами данные из отчетов Google Analytics 4 фильтруются, чтобы они не завышали статистику по событиям и не смешивались с действиями реальных пользователей вашего сайта.

DebugView в Google Analytics 4

DebugView в Google Analytics 4

DebugView — это не новый функционал компании Google, который специально разработан для четвертого поколения Google Analytics. Такой отчет появился в далеком 2016 году в Firebase вместе со StreamView (в режиме реального времени). Подробнее с событиями отладки и DebugView для мобильных приложений вы можете ознакомиться в официальной документации Firebase.

Если вы перейдете в DebugView, то скорее всего вы увидите пустой отчет.

DebugView в Google Analytics 4

Пустой отчет DebugView

Это связано с тем, что режим отладки активируется только на конкретном устройстве (устройстве разработчика), который проводит тестирование и отладку. Поэтому прежде, чем использовать DebugView, вам необходимо включить режим отладки на своем устройстве. Сделать это для веб-сайтов можно 3 различными способами:

  1. включить расширение Google Analytics Debugger для Google Chrome;
  2. включить режим предварительного просмотра Google Tag Manager на отлаживаемой странице;
  3. отправить параметр debug_mode.

Подробнее остановимся на каждом из них.

Включить расширение Google Analytics Debugger для Google Chrome

Перейдите по ссылке и установите расширение Google Analytics Debugger. После этого в правом верхнем углу появится иконка приложения. Убедитесь, что рядом со значком отображается ON (включено).

DebugView в Google Analytics 4

Активация Google Analytics Debugger

Теперь с каждым запросом, отправленным в Google Analytics 4, будет передаваться дополнительный параметр _dbg со значением 1, который включает режим отладки (Debug Mode, ‘debug_mode’:true).

DebugView в Google Analytics 4

Режим отладки, _dbg = 1

После этого зайдите к себе на сайт и начните взаимодействия. Данные начнут поступать в DebugView.

Включить режим предварительного просмотра в Google Tag Manager

Если вы используете Google Tag Manager и встроенный режим отладки контейнера (Preview Mode), то расширение Google Analytics Debugger устанавливать необязательно.

DebugView в Google Analytics 4

Предварительный просмотр в GTM

Запуск режима предварительного просмотра GTM также добавляет дополнительный параметр _dbg, который позволяет отслеживать активируемые события в GA4 в отчете DebugView.

DebugView в Google Analytics 4

Debug View, _dbg = 1

Отправка параметра debug_mode

Можно не использовать режим предварительного просмотра и расширение Google Analytics Debugger, а просто добавить параметр debug_mode со значением true без использования Google Tag Manager (напрямую в код сайта):

— на все события на странице в gtag(‘config’). Например:

Инструменты отладки Android

Чтобы делать высококачественный продукт, разработчики должны быстро и своевременно находить и исправлять ошибки. В этой статье мы поговорим об одной из наиболее важных частей процесса разработки программного обеспечения — отладке кода.

В Techery мы использовали много разных инструментов отладки, и у каждого из них есть свои преимущества. Мы сделали обзор и делимся нашим опытом использования нескольких инструментов. Надеемся, что эта статья поможет вам решить, какой из них использовать:

  • Android Profiler — профилировщик Android Studio;
  • Facebook Stetho — ADB для Android-приложений;
  • DebugDrawer — отладочная навигационная панель в приложении для быстрой отладки;
  • AppSpector — инструмент отладки для Android и iOS.

Android Studio Profiler

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

Возможности

Окно профилировщика показывает загрузку процессора, памяти, сети и батареи и выглядит следующим образом:

Мониторинг сети

Если вы щёлкнете по временной шкале сети, то увидите подробную информацию о запросах:

В окне выше есть вкладка «Connection View», в которой отображается список запросов с размером, временем, состоянием, запросом и ответом.

Проверка памяти

Профилировщик памяти показывает график использования ОЗУ и выглядит следующим образом:

Используя эту функциональность, вы можете найти функции, которые создают дополнительные объекты и мешают сборке мусора.

Расширенное профилирование

Вы можете отредактировать настройки запуска (Run configuration) вашего приложения, чтобы включить расширенное профилирование:

Характеристики, предоставляемые расширенным профилированием:

  • Все окна профилировщика поддерживают временную шкалу.
  • Memory Profiler показывает количество выделенных объектов.
  • Memory Profiler показывает события сборки мусора.
  • Network Profiler показывает подробную информацию обо всех передаваемых файлах.

Плюсы

  • Профилировщик Android Studio работает «из коробки», и вам не нужно интегрировать сторонние зависимости в ваш проект.
  • Доступные проверки (сеть, процессор, память, энергия) показывают исчерпывающую информацию о вашем приложении.
  • Хорошая реализация мониторинга сети: можно выбрать временные рамки и тщательно проверять запросы.

Минусы

  • Нет профилировщика для базы данных, что заставляет использовать сторонние инструменты.

Facebook Stetho

Stetho — это ADB для Android, который позволяет получить доступ к инструментам разработчика Chrome для проверки вашего приложения.

Интеграция

Чтобы загрузить библиотеку Stetho в свой проект, добавьте следующую строку в блок зависимостей:

implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.facebook.stetho:stetho-okhttp3:1.5.0'

Для инициализации Stetho вы должны добавить следующую строку в метод onCreate() класса Application вашего приложения:

Stetho.initializeWithDefaults(this);

Чтобы Stetho смог отображать данные сети с помощью OkHttp-клиента, вы должны добавить такой перехватчик:

new OkHttpClient.Builder() .addNetworkInterceptor(new StethoInterceptor()) .build()

Возможности

Stetho позволяет вам просматривать уровни сети и хранилища вашего приложения:

Мониторинг сети

Вкладка «Network» показывает таблицу с запросами и выглядит следующим образом:

В таблице показан статус, тип, время, размер и метод каждого запроса. Нужно просто нажать на строку, чтобы увидеть подробную информацию:

Мониторинг баз данных

Вкладка «Resource» показывает таблицу SQLite вашего приложения и выглядит следующим образом:

Это окно представляет собой простую таблицу без поиска и пагинации. Там могут быть ошибки: например, на скриншоте выше вы можете увидеть два столбца id.

Пример проекта

Вы можете найти образец проекта здесь.

Плюсы

  • Это бесплатный инструмент.
  • Он позволяет проверять уровни сети и хранилища.
  • Чтобы проверить базу данных Realm, вы можете установить библиотеку Stetho-Realm.

Минусы

  • Ошибки.
  • Уродливый пользовательский интерфейс.
  • Не очень богатая функциональность.

DebugDrawer

Это инструмент, который позволяет интегрировать отладочную навигационную панель в ваше приложение.

Интеграция

Для загрузки DebugDrawer необходимо добавить следующую строку в блок зависимостей файла build.gradle :

debugImplementation ‘io.palaima.debugdrawer:debugdrawer:0.8.0

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

implementation 'io.palaima.debugdrawer:debugdrawer-okhttp3:0.8.0'

Чтобы инициализировать DebugView, вы должны добавить следующие строки в метод onCreate() вашей Activity:

SwitchAction switchAction = new SwitchAction("Test switch", new SwitchAction.Listener() < @Override public void onCheckedChanged(boolean value) < Toast.makeText(MainActivity.this, "Switch checked", Toast.LENGTH_LONG).show(); > >); ButtonAction buttonAction = new ButtonAction("Test button", new ButtonAction.Listener() < @Override public void onClick() < Toast.makeText(MainActivity.this, "Button clicked", Toast.LENGTH_LONG).show(); > >); SpinnerAction  String > spinnerAction = new SpinnerAction < >( Arrays.asList("First", "Second", "Third"), new SpinnerAction.OnItemSelectedListener < String > () < @Override public void onItemSelected(String value) < Toast.makeText(MainActivity.this, "Spinner item selected - " + value, Toast.LENGTH_LONG).show(); > > ); debugDrawer = new DebugDrawer.Builder(this) .modules( new ActionsModule(switchAction, buttonAction, spinnerAction), new FpsModule(Takt.stock(getApplication())), new LocationModule(this), new ScalpelModule(this), new TimberModule(), new OkHttp3Module(okHttpClient), new PicassoModule(picasso), new GlideModule(Glide.get(getContext())), new DeviceModule(this), new BuildModule(this), new NetworkModule(this), new SettingsModule(this) ).build();

Возможности

Отладочная навигационная панель в зависимости от вашей конфигурации может выглядеть следующим образом:

DebugDrawer позволяет быстро проверить информацию о вашем устройстве, изменить настройки или «подделать» ваше местоположение.

Мониторинг сети

DebugView использует библиотеку Chuck внутри себя и позволяет вам проверять сетевые запросы:

Библиотека Chuck показывает список всех запросов и позволяет вам посмотреть их подробности.

Пример проекта

Вы можете посмотреть пример здесь.

Плюсы

  • DebugDrawer даёт вам быстрый доступ к информации и настройкам устройства, позволяет имитировать местоположение и состояние сетевого подключения.

Минусы

  • Довольно трудно проверять сетевой запрос на экране мобильного устройства.
  • Нет возможности проверки уровня базы данных.

AppSpector

AppSpector — это сервис для отладки приложений на iOS и Android, который позволяет удаленно проверять и контролировать свои приложения в режиме реального времени с помощью простого интерфейса. Полная документация доступна здесь.

Интеграция

Чтобы начать работу с AppSpector, вам нужно пройти простую регистрацию и создать свой проект.

Чтобы интегрировать AppSpector в ваше приложение, вы должны изменить файл build.gradle следующим образом:

buildscript < repositories < jcenter() google() maven < url "https://maven.appspector.com/artifactory/android-sdk" > > dependencies < classpath "com.appspector:android-sdk-plugin:1.+" > > apply plugin: 'com.android.application' // Добавьте плагин AppSpector после плагина Android apply plugin: 'com.appspector.sdk' repositories < maven < url "https://maven.appspector.com/artifactory/android-sdk" > > dependencies < implementation "com.appspector:android-sdk:1.+" >

Инициализируйте AppSpector в методе onCreate() в классе Application вашего приложения:

AppSpector .build(this) .withDefaultMonitors() .run("android_OGMyYzA3NGYtNDkxNy00ZWRiLTgxOTktNjQ5YjIzMTZjOWM4");

Возможности

Когда вы запустите ваше приложение, будет создан новый сеанс, и вы увидите его в главном окне AppSpector в браузере:

Когда вы нажимаете на определённую сессию, вы можете проверить своё приложение, используя различные мониторы.

Проверка производительности

В окне «Performance» отображаются графики с различными показателями, такими как ЦП, память, сеть, диск, FPS и батарея.

Этот монитор помогает обнаружить утечки ресурсов, использование диска и FPS.

Мониторинг сети

Монитор сети показывает таблицу с запросами. Вы можете нажать на определённую строку, чтобы увидеть подробную информацию о запросе и ответе:

В этом окне также есть функции поиска, фильтрации и экспорта.

Их очень удобно использовать, если приложение большое.

Мониторинг базы данных

Монитор SQLite позволяет вам мониторить базу данных и вызывать SQL-запросы.

Определённую запись легко найти, т.к. в этом мониторе несколько страниц.

Плюсы

  • Отличный пользовательский интерфейс. Можете посмотреть демо здесь.
  • Сеансом легко поделиться с коллегами по команде, просто скопировав URL-адрес из браузера и отправив его.
  • AppSpector поддерживает две платформы: iOS и Android.

Минусы

  • Пробный период — 14 дней.

debugview — где его взять и как им пользоваться?

Для участия в обсуждениях и оформления подписки на новые сообщения форума вам необходимо зарегистрироваться.

Страницы: 1
Cообщений на странице:
debugview — где его взять и как им пользоваться?
Пользователь
Сообщений: 452 Регистрация: 20.04.2016
21.11.2016 01:43:02

И можно хотя бы в двух словах объяснить, чем он отличается от обычного message?

Если я выполняю команду из примера в документации к PrintDbgStr:

PrintDbgStr(«test1»)
то ошибки не выдает, но и ничего нигде не выводит. В какое окно он это выводит?

Пользователь
Сообщений: 1209 Регистрация: 02.02.2015
21.11.2016 05:23:22

Цитата
Sergey Denegin написал:
И можно хотя бы в двух словах объяснить, чем он отличается от обычного message?

От обычного message отличается тем, что отладочный вывод вы видите только при запущенном внешнгем перехватчике таких сообщений (например — DebugView). Не запущен «перехватчик» — дебажный вывод практически не тормозит скрипт (особенно учитывая общую скорость Lua — так и вовсе незаметно). Удобно; можно оставлять вывод таких сообщений навсегда в своём коде.

Пользователь
Сообщений: 139 Регистрация: 09.02.2015
QUIK software testing
21.11.2016 06:29:49

Если я выполняю команду из примера в документации к PrintDbgStr:

Добрый день.
Ответы на эти и многие другие вопросы Вы можете найти в официальной документации, которую подготавливали специально для начинающих пользователей QLua (документ ‘Использование Lua в Рабочем месте QUIK.pdf’. Файл можно найти в архиве quik_7.4.0_upd.zip в директории Doc\Lua.)

Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале — ‘Использование Lua в Рабочем месте QUIK.pdf’ https://arqatech.com/upload/Public/quik_lua.zip

Пользователь
Сообщений: 452 Регистрация: 20.04.2016
21.11.2016 09:45:17

Цитата
swerg написал:
От обычного message отличается тем, что отладочный вывод вы видите только при запущенном внешнгем перехватчике таких сообщений (например — DebugView).

Я пока решал эту проблему путем переменной PrintOtladka, и если она была равна True, то вывод шел средствами обычных message, а если False, то вывода не было. Так что результат одинаковый, но без лишней библиотеки.
А как она по скорости? Быстрее чем обычный message?

Пользователь
Сообщений: 452 Регистрация: 20.04.2016
21.11.2016 09:54:20

И если я правильно понял, то если использовать DebugView, то значения переменных будут выводиться там, а обычные сообщения в обычном окне для message, и лично мне кажется, будет сложно совмещать по времени, что после чего следовало. Или такой проблемы не возникает?

QUIK clients support
Сообщений: 3879 Регистрация: 23.01.2015
21.11.2016 09:59:47
Здравствуйте,

Цитата
Sergey Denegin написал:
А как она по скорости? Быстрее чем обычный message?

PrintDbgStr быстрее чем message

Цитата
Sergey Denegin написал:
И если я правильно понял, то если использовать DebugView, то значения переменных будут выводиться там, а обычные сообщения в обычном окне для message, и лично мне кажется, будет сложно совмещать по времени, что после чего следовало. Или такой проблемы не возникает?

Если хотите знать кто раньше, ничего не мешает добавить какой-нибудь порядковый номер.
Пользователь
Сообщений: 452 Регистрация: 20.04.2016
21.11.2016 10:49:47
Понял, спасибо за ответ!
Пользователь
Сообщений: 452 Регистрация: 20.04.2016
21.11.2016 10:49:56
надо будет попробовать
Пользователь
Сообщений: 29 Регистрация: 22.10.2020
22.10.2020 19:58:55

Эту тему тоже подниму!
4 года прошло. Quik переведен на 64 разряда. Разрабы, а где нормальный человеческий отладчик с редактором LUA?! Несчастный МТ вас и то обошел по всем параметрам. Ваша платформа скоро будет использоваться просто как шлюз, потому как вся остальная ее начинка либо глючная, либо просто брошенная на половине разработки. Вам самим не скучно так бездарно тратить время на разработки, которые в принципе не работоспособны без костылей? Блин, вы даже API нормальный сделать не можете. До сих пор сидите на тормознутом DDE и ODBC. Уже никто их не использует. Ну вы хотя бы погуглите и посмотрите способы обмена информацией в среде Винды, ведь их целая куча и они довольно высокопроизводительные.
Почему пользователи в 21 веке пользуются костылями времен мастдая 95?! Зачем все эти ваши нововведения, если реализовать их без костылей не получается?! Давайте в следующем обновлении QUIK еще модель COM воскресим.
Где нормальный встроенный отладчик для LUA в QUIK. Еще раз задаю вопрос.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *