BLOG "Моё хобби" или "как я трачу свободное время"

Сообщения
459
Реакции
272
Помог
9 раз(а)
Said, надо видос из под спойлера посмотреть, там все эксперименты
 
Сообщения
2,752
Реакции
3,017
Помог
61 раз(а)
В VSCode по нажатию CTRL+SHIFT+B компилирование проекта (из репозитория) AMXModX в папку назначения (рантайм, сервер) включая плагины, которые находятся в своих подпапках с сохранинеием иерархии файлов с подсветкой ошибок (в том числе в коде) и предупреждений компилятора без лишней информации в выводе ответа компилятора.
1694044620984.png

- .vscode/build.sh
Bash:
#!/bin/bash

# Define color codes
RED="\e[31m"
ORANGE="\e[33m"
GREEN="\e[32m"
WHITE_BG="\e[47m"
RESET="\e[0m"

# Define directories
destenitionDir="D:/Dev/HLDS_Server/cstrike/addons/amxmodx"
scriptingDir="$destenitionDir/scripting"
srcDir="$PWD/cstrike/addons/amxmodx/scripting"

# Function to print colored messages
print_color() {
    local color="$1"
    local message="$2"
    echo -e "${color}${message}${RESET}"
}

# Function to compile a .sma file
compile_sma() {
    local smaFile="$1"
    local outputPluginDir="$2"
   
    pluginName=$(basename "${smaFile%.sma}")
    relativeDir=$(dirname "${smaFile#$srcDir}")

    outputPlugin="$outputPluginDir/${pluginName}.amxx"

    # Create the output plugin directory if it doesn't exist
    mkdir -p "$outputPluginDir"

    # Print the name of the .sma file with white background
    print_color $WHITE_BG " - Compiling: $(basename $smaFile)"

    # Compile the .sma file and capture its output, excluding the lines with version and copyright info
    compile_output=$("$scriptingDir/amxxpc" \
        "$smaFile" \
        -i"$srcDir" \
        -i"$srcDir/include" \
        -i"$srcDir/ReDeathmatch" \
        -o"$outputPlugin" 2>&1 | grep -vE "AMX Mod X Compiler|Copyright|Could not locate output file")

    # Check if there are any errors or warnings in the compile output
    if echo "$compile_output" | grep -qi "error"; then
        error_lines=$(echo "$compile_output" | grep -i "error")
        warning_lines=$(echo "$compile_output" | grep -i "warning")
        print_color $RED "❌ $error_lines"
        if [ -n "$warning_lines" ]; then
            print_color $ORANGE "⚠ $warning_lines"
        fi
    elif echo "$compile_output" | grep -qi "warning"; then
        warning_lines=$(echo "$compile_output" | grep -i "warning")
        print_color $ORANGE "⚠ $warning_lines"
    else
        print_color $GREEN "  ✅ Compiled: $(basename $smaFile)"
    fi
}

# Find and compile all .sma files in the source directory and its subdirectories
find "$srcDir" -name "*.sma" -type f | while read smaFile; do
    relativeDir=$(dirname "${smaFile#$srcDir}")
    outputPluginDir="$destenitionDir/plugins$relativeDir"
    compile_sma "$smaFile" "$outputPluginDir"
done

echo ""

# Copy directories without confirmation with green messages
print_color $GREEN " - Copying configs..."
cp -rf "$srcDir/../configs"/* "$destenitionDir/configs"
print_color $GREEN " - Copying data..."
cp -rf "$srcDir/../data"/* "$destenitionDir/data"
- .vscode/tasks.json
JSON:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build AMX Mod X Plugins",
            "type": "shell",
            "command": "bash",
            "args": [".vscode/build.sh"],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ],
    "presentation": {
        "echo": false,
        "reveal": "always",
        "focus": false,
        "panel": "dedicated",
        "showReuseMessage": false,
        "clear": true
    },
    "problemMatcher": {
        "fileLocation": "autoDetect",
        "owner": "problem",
        "pattern": {
            // Group 1 - filename (absolute path for filename)
            // Group 2 - beginning line
            // Group 3 - ending line (optional)
            // Group 4 - error | warning (severity)
            // Group 5 - message
            "regexp": "(.+?)\\((\\d+)(?:\\s--\\s(\\d+))?\\)\\s:\\s(warning|error)\\s\\d+:\\s(.*)",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        }
    }
}
 

Download all Attachments

Последнее редактирование:
Сообщения
2,752
Реакции
3,017
Помог
61 раз(а)
BiZaJe,

это зависит от названия файла дампа ядра, настройки операционной системы, в том числе параметра:
/proc/sys/kernel/core_pattern
Проблема:
  • В контейнере, запущенном из под Docker Windows не получается увидеть разбор дампа ядра при падении hlds.
1697121758395.png 1697121305086.png
(краш есть, но core-дамп файла нет)​
Решение:
Необходимо host-системе (WSL системе для Docker Desktop) сконфигурировать нужный нам core_pattern:​
  1. Войти в WSL систему (в windows терминале прописать wsl)
  2. Выполнить
    Bash:
    $ sysctl -w kernel.core_pattern=core
После этого дамп ядра будет создаваться прямо в папке с приложением (рядом с hlds_run), и будет полностью записан с помощью gdb в debug.log.​
1697119694160.png

Подробности:
Bash:
$ wsl.exe -l -v
  NAME                   STATE           VERSION
* docker-desktop         Running         2
  docker-desktop-data    Running         2
И docker-desktop дистрибутив сконфигурирован немного иначе, нежели стандартные дистрибутивы Debian-based.​
Если войти в этот дистрибутив, прописав в терминале wsl, а далее посмотреть core_pattern
Bash:
cat /proc/sys/kernel/core_pattern
/mnt/wslg/dumps/core.%e
- увидим паттерн, который будет распространяться на все запущенные из под WSL контейнеры (конфигурированная host-машина WSL).​
В моём случае, с запуском ./hlds_run -debug ... это являлось проблемой, так скрипт hlds_run ищет дамп ядра в папке hlds, и не сможет найти, и не покажет подробной информации из дампа.​
1697119528057.png
Благодарности:​
the_hunter - помог найти решение на Github​
 
Последнее редактирование:

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу