Skip to content

v0.2.0

Pre-release
Pre-release

Choose a tag to compare

@NullSablex NullSablex released this 01 Sep 05:45
· 2 commits to master since this release
7f3cc1e

Segundo pré-lançamento. Amplia o conjunto DAP suportado: a depuração deixa de ser
"breakpoint e inspeção" e passa a cobrir call stack, data breakpoints, edição por
expressão, leitura de memória e mais três classes de erro de runtime.

Adicionado

  • Call stack multi-frame — caminha a cadeia de frames do AMX (FRM → endereço de retorno) e entrega nome da função, linha e variáveis de cada frame. O editor navega entre os frames e a inspeção segue o frame selecionado.
  • Data breakpoints — pausar quando um valor muda, em globais, locais e elementos de array (arr[3]). Watches de locais expiram quando o frame dono retorna, para não dispararem com o conteúdo de outro frame no mesmo slot.
  • Breakpoints de função — parar ao entrar numa função pelo nome; um nome que não resolve volta ao editor como não verificado, sem quebrar a sessão.
  • Três novos erros de runtimeSTACKERR (colisão pilha/heap), HEAPLOW (underflow de heap) e MEMACCESS (acesso inválido à memória), somando-se à divisão por zero e ao índice fora do limite. A simulação é fiel ao amx.c e conservadora: o rastreio dos registradores perde a confiança ao primeiro opcode não modelado, então não há falso-positivo.
  • Filtro de exceção — o editor liga e desliga a pausa em erros de runtime pelo painel de breakpoints.
  • Inspeção de arrays e strings — arrays são expansíveis (cada elemento vira um filho) e arrays de char são mostrados como string quando o conteúdo é texto terminado em zero.
  • Edição por expressão (setExpression) — x = 1 ou arr[i] = 10 direto no watch ou no console, com o índice podendo ser uma subexpressão. O array inteiro não é editável, só os elementos.
  • Leitura de memória (readMemory) — hex view da memória de dados crua a partir de qualquer variável, que agora expõe um memoryReference.
  • Expressões no watch e no hover — um operador de topo com + - * / % (seguindo o truncamento do Pawn) e == != < > <= >=, sobre literais, variáveis e arr[i].
  • Autocomplete — sugestão de variáveis em escopo no watch e no console.
  • Documentação em inglês — o site passa a ter pt-BR na raiz e en-US em /en-US/, com todas as páginas traduzidas e o menu localizado.

Alterado

  • Mensagens do adaptador agora são localizadas — antes só os erros de runtime seguiam o idioma do editor. As mensagens dos dois lados foram unificadas em crates/protocol/src/messages, com 11 chaves em pt-BR, en, es, ro e ru; a tabela de cada idioma é exaustiva, então um idioma incompleto não compila.
  • O protocolo ganhou um canal request/responseReadMemoryMemoryData, correlacionados por id e com timeout, para a sessão não ficar presa se o plugin não responder. O restante do protocolo continua assíncrono nos dois sentidos.
  • README e documentação reescritos — recursos, arquitetura e a página de localização atualizados para o que esta versão entrega. O README ganhou a fileira de badges (CI, CodeQL, docs, OpenSSF Scorecard, release, downloads, estrelas e licença) e uma linha de navegação para a documentação, os releases e a extensão.
  • Marcador do plugin atualizado para PAWNPRO_DEBUG_MARKER:0.2.0 — a extensão casa apenas o prefixo PAWNPRO_DEBUG_MARKER, então o reconhecimento do plugin oficial não muda; o tamanho segue 26 bytes.

Corrigido

  • Tabela de erros em Como funciona a pausa no erro: faltavam OP_CALL_PRI no STACKERR e OP_LODB_I/OP_STRB_I/OP_LIDX_B no MEMACCESS, todos já checados pelo plugin.

Dependências

  • SDK rust-samp agora vem do crates.io (3.4.0), no lugar da dependência git + rev que o projeto carregava desde o início — ela existia porque o debugger precisava de API ainda não publicada. O build deixa de depender do GitHub para resolver dependências.
  • Ao longo do ciclo o SDK acompanhou o que cada versão liberou: v3.3.1 (correção), v3.4.0, o acessor Amx::hlw (exigido pelo HEAPLOW) e AmxDbg::function_address (exigido pelos breakpoints de função).
  • Atualizações do Dependabot nos três ecossistemas, agrupadas por ecossistema a partir de #13: cargo (serde 1.0.228 → 1.0.229 e o grupo cargo com 2 atualizações), github-actions (checkout, upload-artifact, download-artifact, setup-python, rust-cache, action-gh-release) e pip (mkdocs-material, pymdown-extensions). Nenhuma altera comportamento do debugger.
  • Lógica genérica de VM devolvida ao SDK (rust-samp-sdk 3.4.0) — a numeração dos opcodes, o tamanho das instruções, o decodificador da relocação por computed-goto (OpcodeMap), a caminhada da cadeia de frames e a leitura de faixas de memória eram fatos da VM AMX que viviam aqui. Agora vêm de samp::debug::opcode, samp::debug::stack e Amx::read_bytes/call_stack/data_only, e o plugin ficou ~250 linhas menor sem perder comportamento.
  • Atualizações de serde (1.0.229), serde_json (1.0.151), das GitHub Actions e das dependências da documentação.

Infraestrutura

  • CodeQL migrado para advanced setup, garantindo as duas análises (actions, rust) em todo pull request, com CODEOWNERS.
  • OpenSSF Scorecard — análise semanal e em push no master, publicando o resultado na API pública do OpenSSF e o SARIF no code scanning.
  • Dependabot para github-actions, cargo e pip, agrupado em um PR por ecossistema.

Artefatos

Plugin do servidor (copie para a pasta plugins/ ou components/ do servidor sem renomear — um binário serve SA-MP e open.mp):

  • pawnpro_debug.so — Linux i686
  • pawnpro_debug.dll — Windows i686

Adaptador DAP (usado pela extensão PawnPro; baixado automaticamente):

  • pawnpro-dap-adapter-* — por sistema/arquitetura do host