Форум программистов, компьютерный форум, киберфорум
8Observer8
Войти
Регистрация
Восстановить пароль

SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств

Запись от 8Observer8 размещена 07.02.2026 в 17:31. Обновил(-а) 8Observer8 19.02.2026 в 21:16
Показов 1637 Комментарии 0

Содержание блога

Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса отладки. В этой инструкции подключим мобильное устройство по USB-кабелю к компьютеру. Выведем отладочную информацию и мобильного веб-приложения в консоль браузера Chrome на компьютер.

  • Выполните пошаговую инструкцию для создания стартового примера: Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве (в начале той инструкции можно скачать результат в виде архива: mouse-and-touch-handlers-sdl3.zip)
  • По инструкции выше мы создали проект с именем "mouse-and-touch-handlers-sdl3". Переименуйте папку проекта, добавив в начале имени "debug-", то есть у вас получится "debug-mouse-and-touch-handlers-sdl3"
  • Откройте папку с проектом в каком-нибудь редакторе кода, например, в Notepad++ и в Sublime Text 4 (ST4). Скачать ST4 можно здесь: https://www.sublimetext.com/download После установки ST4 нужно добавить в Path папку куда установилась ST4, тогда вы сможете зайти в папку проекта из консоли (например, из Far Manager) и набрать subl + точка вот так:
    Bash
    1
    
    subl .
  • Так выглядит стартовый пример, открытый в ST4:
  • Откройте в редакторе года файл CMakeLists.txt и исправьте название проекта в команде "project()":

    Было:

    C
    1
    
    project(mouse-and-touch-handlers-sdl3)
    Стало:

    C
    1
    
    project(debug-mouse-and-touch-handlers-sdl3)
  • Примечание. Не забывайте сохранять файлы проекта после редактирования, нажимая Ctrl+S

Активация режима разработчика и отладки на Android по USB-кабелю



Если у вас не активирован режим разработчика и отладки на Android, то посмотрите, как это делается на вашем смартфоне и вашей версии Android - спросите у Gemini, ChatGPT, DeepSeek и т.д. На моём телефоне Redmi 10 и Android 13 это делается так:

  • Находите иконку с настройками "Settings" и нажимаете на неё. Открываются настройки
  • Нажимаете "About phone"
  • Далее, нажимаете на "MIUI version" подряд семь раз. Режим разработчика активирован
  • Вернитесь назад в главные настройки
  • Пролистайте почти в самый вниз
  • Выберите "Additional settings"
  • Пролистайте до самой последней строки под названием "Developer options"
  • Пролистайте немного вниз и увидите опцию "USB debugging". Включите эту опцию
  • Отладка по USB-кабелю активирована

Сборка проекта в Wasm



У вас должны быть к этом моменту установлены Emscripten и Cmake, а если нет, то установите по пошаговой инструкции: Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm

  • Откройте консоль CMD внутри папки с проектом - можете просто в адресной строке папки Windows набрать "cmd" (без ковычек) и нажать Enter
  • Введите команду конфигурирования, запустив bash-файл, который находится в папке проекта:
    Bash
    1
    
    config-web
  • Введите команду сборки (это батник):
    Bash
    1
    
    build-web
  • После сборки в папке "public/js" появятся два файла: "app.js" и "app.wasm". Файл "app.js" служит промежуточным звеном для подключения файла "app.wasm". Файл "app.js" подключается в файле "public/index.html"

Запуск Wasm-проекта локально на Android и Desktop с помощью локального сервера http-server



Примечание. Если у вас не установлены Node.js и пакет http-server, то установите их по инструкции:
  • Скачайте Node.js по ссылке https://nodejs.org/en/download и установите с опциями по умолчанию
  • В CMD введите команду для глобально установки (ключ -g) пакета http-server:
    Bash
    1
    
    npm i http-server -g

