Pergunta

Às vezes, recebemos traços de pilha de nossos clientes com números de linha errados. Isso acontece não com tanta frequência, mas às vezes nos intriga.

Os clientes têm assembléias de liberação com otimizações e com informações de depuração "apenas PDB".

E sim, comparamos números de linha com exatamente a mesma versão do código que o cliente possui.

E sim, o cliente possui arquivos PDB corretos.

E não, essa diferença nos números de linha não pode ser explicada com o método inline (otimização do compilador).

E não, não usamos ferramentas AOP, como o PostSharp.

Alguma idéia, por que isso acontece?

Foi útil?

Solução

Não é um especialista .NET, mas pelo menos em outros idiomas, quando otimizações de alto compilador são escolhidas, o compilador pode fazer uma reordenação significativa do código. Isso pode e muitas vezes dificulta a identificação da fonte de um erro em uma linha específica. Se o compilador puder fazer otimizações entre blocos básicos, esse efeito poderá ser muito significativo, colocando o local aparente de linha em uma parte totalmente diferente do arquivo de origem.

Outras dicas

Se você usar muita otimização de Compil, o compilador poderá mover partes do seu código, eu acho.

A melhor maneira de depurar é usar o refletor na DLL que seu cliente realmente usa. Usando números de linha do Stacktrace, você encontrará exatamente quais linhas de códigos são chamadas quando o aplicativo trava.

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