Pergunta

Estamos tendo System.AccessViolationException nondeterministic lançada a partir de código nativo. É difícil reproduzi-lo, mas às vezes acontece. Eu não tenho certeza se eu posso "apenas depurá-lo" desde o tempo necessário para a violação de acesso é de cerca de 2 horas e não há garantias de que a violação de acesso vai acontecer.

A biblioteca nativa é usado por wrappers gerenciados. É usado de java através de JNI e é usado a partir de .NET através IKVM'ed JNI. O problema só foi reproduzido durante a partir do código IKVM'ed, mas os conjuntos de dados é diferente e não há maneira de aplicação java teste com dados utilizados pela aplicação IKVM'ed.

Eu tenho fontes para tudo, mas (se possível) Eu quero evitar fazer grande número de alterações.

Eu acredito pilha de chamadas nativa irá fornecer informações suficientes sobre a razão desta violação de acesso.

Existe alguma maneira eficaz de determinar a razão desta violação de acesso?

Acho que a solução ideal para mim é algumas mudanças no código ou ambiente de processo, por isso vai falhar com despejo de memória no caso de esta violação de acesso, para que eu possa fazer que as mudanças e apenas esperar.

Foi útil?

Solução

Se você pode pagar esperando a exceção ocorra, anexar o depurador gerenciado e nativo (sessão de depuração misto), e definir o depurador conseguiu quebrar quando um AccessViolationException é lançada. O depurador gerenciado vai quebrar o processo quando ele detecta a exceção não tratada, e então você deve ser capaz de ver a pilha de chamadas nativa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top