Неожиданно для себя открыл, что в Win64 stackframe's деляются совершенно иначе чем в Win32 - без использования регистра RBP, как я наивно ожидал, по аналогии с EBP. А для трассировки callstack под Win64 предлагается использовать API-шный вызов CaptureStackBackTrace. Но под FPC у меня это не заработало, хотя под delphi 64 - все Ok.
Вопрос: соблюдаются ли в FPC спецификации win64 по формату StackFrame'ов, или он генерит их "по своему"?
Я использую довольно старую версию (2.4.0) и если в новых версиях ситуация изменилась - заранее извиняюсь. Но сейчас проводить эксперименты с новой версией у меня нет возможности - если кто нибудь знает точно были ли правки в этом аспекте - буду очень признателен за информацию.
Stackframes и Win64
Модератор: Модераторы
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Эти спецификации соблюдаются только в 2.7.1, собранном с опцией -dTEST_WIN64_SEH.
Спасибо. А можете примерно подсказать - насколько это отлажено? Рисковано ли браться за перевод довольно крупного проекта на эту версию? А то как то слово TEST внушает опасения...
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Часть "TEST" не настолько страшна, насколько часть "2.7.1". С одними строками можно огрести выше крыши...
А обработка исключений в стиле Win64 не дружит в внешними ассемблером/линкером - собственно поэтому она до сих пор в статусе "тест".
А обработка исключений в стиле Win64 не дружит в внешними ассемблером/линкером - собственно поэтому она до сих пор в статусе "тест".
