Neste artigo, vamos discutir todas as ferramentas de depuração incluídas no Microsoft Visual Studio Code.
O que será abordado:
- Breakpoints
- Janela de observação (Watch window)
- Call Stack
Vamos começar aprendendo sobre os requisitos para depuração!
Pré-requisitos
Existem dois plugins (extensões) para depuração de ObjectScript:
O primeiro faz parte do InterSystems ObjectScript Extension Pack. O segundo é Serenji, um plugin independente que fornece um editor, gerenciador de arquivos e funcionalidades de depuração. Ambos os plugins podem ser instalados a partir da loja de plugins. Para ativar funcionalidades principais, o Serenji requer uma licença. Para este artigo, usaremos o InterSystems ObjectScript Extension Pack para reduzir a curva de aprendizado. Depois de dominar o básico, você pode considerar a compra de uma licença paga para o Serenji.
Você ira precisar:
- A versão mais recente do Microsoft Visual Studio Code
- Plugin InterSystems ObjectScript Extension Pack (após instalar o Visual Studio Code)
- Instância do InterSystems IRIS. Você pode escolher entre a versão Docker ou o kit de instalação. (é necessário estar registrado no Developer Community)
Para saber como conectar seu IRIS ao IDE Microsoft Visual Studio Code, você pode ler aqui.
Configurando a função de depuração
Normalmente, o arquivo de configuração é gerado automaticamente após o início da depuração. Ele terá a seguinte aparência:
{
"configurations": [
{
"type": "objectscript",
"request": "launch",
"name": "ObjectScript Run current routine",
"program": "${file}"
}
]
}
Onde type é a linguagem do código que está sendo depurado, request é a opção de início da depuração (launch – inicia e executa o código ou attach – conecta ao código que já está em execução), name é o identificador da depuração, e program é o nome da classe e do método que estão sendo depurados (nesta configuração, um arquivo aberto é selecionado).
Breakpoint
Qualquer código de programa é executado de cima para baixo, linha por linha. Ao depurar, é importante entender o estado do programa em qualquer momento, incluindo os valores das variáveis locais e globais, a abertura e fechamento de arquivos, conexões web, entre outros.
Breakpoint é uma ferramenta de depuração que permite pausar a execução do programa em uma linha específica para identificar mudanças indesejadas no estado do programa. Começar a depurar no Visual Studio Code é muito simples. Suponha que tenhamos o seguinte código:
Class Test.MyFile Extends %RegisteredObject
{
ClassMethod TestVar() As %Integer
{
set randomNum = $RANDOM(10)
return randomNum
}
ClassMethod MyMethod() As %Integer
{
set randomNum = ..TestVar()
set numVar = 2
set numDivision = randomNum / numVar
return numDivision
}
}
Precisamos entender o valor armazenado na variável x no método MyMethod(). Esse valor é retornado pelo método TestVar(). Definimos um breakpoint antes de realizar a operação aritmética com essa variável na linha 15 e clicamos no botão Debug. Se você não definir um breakpoint, a depuração simplesmente executará o código sem exibir nada no console.

Podemos ver o valor de uma determinada variável imediatamente após iniciar a depuração! Muito conveniente. Em seguida, podemos percorrer todo o programa linha por linha pressionando o botão Step into ou F11.
Ótimo! Agora sabemos os valores das variáveis em cada passo da execução do código.
Podemos percorrer as variáveis dentro de um loop da mesma maneira. Vamos considerar o seguinte código:
Class Test.MyFile Extends %RegisteredObject
{
ClassMethod LoopMethod() As %List
{
set objList = $LB("string", 1, {"name":1})
for i=1:1:$LL(objList){
set item = $LG(objList, i)
}
return objList
}
}
Vamos definir um breakpoint no início do método e iniciar a depuração. Em seguida, usando o botão “Step into” no painel de depuração localizado na parte superior do IDE, avançamos no programa e observamos os valores atribuídos à variável item. Também podemos ver os valores de todas as outras variáveis do programa, incluindo a variável iteradora i, que neste caso é igual a 2.
Assim, avançando pelo loop, você pode acompanhar qual valor será atribuído à variável item em cada passo do loop.
Janela de observação (Watch window)
Também podemos monitorar o estado de uma variável durante a depuração adicionando-a à janela de observação. No modo de observação, podemos aplicar métodos a uma variável e acompanhar seu estado em cada iteração. Por exemplo, considere o seguinte código:
Class Test.MyFile Extends %RegisteredObject
{
ClassMethod WatchAVariable() As %List
{
set list = ""
set randomNum = $RANDOM(100)
for int=randomNum:randomNum:100000{
set list = list _$LB(int)
}
return list
}
}
E vamos escrever três métodos para a variável list:
Queremos acompanhar o comprimento da lista $LL(list), o último número adicionado $LG(list, -1) e sua raiz quadrada $LG(list, -1) ** 0.5. Entramos no loop e obtemos os primeiros valores:
Ao definir funções na janela de observação, podemos ver informações detalhadas da depuração! Além disso, a janela de variáveis continua exibindo os valores das variáveis iteradoras int e o passo do loop. Muito conveniente!
Janela da pilha de chamadas (Call Stack)
Observe a janela “Call Stack” na parte inferior. Essa janela mostra a ordem das chamadas de função no seu código. No nosso estado atual, temos dois itens: o loop e a atribuição das variáveis WatchVariable+7 e WatchVariable+6, respectivamente. Mas tudo aqui é bastante autoexplicativo. Vamos adicionar um pouco mais de lógica:
Class Test.MyFile Extends %RegisteredObject
{
ClassMethod RandomlyChangeVar() As %Integer
{
return $RANDOM(100)
}
ClassMethod WatchAVariable() As %List
{
set list = ""
set randomNum = $RANDOM(100)
for int=randomNum:randomNum:100000{
set list = list _$LB(int)
if $LG(list, -1) ** 0.5 > 10{
set int = int + ..RandomlyChangeVar()
}
}
return list
}
}
Adicionamos um novo método, RandomlyChangeVar(), que irá alterar a próxima variável int se a raiz quadrada do último número for maior que 10. Continuamos o loop até que o estado das variáveis satisfaça a condição lógica:
Observe os valores da função de raiz quadrada e a ordem das chamadas de função na pilha de chamadas. Assim que a raiz quadrada ultrapassou 10, a função RandomlyChangeVar() foi chamada imediatamente! Além disso, ao medir o comprimento da lista, conseguimos acompanhar quantos passos do loop foram necessários para atingir a condição lógica desejada. Isso facilita rastrear a ordem e as condições de chamadas de múltiplas funções, não importa quão complexa seja a lógica.
É isso! Agora você domina a depuração de ObjectScript no VSCode.
Neste artigo, analisamos detalhadamente o recurso de depuração no VSCode. Definimos nosso primeiro breakpoint e acompanhamos os valores das variáveis.
Artigo Original: https://community.intersystems.com/post/debugging-101-your-first-breakpo...