Запуск локального сервера и клиента на Desktop


  • Если http-server у вас установлен глобально, то скопируйте команду запуска локального сервера:
    Bash
    1
    
    http-server -c-1
  • В консоль будут выведены адреса, у меня такие:
    Code
    1
    2
    3
    4
    
    Available on:
      http://192.168.1.65:8080
      http://127.0.0.1:8080
    Hit CTRL-C to stop the server
  • Вместо "127.0.0.1" можно использовать "localhost" и набрать в браузере на Desktop:
    Code
    1
    
    localhost:8080
  • Вы увидите, что приложение запущено в браузере. Вы можете открыть консоль разработчика в браузера (Ctrl+Shift+J в Chrome) и кликнуть по холсту. В браузер будут выведено сообщение "Клик мышью", благоданя обработчику клика мыши:
    C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event)
    {
        if (event->type == SDL_EVENT_QUIT)
        {
            return SDL_APP_SUCCESS;
        }
        else if(event->type == SDL_EVENT_MOUSE_BUTTON_DOWN)
        {
            printf("Клик мышью\n");
        }
        else if(event->type == SDL_EVENT_FINGER_DOWN)
        {
            printf("Касание экрана\n");
        }
     
        return SDL_APP_CONTINUE;
    }

Запуск клиента на Android с помощью локального сервера на Desktop



  • Подключите смартфон по USB-кабелю к компьютеру
  • На смартфоне откройте Chrome и введите "localhost:8080" (без ковычек). Вы увидите надпись:
    Code
    1
    
    This site can't be reached
  • В браузере на компьютере перейдите по адресу: chrome://inspect
  • Нажмите на кнопку "Port forwarding...":
  • В открывшемся диалоговом окне наберите "8080", "localhost:8080", поставьте галочку "Enable port forwarding" и нажмите кнопку "Done":
  • Возьмите смартфон и обновите страницу мобильного браузера
  • Примечание. Обновить окно браузера на смартфоне можно несколькими способами: нажать кнопку "Reload", провести пальцем сверху вниз (но не на холсте, а рядом или ниже), либо три точки в правом верхнем углу смартфона и выбрать кнопку с круговой стрелкой
  • Вы увидите веб-приложение запущенное в браузере мобильного устройства

Вывод консоли браузера мобильного устройства в консоль браузера компьютера



  • Убедитесь, что телефон подключен по USB и страница открыта на нем
  • На компьютере в Chrome перейдите по знакомому адресу: chrome://inspect/#devices
  • Найдите в списке ваше устройство и открытую вкладку с адресом localhost:8080
  • Нажмите на синюю ссылку inspect под названием вкладки:
  • Откроется новое окно. Это и есть полноценные инструменты разработчика для вашего мобильного браузера. Здесь вы будете видеть тоже самое, что и на телефоне, а так же будет выведена консоль браузера, куда будут выводиться сообщения из мобильного браузера. Здесь же в этом окне вы можете обновлять мобильное приложение после перекомпиляции. Вы можете попробовать прикоснуться к холсту на мобильном устройстве и в консоль браузера на компьютере будет выводиться:
    Code
    1
    2
    
    Клик мышью
    Касание экрана

Вывод в консоль браузера на компьютере из мобильного браузера по Wi-Fi (без USB-кабеля)



  • Отключите USB-кабель
  • Обратите внимание, что http-server вывел в консоль адрес 192.168.1.65:8080 при запуске (у вас будет другой адрес, но примерно такого же вида)
    Code
    1
    2
    3
    4
    
    Available on:
      http://192.168.1.65:8080
      http://127.0.0.1:8080
    Hit CTRL-C to stop the server
  • Введите этот адрес в Chrome на мобильном устройстве. Вы увидите запущенное приложение
  • Зайдите в настройки телефона
  • Пролистайте вниз и нажмите "Additional settings"
  • Пролистайте в самый низ и нажмите "Developer options"
  • Пролистайте немного до "Wireless debugging" и включите эту опцию. Здесь вы увидите IP и порт
  • Установите Android SDK если он у вас не установлен: Установка Android SDK
  • Выполните команду в консоли:
    Bash
    1
    
    adb connect <IP_телефона>:<порт>
  • На компьютере в Chrome перейдите по знакомому адресу: chrome://inspect/#devices и подождите 10-15 секунд
  • Нажмите на ссылку "inspect":
  • На компьютере откроется окно, где вы будете видеть тоже самое, что и на телефоне, а так же будет выведена консоль браузера, куда будут выводиться сообщения из мобильного браузера. Здесь же в этом окне вы можете обновлять мобильное приложение после перекомпиляции. Вы можете попробовать прикоснуться к холсту на мобильном устройстве и в консоль браузера на компьютере будет выводиться:
    Code
    1
    2
    
    Клик мышью
    Касание экрана

