Olá pessoal, sou novo aqui e meio novato em .NET. Peguei um sistema de automação comercial (PDV.exe em VB, Emissor.exe em C# e Retaguarda.exe em VB). Acontece que o PDV conversa com o Emissor através de arquivo TXT para emitir NFC-e e NF-e, mas após algum tempo de uso do pdv, ele simplesmente trava e fecha, e ao depurar não encontro nada que indique o erro, apenas a imagem abaixo que fala sobre threads executaram código externo.
Gostaria de saber o que pode estar acontecendo, ou qual o caminho devo tomar para identificar o problema, pois não entendo muito sobre threads em .NET. Se alguém puder indicar algo, agradeço!
Abaixo do botão continuar do Debug, tem um dropdown para você escolher a thread. Exemplo:
Na Thread correta, ele exibe aonde a exceção foi gerada.
Se eu alterar a Thread, é exibida a mesma tela que você informou:
1 curtida
@gbuenoo, interessante… n tinha reparado nessas funções. Observei ao sellecionar outra Thread onde o sistema parou, foi em um MessageBox, e sintaxicamente tudo ok, mas encontrei a frase “Não é possível avaliar a expressão porque um quadro nativo está no alto da pilha de chamada.”
Dei uma pesquisada e não encontrei muita coisa sobre, pode ajudar ?!
1 curtida
Deivid, tente o seguinte:
No menu superior, selecione: Depurar > Janelas > Pilha de Chamadas
Na parte inferior do VS, irá aparecer a opção Pilha de Chamadas
Se clicar com o botão direito no quadro de Pilha de Chamadas, você poderá selecionar alguns filtros também.
Veja se isso ajuda em algo.
1 curtida
@gbuenoo fiz o que você falou… o erro aconteceu novamente, mas agora em um local diferente do código, conforme a imagem:
Acredito que exista algum problema com a versão da DLL do banco de dados local (Firebird) que utilizo, mas n sei ao certo.
Na outra thread, localizei através da pilha de chamadas alguns outros detalhes que seguem na imagem abaixo:
Obs: o Select em que o sistema travou, se trata de um valor null retornado na consulta (em um FbCommand), que não está dentro de um try catch, porém ele é verificado antes de ser atribuído a ao textBox, será esse o erro que causa a parada do sistema?
Agradeço desde já as dicas!
De cara, eu circundaria todas essas consultas em banco de dados com um Try/Catch. Assim evitaria uma parada inesperada do sistema, o usuário não iria se desesperar e você poderia gerar um arquivo de log detalhando oq aconteceu.
Aparentemente, essa exception é causada pq sua consulta ao banco retorna null e você chama o método ToString()
para executar a formatação do texto.
Sugiro que:
- Coloque todo bloco de código que dependa de elementos externos a sua aplicação, dentro de um Try/Catch. Isso inclui, acesso a arquivos de texto, consulta/insert/update em banco de dados, chamadas de api’s, etc.
- Ao fazer uma consulta, que você precisará formatar o texto retornado por ela, faça uma verificação se o valor retornado não foi nulo(Se houver alguma outra validação que se aplique, pode incluir também).
É realmente o melhor a se fazer. Peguei o sistema em funcionamento já, tem bastante coisa pra tratar, mas só assim pra evitar esses problemas. Agradeço a ajuda, muito obrigado @gbuenoo , vou fazer as correções que preciso. Abrass!
1 curtida