Неверные номера строк в трассировке стека (выпуск)

Иногда мы получаем трассировку стека от нашего клиента с неправильными номерами строк. Это случается не так часто, но иногда это нас озадачивает.

У клиентов есть сборки выпуска с оптимизацией и с отладочной информацией «только pdb».

И да, мы сравниваем номера строк с точно такой же версией кода, которая есть у клиента.

И да, у клиента есть нужные файлы pdb.

И нет, эту разницу в номерах строк нельзя объяснить встраиванием методов (оптимизацией компилятора).

И нет, мы не используем никаких инструментов АОП, таких как PostSharp.

Есть идеи, почему это происходит?


person xoposhiy    schedule 14.09.2009    source источник
comment
Возможно, вы используете PostSharp или аналогичный инструмент АОП?   -  person Lasse V. Karlsen    schedule 14.09.2009
comment
Посмотрите, дублируется ли эта помощь или она: stackoverflow.com/questions/492201/   -  person Kobi    schedule 14.09.2009


Ответы (2)


Не эксперт по .net, но, по крайней мере, в других языках, когда выбрана высокая оптимизация компилятора, компилятор может значительно переупорядочить код. Это может и часто очень затрудняет привязку источника ошибки к определенной строке. Если компилятор может оптимизировать базовые блоки, то этот эффект может быть очень значительным, поскольку видимое расположение строки помещается в совершенно другую часть исходного файла.

person SingleNegationElimination    schedule 14.09.2009

Если вы используете большую оптимизацию компиляции, я думаю, компилятор может переместить части вашего кода.

Лучший способ отладки - использовать Reflector для библиотеки DLL, которую действительно использует ваш клиент. Используя номера строк трассировки стека, вы точно узнаете, какие строки кода вызываются при сбое приложения.

person Clement Herreman    schedule 14.09.2009
comment
Как Reflector может мне помочь? Он не показывает номера строк и, конечно же, не сохраняет форматирование. А Reflector показывает, что код не был существенно изменен в том месте, где произошло исключение. - person xoposhiy; 14.09.2009
comment
О ... Значит, ты облажался. Извини :/ - person Clement Herreman; 15.09.2009