FreeBasic
Главная
Вход
Регистрация
Среда, 29.10.2025, 19:23Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Отладка в Visual Studio Code
zamabuvaraeuДата: Воскресенье, 26.10.2025, 12:39 | Сообщение # 1
Полковник
Группа: Друзья
Сообщений: 173
Репутация: 5
Статус: Offline
Что нужно:

1. Отладчик GDB, например, для Windows в одной из сборок mingw от Brecht Sanders https://github.com/brechtsanders/winlibs_mingw/releases
2. Visual Studio Code. Лежит на официальном сайте https://code.visualstudio.com/download

Не скачайте по ошибке arm-версию, она не запустится на x64, скачивайте  zip-версию или установщик. Ссылки для скачивания расположены близко, легко промахнуться и шликнуть мышкой не по той ссылке.

VS Code может работать без установки в portable режиме, как настроить описано на странице портабельной версии https://code.visualstudio.com/docs/editor/portable

Запускаем и настраиваем студию.
Заходим в расширения: меню View → Extensions.
В строке поиска вводим C/C++, устанавливаем. Это расширение от корпорации Microsoft нужно для отладки.

Открываем проект в студии. «Проектом» студия называет любой каталог с исходниками.
Например, наш проект устроен так:

Код

  D:\My Cool Project
    bin                 - каталог с программой
       HelloWorld.exe
    src                 - каталог с исходниками
        HelloWorld.bas

Открываем меню File → Open Folder и выбираем папку «D:\My Cool Project».

Теперь можно редактировать файлы в студии.

Настроим сборку (компиляцию) проекта из студии.

Создадим в каталоге проекта папку «.vscode» (вот так, с точкой в названии). В этой папке создадим файл «tasks.json» с таким содержимым:


Код
{
   "version": "2.0.0",
   "tasks": [
      {
         "label": "Build HelloWorld",
         "type": "process",
         /* путь к компилятору */
         "command": "C:\\Program Files (x86)\\FreeBASIC-1.10.1-winlibs-gcc-9.3.0\\fbc64.exe",
         "args": [
            /* параметры */
            "-m", "HelloWorld",
            "-x", "bin\\HelloWorld.exe",
            "-gen", "gcc",
            "-O", "0",
            "-g",
            "-v",
            "src\\HelloWorld.bas",
         ],
         "problemMatcher": [],
         "group": {
            "kind": "build",
            "isDefault": true
         }
      },
   ]
}
Замените пути к компилятору и параметры на собственные.

Собираем проект. Меню Terminal → Run Task. Студия запустит задачу и соберёт проект.

Отладка проекта.

Создаём в каталоге «.vscode» файл «launch.json» с таким содержимым:

Код
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "x64 debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/bin/HelloWorld.exe",
            /* Параметры командной строки */
            "args": [],
            /* Остановка на первой строке кода */
            "stopAtEntry": true,
            "cwd": "${fileDirname}",
            /* Если нужна внешняя консоль ставим true */
            "externalConsole": false,
            "MIMode": "gdb",
            /* Путь к отладчику GDB, замените на собственный */
            "miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Включить автоматическое форматирование для gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
    ]
}
Как отлаживать?

Нам необходимо включить установку точек останова мышкой в любом файле.
Заходим в настройки File → Preferences → Settings, вводим в поиске «breakpoint» и устанавливаем галочку в настройке
Debug: Allow Breakpoints Everywhere
[x]Allow setting breakpoints in any file

Готово!
Жмём F5 и наслаждаемся отладкой.

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

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

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

Дополнительно:

* условные точки останова, например, когда переменная стала равна какому‐то значению — отладчик остановит программу
* точки ведения журнала logpoint, когда отладчик выводит на консоль значение переменной (не надо вставлять в программу Print variable и бесконечно пересобирать)

Подробно про отладку в VS Code написано в соответствующей статье https://code.visualstudio.com/docs/debugtest/debugging

А недостатки будут?
FreeBASIC переводит все переменные и функции в верхний регистр, а к переменным добавляет доллары и цифры. Не очень удобно это смотреть. Однако даже это лучше, чем всё вводить вручную в консоли GDB.
Отсюда также следует, что при наведении мыши на переменную, её значение не будет показываться во всплывающей подсказке.

