Debug remoto TDS-VSCode em producao

Como conectar TDS-VSCode em AppServer producao pra debug sem derrubar sistema. Breakpoints, watch, step-by-step seguro.

Bug aparece so em producao — classico. Debug remoto via TDS-VSCode permite conectar no AppServer real e step-by-step na rotina sem precisar reproduzir localmente. Mas exige cuidado.

Pre-requisitos

Configurar conexao

No TDS-VSCode (View → Command Palette → "TOTVS: Add Server"):

{
    "name": "Prod-AppServer",
    "server": "protheus.empresa.com.br",
    "port": 6717,
    "id": "prod-debug",
    "secure": true,
    "environment": "PRODUCAO",
    "username": "admin"
}

Conectar e selecionar Environment

  1. Right-click no servidor → Connect
  2. Selecionar ambiente PRODUCAO
  3. Autenticar com usuario/senha (cuidado com cred em prod!)
  4. Status muda pra "Connected"

Iniciar Debug session

  1. Abra o fonte da User Function que quer debugar
  2. Set breakpoint clicando ao lado da linha (red dot)
  3. F5 ou Run → Start Debugging
  4. Escolha "TotvsLanguage Debug Server"
  5. VSCode dispara — agora todas chamadas a essa User Function param no breakpoint

Recursos disponiveis no debug

FuncaoAtalho
Step OverF10
Step IntoF11
Step OutShift+F11
ContinueF5
Watch variavelAdicionar em "Watch" panel
Stack TracePainel "Call Stack"
Breakpoint condicionalRight-click breakpoint → Edit

Breakpoint condicional — limitar escopo

// Pegar so quando codigo cliente eh especifico
SC5->C5_CLIENTE == "000123"

// So quando valor > X
M->C5_TOTAL > 100000

// So pra user especifico
RetCodUsr() == "MEUUSER"

Pegadinhas de Debug em producao

Boas praticas

Alternativa: debug log-based

Se debug live e arriscado, instrumente com FwLogger pontual:

User Function MinhaFuncao()
    FwLogger():Debug("entrou", {"input": cParametro})

    // ... codigo

    FwLogger():Debug("antes de SaldoTit", {"valores": aDados})
    nSaldo := SaldoTit(...)
    FwLogger():Debug("apos SaldoTit", {"saldo": nSaldo})

    // ... mais codigo
Return

Apos analisar logs, remova as chamadas DEBUG (deixa em codigo polui).

Cenarios praticos

1. Rotina "nao funciona pra um cliente especifico"

Breakpoint condicional cCliente == "000123". Debug so dispara pra ele.

2. "Aparece erro intermitente"

Breakpoint na linha do erro + watch das variaveis. Quando reproduzir, voce ve o estado.

3. "Quero entender uma rotina TOTVS padrao"

Em fonte legado da TOTVS, breakpoint nao funciona sem fonte. Mas Watch + Call Stack ajudam.

Veja também