Requisitos
- servidor/ambiente conectado
- usuário autenticado (se requerido)
- executor configurado
Recomendações
- NUNCA faça depuração em ambiente de produção
- Não use appServers compartilhado com terceiros, mesmo que ambientes diistintos
- Prefira sempre um ambiente local
- Clientes TCloud : Os ambientes que estão no TCloud em produção são bloqueados para depuração.
Promova o RPO para
DEVe use esse ambiente, e se necessário, promova-o de volta para produção. Para detalhes, entre em contato com o suporte do TCloud.
Por quê não depurar em "produção"?
O processo de depuração, é composto de várias partes que se comunicam entre si e muitas vezes, aguardando ações dos usuários (continua, próxima passo, ...).
Quando estamos em uma depuração, pode ocorrer do VS-Code solicitar uma informação ao appServer e este "congela" todas as threads (conexões/usuário) para atender essa solicitação. Essa "congelada" pode levar até um ou mesmo dois segundos e isso acontece toda vez que o usuário que esta depurando, precisa tomar uma ação (continua, próximo passo...) e isso pode ser sentido por todos os usuários. Além disso o próprio usuário que esta depurando, vai receber informações de cada um dos usuários conectados, gerando uma troca constante de programas fontes ou informações irrelevantes naquele momento.
O appServer também envia para o VS-Code algumas informações, tais como, "olha estou nesse fonte e nessa linha" e pergunta "O quê quer que eu faça?". Nesse ponto, pode ser necessário o usuário que está depurando, responda com acionamento de uma ação, como por exemplo, "vá para a próxima instrução" ou "execute esta função até terminar". Enquanto o appServer aguarda a resposta do VS-Code, TODAS as threads ficam congeladas. E você foi no banheiro naquele momento. Dentro de alguns minutos terá um enxurrada de reclamações que o servidor travou.
Isso pode acontecer se tiver um, dez, cem, mil, usuários. Imagina o problema. Cresce exponencialmente ao número de usuários.>
Outra razão, é que devido ao processo de depuração do appServer, normalmente é necessário que o processo de depuração seja o primeiro a ser inicializados, pois somente as threads iniciadas após eles que serão passíveis de depuração e para garantir isso, é comum encerrar na "força" todas as threds no ar, principalmente se a depuração for em jobs, schedullers, rest, e outros do tipo.
Espero ter esclarecido porquê não deve usar ambiente "produção" em processos de depuração.
Recomendamos a leitura Debugging.
Por utilizar o Smartclient para iniciar o processo de depuração no Application Server é necessário que o Sistema Operacional onde o tds-vscode está sendo executado, esteja na lista de plataformas homologadas paro o Smartclient conforme Sistemas operacionais homologados - Smartclient.
Acione o atalho CTRL + SHIFT + P e execute TOTVS: Configure Launchers que lhe apresentará um assistente de configuração de executores que permite criar uma nova configuração ou editar uma já existente. Preencha as informações solicitadas e acione Save.
A definição de executores encontra-se no arquivo .vscode/launch.json que, normalmente, é criado através na abertura da página de Boas Vindas. Caso isso não ocorra (devido a configurações do seu ambiente), você pode criá-lo manualmente executando:
- Na barra de atividades, acione o
Debug - Na barra de ferramentas (parte superior) da visão de
Debug, abra a lista de seleção e acioneAdd Configuration.... - Comece a digitar
TOTVSe selecione o tipo desejado - Preencha os atributos solicitados conforme seu ambiente
- Salve o arquivo
{
"version": "0.2.0",
"configurations": [
{
"type": "totvs_language_debug",
"request": "launch",
"name": "TOTVS Language Debug",
"program": "${command:AskForProgramName}",
"cwb": "${workspaceFolder}",
"smartclientBin": "c:/totvs12/bin/smartclient/smartclient.exe",
"isMultiSession": true,
"enableTableSync": true
}
]
}
```
### TOTVS Language Web Debug
```JSON
{
"version": "0.2.0",
"configurations": [
{
"type": "totvs_language_web_debug",
"request": "launch",
"name": "TOTVS Language Debug",
"program": "${command:AskForProgramName}",
"cwb": "${workspaceFolder}",
"smartclientUrl": "http://localhost:8080",
"isMultiSession": true,
"enableTableSync": true
}
]
}No caso de efetuar depuração via SmartClient Html, indique qual o navegador web será utilizado, no arquivo .\vscode\settings.json.
{
...
"totvsLanguageServer.web.navigator": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
...
}| Veja Variable substitution.
Os executores do TDS-VSCode, além da variáveis de substituição do VS-Code, permite o uso de:
| Variável | Uso/Função |
|---|---|
${command:AskForProgramName} |
Solicita qual o programa a ser executado |
Ao utilizar ${command:AskForProgramName} na configuração do executor, lhe será solicitado qual o prorama ou função a ser executada, com ou sem parâmetros.
user function u_myFunc(p1, p2, p3)
// processamento conforme parâmetros
...
return| Exemplos | Parâmetros |
|---|---|
u_myFunc |
p1=nil, p2=nil, p3=nil |
u_myFunc() |
p1=nil, p2=nil, p3=nil |
u_myFunc("A") |
p1="A", p2=nil, p3=nil |
u_myFunc("A",,3) |
p1="A", p2="", p3="3" |
u_myFunc("A",.t.,3) |
p1="A", p2=".t.", p3="3" |
| A passagem de parâmetros equivale a usar o argumento -a do SmartClient.
Acione o atalho CTRL + F5 para iniciar a execução e informe o nome da função/programa a ser executado, se solicitado.
Acione o atalho F5 para iniciar a depuração e informe o nome da função/programa a ser executada, se solicitado.
| Veja Debuggimg Actions e Variáveis de substituição.
É possível verificar valores de variáveis, conteúdo de tabelas e executar métodos/funções durante o processo de depuração.
- Coloque um ponto de parada onde achar necessário
- Quando a depuração parar no ponto indicado, abra a visão
Debug Console - Digite uma operação ou variável AdvPL/4GL disponível em seu ambiente de depuração
- Para ver conteúdo de uma tabela, digite
table:nome_da_tabela, por exemplotable:SM0
| Veja (Debug Console REPL)[https://code.visualstudio.com/docs/editor/debugging#_debug-console-repl]
O sincronismo de tabelas pode ser alterado por configuração no executor, usando a chave enableTableSync. Por padrão, vem habilitado.
Também é possível alterar essa opção durante o processo de depuração acionando o atalho CTRL + SHOFT + P, executando TOTVS: Toggle table sync. Note que ao usar esse comando, o parâmetro do executor é alterado, portanto na próxima depuração irá utilizar essa definição.
| A principal característica de um serviço, é que a sua execução não esta diretamente relacionada a interface com o usuário (SmartClient) e normalmente, é executado em segundo plano pelo appServer.
- No arquivo de configuração do appServer (
ini), comente a sessão[OnStart]. - Ainda no arquivo de configuração do appServer, na sessão
[General]e ajuste a chaveBUILDKILLUSERS=1. - Reinicie a execução do appServer.
- Abra o arquivo
.vscode\launch.json. - Localize a definição de executor que será utilizada e adicione a chave
"enableMultiThread": true. - Crie um arquivo-fonte e adicione o código abaixo, adequando-o se necessário.
user function startRest()
//O nome do job REST e ambiente de execução dele, podem ser obtidos no arquivo
//de configuração do _appServer_.
//Detalhes da função em https://tdn.totvs.com/display/tec/StartJob
startjob("HTTP_START", "p12", .f.) //lwait, sempre dever ser false
sleep(15000) //aguarda o serviço ser inicializado. Ajuste o tempo se necessário.
alert(">> Serviço REST inicializado. <<")
return
- No arquivo de configuração do appServer (
ini), na sessão[OnStart]deixe ativo somente os serviços necessários na depuração e na chaveRefreshRate, informe o intervalo de30segundos. - Ainda no arquivo de configuração do appServer, na sessão
[General], ajuste a chaveBUILDKILLUSERS=1. - Reinicie a execução do appServer.
- Abra o arquivo
.vscode\launch.json. - Localize a definição de executor que será utilizada e adicione a chave
"enableMultiThread": true;
- Encerre todos os serviços e conexões. Dica: Compilar qualquer fonte, encerra todos os serviços e conexões existentes.
- Coloque um ponto de parada que será executado quando o serviço for requisitado.
- Iniciar a depuração executando qualquer função do RPO para que mantenha uma conxão do depurador com o appServer.
Se serviço REST, execute a função
u_startReste aguarde a mensagem de serviço inicializado. - Acione o serviço por fora do VS-CODE, por exemplo executando o
SmartClient, uma requisição (http, rest, etc) - Quando a depuração parar no ponto de parade, prossiga com a depuração normalmente.