(Можно использовать модифицированный компилятор который не искажает имена переменных и функций https://freebasic.ucoz.com/forum/5-625-1 )
Прикрепления: 0277156.png (360.3 Kb)
 
haavДата: Воскресенье, 26.10.2025, 16:40 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1436
Репутация: 50
Статус: Offline
Спасибо за статью , думаю кому-то может оказаться полезной.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
DarkDemonДата: Воскресенье, 26.10.2025, 17:25 | Сообщение # 3
Генерал-майор
Группа: Друзья
Сообщений: 261
Репутация: -1
Статус: Offline
Цитата
VS Code может работать без установки в portable режиме

Если это действительно так и оно никуда в реестры не вгрызается - то это круто.
Всегда говорил, говорю и буду говорить - портейблы самые удобные проги.

Цитата
условные точки останова, например, когда переменная стала равна какому‐то значению

Вот это тоже круто.

Цитата
Отсюда также следует, что при наведении мыши на переменную, её значение не будет показываться во всплывающей подсказке.

А вот это не круто. Просто подумал, что ради этого всё и затевается.

За инфу, конечно, спасибо. Может когда совсем постарею и начну ошибаться совсем в мелочах, тогда скачаю и поковыряю.
 
zamabuvaraeuДата: Воскресенье, 26.10.2025, 17:54 | Сообщение # 4
Полковник
Группа: Друзья
Сообщений: 173
Репутация: 5
Статус: Offline

Цитата
А вот это не круто.
Потому что студия видит в тексте переменную «variable» и запрашивает её у отладчика. А в базе отладчика она записана как «VARIABLE$1», и естественно отладчик отвечает — нету такой переменной. Потому что фрибесик переводит всё в ВЕРХНИЙ РЕГИСТР.

Добавлено (26.10.2025, 17:56)
---------------------------------------------


Цитата
Всегда говорил, говорю и буду говорить - портейблы самые удобные проги.

Вы только это безопасникам не говорите.
 
DarkDemonДата: Воскресенье, 26.10.2025, 18:35 | Сообщение # 5
Генерал-майор
Группа: Друзья
Сообщений: 261
Репутация: -1
Статус: Offline
Цитата zamabuvaraeu ()
Вы только это безопасникам не говорите

Ну я не про те, которые лежат на торрентах кряканые перекряканые и обёрнутые в прослойки, эмулирующие реестр,
а скорее про те, что написаны таковыми изначально с упором на минимализм.

Пример топовых утилит:
Код
DxWnd
FlicFlac
VstHost
DesktopOk
PowerOFF

Загрузка мгновенно, в клик. Использую годами, некоторые - десятилетиями.
 
zamabuvaraeuДата: Воскресенье, 26.10.2025, 18:48 | Сообщение # 6
Полковник
Группа: Друзья
Сообщений: 173
Репутация: 5
Статус: Offline
Не про то.

Базовое правило безопасности: запись в каталог с исполняемой программой запрещён, запуск программ из мест куда возможна запись — запрещён.

Проще: все программы должны лежать в %ProgramFiles% куда пользователю запись невозможна. Запуск программ, которые лежат не в %ProgramFiles% — запрещён.

Таким образом убиваем распространение вирусов.
 
DarkDemonДата: Воскресенье, 26.10.2025, 19:16 | Сообщение # 7
Генерал-майор
Группа: Друзья
Сообщений: 261
Репутация: -1
Статус: Offline
Цитата
... куда пользователю запись невозможна. ...
Таким образом убиваем распространение вирусов.

В организации - да. А дома у людей не так и с лёгкого клика по инсталлеру какой-нибудь яндекс браузер
с радостью просачивается в програм файлс. Что такое яндекс браузер думаю объяснять не надо)))
Много сталкивался с ситуацией когда людям бесполезно объяснять что тот или иной софт сам по себе
вирус и даже хуже, они всё равно ставят его и ставят как бараны, ибо привыкли.

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

Безопасность это больше человеческий фактор.
 
  • Страница 1 из 1
  • 1
Поиск: