Não sei se entendi completamente, mas parece que você tem um analisador para esse formato binário e controla o código. Portanto, essa resposta se baseia nessa suposição.
Um analisador de alguma forma estará preenchendo estruturas, classes ou qualquer estrutura de dados que seu idioma tenha. Se você implementar um ToString
para tudo o que for analisado, terá um método muito fácil de usar e de manutenção fácil de exibir esses dados binários em um formato legível por humanos.
Você teria essencialmente:
byte[] arrayOfBytes; // initialized somehow
Object obj = Parser.parse(arrayOfBytes);
Logger.log(obj.ToString());
E é isso, do ponto de vista de usá-lo. Obviamente, isso exige que você implemente / substitua a ToString
função da sua Object
classe / struct / qualquer que seja, e você também precisará fazê-lo para quaisquer classes / estruturas / estruturas aninhadas.
Além disso, você pode usar uma instrução condicional para impedir que a ToString
função seja chamada no código de liberação, para não perder tempo com algo que não será registrado fora do modo de depuração.
Você ToString
pode ficar assim:
return String.Format("%d,%d,%d,%d", int32var, int16var, int8var, int32var2);
// OR
return String.Format("%s:%d,%s:%d,%s:%d,%s:%d", varName1, int32var, varName2, int16var, varName3, int8var, varName4, int32var2);
Sua pergunta original faz parecer que você tentou fazer isso de alguma maneira e acha que esse método é oneroso, mas em algum momento também implementou a análise de um formato binário e criou variáveis para armazenar esses dados. Então, tudo o que você precisa fazer é imprimir essas variáveis existentes no nível apropriado de abstração (a classe / estrutura em que a variável se encontra).
Isso é algo que você deve fazer apenas uma vez e pode fazê-lo enquanto cria o analisador. E isso só será alterado quando o formato binário for alterado (o que já solicitará uma alteração no seu analisador de qualquer maneira).
Na mesma linha: algumas linguagens possuem recursos robustos para transformar classes em XML ou JSON. C # é particularmente bom nisso. Você não precisa renunciar ao seu formato binário, basta fazer o XML ou JSON em uma instrução de log de depuração e deixar seu código de versão em paz.
Eu, pessoalmente, recomendo não seguir a rota do dump hexadecimal, porque é propenso a erros (você começou no byte certo, tem certeza de que, quando está lendo da esquerda para a direita, está "vendo" a endianness correta etc.) .
Exemplo: diga suas ToStrings
variáveis cuspir a,b,c,d,e,f,g,h
. Você executa o seu programa e percebe um erro g
, mas o problema realmente começou c
(mas você está depurando, portanto ainda não percebeu isso). Se você conhece os valores de entrada (e deveria), verá instantaneamente que c
é onde os problemas começam.
Comparado a um dump hexadecimal que apenas informa 338E 8455 0000 FF76 0000 E444 ....
; se seus campos têm tamanhos variados, por onde c
começa e qual é o valor - um editor hexadecimal dirá a você, mas o que quero dizer é que isso é propenso a erros e consome tempo. Não apenas isso, mas você não pode automatizar fácil / rapidamente um teste através de um visualizador hexadecimal. A impressão de uma sequência de caracteres após a análise dos dados informará exatamente o que seu programa está "pensando" e será um passo no caminho do teste automatizado.