Неправильные номера строк в трассировке стека (выпуск) - PullRequest
7 голосов
/ 14 сентября 2009

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

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

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

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 14 сентября 2009

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

2 голосов
/ 14 сентября 2009

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

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

...