Примечание Gemini по поводу выбора отладки веб-приложений на мобильном устройстве по USB-кабелю и по Wi-Fi



Почему через USB (localhost) лучше



Раз вы уже настроили Port Forwarding, я настоятельно рекомендую остаться на кабеле. Вот 3 причины, почему «Inspect по Wi-Fi» — это боль:
  • Потеря пакетов: Wi-Fi вносит задержки в передачу логов. Вы кликаете на экран, а сообщение в консоли на ПК появляется через секунду
  • Загрузка CPU: Телефон тратит много энергии на поддержание беспроводного отладочного моста
  • Сложность: При каждом переподключении к Wi-Fi IP-адрес или порт отладки могут меняться.

Как пользоваться Inspect прямо сейчас (по USB)


  • Убедитесь, что в chrome://inspect/#devices стоит галочка "Discover USB devices"
  • Если телефон подключен, но списка вкладок нет — проверьте экран телефона. Там может висеть запрос: «Разрешить отладку с этого компьютера?». Нажмите «ОК»
  • Как только вы увидите свою вкладку localhost:8080, нажмите inspect

Что делать, если "inspect" открывается, но там белый экран?



Иногда окно инспектора само не может загрузиться. В этом случае:
  • Закройте окно инспектора
  • Нажмите "focus tab" в списке устройств (рядом с кнопкой inspect)
  • Затем снова нажмите inspect

Если сайт на Android открывается по Wi-Fi (192.168...), а инспектор — нет, это нормально. Для работы инспектора по сети нужна предварительная команда через adb

Исправление логической ошибки в программе



В стартовом примере есть логическая ошибка. Когда вы касаетесь экрана по холсту в отладочном инспекторе Chrome на компьютере, то в консоль инспектора выводятся две строки:

Code
1
2
Клик мышью
Касание экрана
Но по логике, мы хотим, чтобы в браузере Desktop приложение выводило "Клик мышью", а в мобильном браузере выводило "Касание экрана". Для исправления нужно добавить эту настройку в main.c перед созданием окна:

C
1
2
    // Отключаем генерацию событий мыши из касаний пальцем
    SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "0");
  • Сохраняем изменения в main.c (Ctrl+S)
  • Открываем новую CMD в папке проекта, чтобы не останавливать локальные сервер и набираем команду:
    Bash
    1
    
    build-web
  • В инспекторе на компьютере обновляем страницу, нажимая в левом верхнем углу закруглённую стрелку
  • Касаемся холста на смартфоне и видим в инспекторе, что выводится сообщение "Касание экрана"

Миниатюры

Нажмите на изображение для увеличения
Название: 8c0a7c00-4afb-4e58-9451-59b5b9f6b925.png
Просмотров: 1078
Размер:	7.8 Кб
ID:	11490
Нажмите на изображение для увеличения
Название: bf803653-513e-4abc-9a42-380e73c7e8c3.png
Просмотров: 1082
Размер:	8.0 Кб
ID:	11491
Нажмите на изображение для увеличения
Название: 0d655c42-1a78-4feb-9fca-d840b0af37af.png
Просмотров: 159
Размер:	7.0 Кб
ID:	11493
Нажмите на изображение для увеличения
Название: 26dc13ec-11bd-464a-a569-c291179a2e0c.png
Просмотров: 1076
Размер:	16.6 Кб
ID:	11494
Нажмите на изображение для увеличения
Название: 70cf9b97-f33b-48bd-a05e-f6dad3e1307c.png
Просмотров: 1068
Размер:	16.9 Кб
ID:	11495
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru