v0.2.0
Pre-release
Pre-release
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 runtime —
STACKERR(colisão pilha/heap),HEAPLOW(underflow de heap) eMEMACCESS(acesso inválido à memória), somando-se à divisão por zero e ao índice fora do limite. A simulação é fiel aoamx.ce 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 = 1ouarr[i] = 10direto 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 ummemoryReference. - Expressões no watch e no hover — um operador de topo com
+ - * / %(seguindo o truncamento do Pawn) e== != < > <= >=, sobre literais, variáveis earr[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/response —
ReadMemory↔MemoryData, correlacionados poride 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 prefixoPAWNPRO_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_PRIno STACKERR eOP_LODB_I/OP_STRB_I/OP_LIDX_Bno MEMACCESS, todos já checados pelo plugin.
Dependências
- SDK
rust-sampagora vem do crates.io (3.4.0), no lugar da dependênciagit+revque 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 acessorAmx::hlw(exigido pelo HEAPLOW) eAmxDbg::function_address(exigido pelos breakpoints de função). - Atualizações do Dependabot nos três ecossistemas, agrupadas por ecossistema a partir de #13:
cargo(serde1.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) epip(mkdocs-material,pymdown-extensions). Nenhuma altera comportamento do debugger. - Lógica genérica de VM devolvida ao SDK (
rust-samp-sdk3.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 desamp::debug::opcode,samp::debug::stackeAmx::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, comCODEOWNERS. - 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,cargoepip, 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 i686pawnpro_debug.dll— Windows i686
Adaptador DAP (usado pela extensão PawnPro; baixado automaticamente):
pawnpro-dap-adapter-*— por sistema/arquitetura do host