Função que salva a pilha de chamadas em um arquivo via AdvPL

Olá pessoal…

Hoje vou mostrar como gravar a Pilha de chamadas em um arquivo .txt via AdvPL.

Essa função tem como objetivo, trazer a FunName executada (Função do Menu), e a lista de todas as ProcName (Funções chamadas pela Função do Menu até a função atual).

Abaixo um print da pilha de chamadas, de uma rotina executada no fórmulas.

Pilha de Chamadas

Pilha de Chamadas

Abaixo o código fonte da rotina.

//Bibliotecas
#Include "Protheus.ch"

//Constantes
#Define STR_PULA	Chr(13)+Chr(10)

/*/{Protheus.doc} zSalvaProc
Função que salva as chamadas dos ProcNames em um arquivo
@author Atilio
@since 10/12/2014
@version 1.0
	@param cArquivo, Caracter, Caminho do arquivo a ser gerado
	@example
	u_zSalvaProc("C:\TOTVS\arquivo.txt")
/*/

User Function zSalvaProc(cArquivo)
	Local aArea := GetArea()
	Local nCont := 1
	Local nHdl  := 0
	
	//Gerando o arquivo e pegando o handle (ponteiro)
	FErase(cArquivo)
	nHdl := FCreate(cArquivo)
	fWrite(nHdl, 'FunName: '+FunName()+STR_PULA)

	//Enquanto houver procname que não estão em branco
	While !Empty(ProcName(nCont))
		//Escrevendo o número do procname e a descrição
		fWrite(nHdl, 'ProcName > '+StrZero(nCont, 6)+' - '+ProcName(nCont)+STR_PULA)
		nCont++
	EndDo
	
	//Fechando o arquivo
	FClose(nHdl)
	
	RestArea(aArea)
Return

Obs.: Se quiser testar se uma função está na pilha de chamadas, utilize a IsInCallStack().

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação