Zur13, при вылете я обычно делаю так:
Открываю: Debug\Era\exception context.txt
Здесь тоже виден адрес вылета, регистры, стэк. Но именование функций лучше, чем в HD-логе, поскольку используются отладочные карты символов из папки DebugMaps. Для Эры это часто указание файлов и строк в исходниках (иногда ошибается, указав огромное смещение от функции):
Code:
Failed to read data at 0.
EIP: 00000000. Code: C0000005
> Registers
EAX: 80070057 (int: -2147024809)
ECX: 14169048 (int: 337023048, pint: 0x6B69AA50 = 1802086992)
EDC: Ddraw.7AA50 (int: 1802086992, pint: 0x6B657731 = 1801811761, str: "1wekÄ<gkb*ek(ôekQÅfkÆΘfk┴Öekeªek")
EBX: 00000000 (int: 0)
ESP: 02D39ADC (int: 47422172, pint: 0x00000001)
EBP: 00000001 (int: 1)
ESI: 02D39C18 (int: 47422488, pint: 0x00000008)
EDI: 02D39BC4 (int: 47422404, pint: 0x00000008)
> Callstack
> Stack
02D39AC8: 02D39BFC (int: 47422460, pint: 0x02D39C28 = 47422504)
02D39ACC: H3era hd.0060070D (int: 6293261, pint: 0xF685F08B)
02D39AD0: 0FD0ADC0 (int: 265334208, pint: 0x0FD0ADC4 = 265334212)
02D39AD4: 00000000 (int: 0)
02D39AD8: 02D39B58 (int: 47422296, pint: 0x0000006C = 108)
02D39ADC*: 00000001 (int: 1)
02D39AE0: 00000000 (int: 0)
02D39AE4: 00000000 (int: 0)
02D39AE8: 000003D4 (int: 980)
02D39AEC: 0FCE6DD0 (int: 265186768, pint: 0x00640038 = 6553656)
02D39AF0: 0FCE6E48 (int: 265186888, pint: 0x1252F300 = 307426048)
02D39AF4: Era.49507C (Rainbow.TextBuffer in Era.dpr on line 24 offset 4262853) (int: 92819580, pint: 0x736D6547 = 1936549191, str: "Gems\x00")
02D39AF8: 00000000 (int: 0)
02D39AFC: H3era hd.00481184 (int: 4723076, pint: 0x03030303 = 50529027)
02D39B00: 00000201 (int: 513)
02D39B04: 02D39B38 (int: 47422264, pint: 0x02D39B64 = 47422308)
02D39B08: User32.23B39 (int: 1955937081, pint: 0x900004C2)
02D39B0C: 6C8DC3E9 (int: 1821230057)
02D39B10: 0FCE6E48 (int: 265186888, pint: 0x1252F300 = 307426048)
02D39B14: 0FCE6DD0 (int: 265186768, pint: 0x00640038 = 6553656)
02D39B18: 0FCE6E48 (int: 265186888, pint: 0x1252F300 = 307426048)
02D39B1C: 00000000 (int: 0)
02D39B20: 0FCE6E48 (int: 265186888, pint: 0x1252F300 = 307426048)
02D39B24: 0FCE6DD0 (int: 265186768, pint: 0x00640038 = 6553656)
02D39B28: 147BD69A (int: 343660186, pint: 0x00000000)
02D39B2C: 147BD69A (int: 343660186, pint: 0x00000000)
02D39B30: 0FCE6E48 (int: 265186888, pint: 0x1252F300 = 307426048)
02D39B34: 0FCE6DD0 (int: 265186768, pint: 0x00640038 = 6553656)
02D39B38: 02D39B64 (int: 47422308, pint: 0x00000000)
02D39B3C: H3era hd.0050DA7F (int: 5298815, pint: 0x5FF44D8B = 1609846155)
02D39B40: 0FCE6E48 (int: 265186888, pint: 0x1252F300 = 307426048)
02D39B44: 18EA4B90 (int: 418007952, pint: 0x0063A5E4 = 6530532)
02D39B48: 000000C8 (int: 200)
02D39B4C: 147BD672 (int: 343660146, pint: 0x00000000)
02D39B50: 18EA4B90 (int: 418007952, pint: 0x0063A5E4 = 6530532)
02D39B54: Winmm.270C (int: 1941120780, pint: 0x8FE00503)
02D39B58: 0000006C (int: 108)
02D39B5C: 00000000 (int: 0)
02D39B60: 00000000 (int: 0)
02D39B64: 00000000 (int: 0)
Само исключение описывается в виде понятной текстовой ошибки. Для каждого 4-байтового значения даётся помимо шестнадцатеричного представления ещё десятеричное (int: xxx) и значение, которое лежит по адресу, если использовать текущее число как адрес другого числа или строки (pint: xxx, str: "...."). Таким образом видны строки перед вылетом и потенциальные указатели.
Далее стоит открывать Debug\Era\erm tracking.erm и посмотреть последние выполненные ЕРМ-события и команды, где видны имена файлов и строки.
Наконец, если подозреваем, что дело в некорректном значении переменных, можно заглянуть в erm memory dump.txt, где будет всё, от строк и до именованных глобальных переменных.
И здесь можно глянуть, что за моды и патчи использовались при вылете:
mod list.txt
patch list.txt
pe modules.txt
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|