Можно ли символизировать аварийные дампы MonoTouch и получить из них номера строк?
Можно ли символизировать аварийные дампы MonoTouch и получить из них номера строк? Если так, как это сделано?
Я настроил свой проект следующим образом:
- Сборка в режиме релиза
- Отметьте "Включить отладку" в "Параметры проекта" -> "Сборка" -> "Сборка iPhone" -> вкладка "Общие".
- Установлен флажок "Выдавать отладочную информацию" в "Параметры проекта" -> "Сборка" -> "Компилятор"
Теперь, когда я запускаю symbolicatecrash для дампа, я получаю имена моих методов в трассировке стека, но с смещением только против них (например, "+ 268"), а не номером строки.
Я использую MonoTouch 4.21.
2 ответа
Краткий ответ: я думаю, что проблема в опережающем (AOT) компиляторе - но вам лучше отправить такой вопрос по электронной почте в список рассылки mono-devel, чтобы получить окончательный ответ.
Длинный ответ:
Mono compilers / runtime (и это поведение наследуется MonoTouch) хранит отладочную информацию, которая включает номера строк, для своих сборок в файлах mdb.
XCode работает с файлами DWARF (DSYM). Когда XCode символизирует аварийный дамп, он ищет (только) в (созданных AOT) символах DWARF, чтобы получить свою информацию - то есть файлы mdb не ищутся.
Теперь Mono- отладчик (и среда исполнения) тоже могут справляться с DWARF (что должно отвечать всем требованиям). Однако для MonoTouch я не уверен, что компилятор AOT (который вызывает gcc) создает окончательные символы DWARF, содержащие номера строк C#, в результате чего символы и смещения (оба доступны для gcc) доступны только.
Какую версию xcode вы используете?
В более ранних версиях возникла проблема - проверьте https://github.com/chrispix/symbolicatecrash-fix