StackTrace без PDB загружается на Mono - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь разобраться в некоторых следах стека игры, над которой я работаю.Они генерируются на Mac с Mono.

at Microsoft.Xna.Framework.Game.Run () [0x0002c] in <9fdab2ac823a429cb7b8525426626ccc>:0

Это говорит мне имя метода (Microsoft.Xna.Framework.Game.Run) и ILOffset (0x0002c), но я понятия не имею, что такое 9fdab2ac823a429cb7b8525426626ccc.Это не токен метаданных, это какой-то GUID.

Может ли кто-нибудь объяснить мне, что это за число?Моя цель - объединить эти фрагменты информации вместе, а затем вместе с исходными файлами PDB / MDB реструктурировать правильную трассировку стека.

В качестве обходного пути я создал собственный метод стека трассировки, который также выводит токен метаданных, но я бы хотелгораздо лучше работать с нативными стековыми трассами, созданными Mono.

1 Ответ

0 голосов
/ 09 мая 2018

Понятия не имею, что 9fdab2ac823a429cb7b8525426626ccc

Хеш-элемент (между <>) - это идентификатор версии модуля (MVID модуля сборки, к которому относится метод.

Они созданы таким образом, что собственный аварийный отказ (из приложения AOT) может быть символизирован через каталог символов Mono, который создается во время компиляции / AOT приложения через

mono --aot=msym-dir=<msym dir> .....

или использование mono-symbolicate после фазы компиляции (вам нужны все оригинальные артефакты сборки):

mono-symbolicate store-symbols myExeWithDebugPDBsDirectory/msym-dir myExeWithDebugPDBsDirectory

Это производит каталог (myEXEwithDebugPDBsDirectory/msym-dir), который содержит:

Каталог символов содержит подпапку с именем MVID или AOTID

  • Подпапки MVID содержат файлы .dll / .exe и .mdb.
  • Подпапка AOTID содержит файлы .msym.

Позже вы можете затем использовать mono-symbolicate для обозначения вашего сбоя (используя msym-dir из соответствующего приложения), чтобы создать "нормальный" управляемый код, выглядящий как исключение / трассировка стека.

Примечание: Вы также можете отключить эти моно «компактные» последовательности, установив env. вар. перед запуском exe:

MONO_DEBUG=no-compact-seq-points mono yourApp.exe

re: Почему в мои трассировки стека входят только номера строк, если отладчик подключен?

...