Предложение по EXC-DUMP

classic Classic list List threaded Threaded
25 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Предложение по EXC-DUMP

Yuriy Zhilovets
Привет всем!

Предлагаю при выдаче дампа исключения не печатать содержимого регистров.
Они занимают много места, а для анализа практически бесполезны.
Лучше выводить несколько верхних элементов стека.

Ю. Жиловец


Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

Ruvim Pinka
Привет!

On 5/13/07, Yuriy Zhilovets <[hidden email]> wrote:
> Предлагаю при выдаче дампа исключения не печатать содержимого регистров.
> Они занимают много места, а для анализа практически бесполезны.

Может, лучше сделать опцию отключения их вывода?

> Лучше выводить несколько верхних элементов стека.

Давай код, я вставлю в ~pinka/spf/exc-dump.f/EXC-DUMP2 — посмотрим,
насколько это будет удобно :)

--
Ruvim
Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

Yuriy Zhilovets
Ruvim Pinka пишет:

>Может, лучше сделать опцию отключения их вывода?
>
>  
>
Для программирования на Форте они бесполезны. Для программирования на
ассемблере - может быть, но реально ими, похоже, никто не пользуется

>Давай код, я вставлю в ~pinka/spf/exc-dump.f/EXC-DUMP2 — посмотрим,
>насколько это будет удобно :)
>  
>
( context )
  ." Stack: "
  HEX
  DUP 176 + 10 CELLS + @ ( ebp)
  5 0 DO
    DUP 4 I - CELLS + @ 8 .0 SPACE
  LOOP DROP
  DUP 176 + 9 CELLS + @ ( eax) 8 .0 CR

Я так сделал в линуксовой версии - как по мне, удобнее. Правда, верхний
элемент стека не всегда правильный, но в целом информация полезная.

Ю. Жиловец



Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

Andrey Cherezov
Добрый день, Yuriy Zhilovets!

Ваше сообщение от 15.05.2007 18:36:
> Для программирования на Форте они бесполезны. Для программирования на
> ассемблере - может быть, но реально ими, похоже, никто не пользуется
>  
Я иногда пользовался (главное знать, где какой регистр :). Правда дампу
этому требуется
апгрейд для поддержки x64, т.к. там уже точно левые числа печатаются.
Видимо на
x64 структура записи контекста процессора иная.



Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

Ruvim Pinka
In reply to this post by Yuriy Zhilovets
On 5/15/07, Yuriy Zhilovets <[hidden email]> wrote:
> ( context )
>   ." Stack: "
>   HEX
>   DUP 176 + 10 CELLS + @ ( ebp)
>   5 0 DO
>     DUP 4 I - CELLS + @ 8 .0 SPACE
>   LOOP DROP
>   DUP 176 + 9 CELLS + @ ( eax) 8 .0 CR

спасибо, добавил (и, сделал разыменование по CATCH, на случай сбитого
EBP, см. в репозитории).  Да, должно быть полезно.

Сразу не сработало. У меня получилось 6 CELLS + для EBP и 5 CELLS +
для EAX (тут вот дамп регистров тоже весьма помог ;)

--
Ruvim
Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

ygrek-3
In reply to this post by Andrey Cherezov

> Я иногда пользовался (главное знать, где какой регистр :). Правда
> дампу этому требуется
> апгрейд для поддержки x64, т.к. там уже точно левые числа печатаются.
> Видимо на
> x64 структура записи контекста процессора иная.

У меня с недавних пор стоит WinXP x64. Всё работает замечательно кроме
распечатки стека возвратов. Пример :

3 0 /
EXCEPTION!  CODE:C0000094  ADDRESS:5928FA  WORD:/  REGISTERS:
12ED6C   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 ................
12ED7C   00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00 ................
12ED8C   00 00 00 00  00 00 00 00  00 00 00 00  2B 00 00 00 ............+...
USER DATA: 441E94 THREAD ID: BF0 HANDLER: 12EFE8 RETURN STACK:
0 :  4 :  8 :  C :  10 :  14 :  18 :  1C :  20 :  24 :  28 :  2C :  30 :  34 :  38 :  3C :  40 :  44 : 48 :  4C :
50 :  54 :  58 :  5C :  60 :  END OF EXCEPTION REPORT
3 0 /
   ^ 0xC0000094L INTEGER_DIVIDE_BY_ZERO

Стал разбираться. Причина - магическое число 176 в EXC-DUMP. При исключении
обработчик (EXC) получает четыре параметра на стеке. В <EXC-DUMP> передаётся только
один - ExceptionRecord. В <EXC-DUMP> от этой структуры делается 176 + и ожидается попадание
на структуру _CONTEXT, что в Win32 видимо так и было. Под WOW64 этот номер не проходит. Решение -
явно передать параметр ExceptionContext из обработчика в EXC-DUMP. После этого всё замечательно
работает :

3 0 /
EXCEPTION!  CODE:C0000094  ADDRESS:5928FA  WORD:/  REGISTERS:
12EDA8   94 1E 44 00  ED 28 59 00  01 00 00 00  00 00 00 00 Ф.D.э(Y.........
12EDB8   00 00 00 00  03 00 00 00  C0 FF 12 00  FA 28 59 00 ........└ ..·(Y.
12EDC8   23 00 00 00  86 02 01 00  D8 EF 12 00  2B 00 00 00 #...Ж...╪я..+...
USER DATA: 441E94 THREAD ID: D10 HANDLER: 12EFE8 RETURN STACK:
12EFD8 :  5A563B INTERPRET_
12EFDC :  5A56C2 INTERPRET
12EFE0 :  5A5914 MAIN1
12EFE4 :  594FE0 CATCH
12EFE8 :  12EFF8 <not found>
END OF EXCEPTION REPORT
3 0 /
   ^ 0xC0000094L INTEGER_DIVIDE_BY_ZERO

Итого. В EXC-DUMP надо передавать два параметра. Для совместимости это плохо. Надо
переназвать слово... Можно ещё попробовать разделить - два вектора - один обрабатывает
EXCEPTION_RECORD, а другой _CONTEXT (первый печатает только верхнюю строчку, а второй -
дамп регистров и стека) - но там надо что-то делать с флагом IN-EXCEPTION.

В аттаче код - слова EXC-DUMP1 и (EXC). Проверял на WinXP x64, Win2k, Win98

--
ygrek


attachment0 (187 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Оптимизатор

Yuriy Zhilovets
Добрый день!

Помогите разобраться с оптимизатором.
Зачем нужны слова 'DUP и 'DROP ?
Почему адреса DUP и DROP два раза обернуты в переменную и слово?

0 VALUE  'DUP_V
0 VALUE 'DROP_V

:  'DUP  'DUP_V ;
: 'DROP 'DROP_V ;

Как их использовать, если мне нужны другие адреса слов DUP и DROP ?

Ю. Жиловец


Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

ygrek-3
In reply to this post by ygrek-3

> В аттаче код - слова EXC-DUMP1 и (EXC). Проверял на WinXP x64, Win2k,
> Win98

Мдя. А аттач то я и забыл :)
Исправляюсь

--
ygrek

spf_init.f (5K) Download Attachment
spf_win_except.f (2K) Download Attachment
attachment2 (187 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

Ruvim Pinka
In reply to this post by ygrek-3
On 5/20/07, ygrek <[hidden email]> wrote:

> > Я иногда пользовался (главное знать, где какой регистр :). Правда
> > дампу этому требуется апгрейд для поддержки x64,
> > т.к. там уже точно левые числа печатаются.

> У меня с недавних пор стоит WinXP x64. Всё работает замечательно кроме
> распечатки стека возвратов.

Под wine в текущей версии регистры тоже неверно выводит (а значит и
R-стек раскручивает неверно).

> Решение -
> явно передать параметр ExceptionContext из обработчика в EXC-DUMP. После
> этого всё замечательно работает

Да, работает! И под wine тоже работает :)

> Итого. В EXC-DUMP надо передавать два параметра. Для совместимости это
> плохо. Надо переназвать слово...

В действительности стек у EXC-DUMP такой
( DispatcherContext ContextRecord EstablisherFrame ExceptionRecord
ExceptionRecord -- DispatcherContext ContextRecord EstablisherFrame
ExceptionRecord )

Поэтому, допустимо вычислять базу образа регистров просто путем DROP 2
PICK  [NNN] +
Никаких побочных эффектов на существующий код нет. Внес в
~pinka/spf/exc-dump.f — испытывайте :)

--
Ruvim
Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

ygrek-3

> В действительности стек у EXC-DUMP такой
> ( DispatcherContext ContextRecord EstablisherFrame ExceptionRecord
> ExceptionRecord -- DispatcherContext ContextRecord EstablisherFrame
> ExceptionRecord )

Указал стековый эффект в spf_win_except.f

Вообще хочу это в ядре... :)

--
ygrek

attachment0 (187 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

Ruvim Pinka
On 5/24/07, ygrek <[hidden email]> wrote:

> > В действительности стек у EXC-DUMP такой
> Указал стековый эффект в spf_win_except.f
> Вообще хочу это в ядре... :)

В принципе, допустимо перенести мой пофиксенный вариант в ядро. Но, вначале надо исправить WordByAddr, который в ядре (иногда он глючит, баг приведен в трекере на spf.sf.net),  и сделать его векторным. Тогда ~pinka\spf\exc-dump.f можно будет расформировать.

--
Ruvim
Reply | Threaded
Open this post in threaded view
|

Re: Оптимизатор

Mihail Maksimov-2
In reply to this post by Yuriy Zhilovets
Hi Yuriy!

> Зачем нужны слова 'DUP и 'DROP ?

  Логический эквивалент (в режиме компиляции) ['] DUP ['] DROP .
Однако, для оптимизатора работающего в ЦК требуются адреса
не мета слов DUP и DROP, а адреса DUP и DROP определяющихся в
src\spf_forthproc.f  . Тоесть, необходима ссылка вперет, которая
организуется по средствам VALUE  переменной.

> Почему адреса DUP и DROP два раза обернуты в переменную и слово?
>
> 0 VALUE  'DUP_V
> 0 VALUE 'DROP_V
>
> :  'DUP  'DUP_V ;
> : 'DROP 'DROP_V ;

 Во избежания конфликта имен со словами

: 'DUP
  S" DUP" TC-FINDOUT TC-LIT, ; IMMEDIATE

: 'DROP
  S" DROP" TC-FINDOUT TC-LIT, ; IMMEDIATE

Это слова, которые применятся во время компиляции оптимизатора
для работы в рантайме.

> Как их использовать, если мне нужны другие адреса слов DUP и DROP ?

Удалить
: 'DUP
  S" DUP" TC-FINDOUT TC-LIT, ; IMMEDIATE

: 'DROP
  S" DROP" TC-FINDOUT TC-LIT, ; IMMEDIATE
из  src\tc_spf.f

К исходникам SPF перед
S" src\macroopt.f"                   INCLUDED

добавить

' DUP VALUE  'DUP
' DROP VALUE 'DROP





Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

Andrey Cherezov
In reply to this post by Ruvim Pinka
Добрый день!

Я пропустил, до чего договорились с новым EXC-DUMP?
Включаем в ядро исправленный/дополненный обработчик или продолжаем тестировать?

Ваше сообщение от 23.05.2007 18:20:
Решение -
явно передать параметр ExceptionContext из обработчика в EXC-DUMP. После
этого всё замечательно работает
    

Да, работает! И под wine тоже работает :)
  
Поэтому, допустимо вычислять базу образа регистров просто путем DROP 2
PICK  [NNN] +
Никаких побочных эффектов на существующий код нет. Внес в
~pinka/spf/exc-dump.f — испытывайте :)

  


Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

ygrek-3
Привет,

Кстати, на заметку - под Win64 jpf375c при сборке spf'а даёт exception
в слове _WINAPI-CODE. Разбираться в чём там дело мне совершенно не
хочется, т.к. spf сам себя собирает без проблем.

--
ygrek


attachment0 (187 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

ygrek-3
In reply to this post by Andrey Cherezov

> Я пропустил, до чего договорились с новым EXC-DUMP?
> Включаем в ядро исправленный/дополненный обработчик или продолжаем
> тестировать?

Включаем EXC-DUMP2. И векторный NEAR_NFA.
В WordByAddr в случае исключения делается
."  EXC:" . DROP S" <?nested exception>" EXIT
Но ведь это слово может вызыватся в других контекстах. Лучше например
S" <WordByAddr failed>".

Всплыла трабла с jpf375c - отказывается компилить в EXC-DUMP2 такой
код :
  [ 8 CELLS 80 + 11 CELLS + ] LITERAL +
появляется -312 (только для режима компиляции) на слове BEGIN ниже.
Перенёс вычисление в рантайм...

Может по умолчанию не выводить инфу о регистрах? Сделать
опциональным расширением через AT-EXC-DUMP?

--
ygrek

attachment0 (187 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

Andrey Cherezov
Добрый день, ygrek!

Ваше сообщение от 02.07.2007 16:28:
> Включаем EXC-DUMP2. И векторный NEAR_NFA.
> В WordByAddr в случае исключения делается
> .."  EXC:" . DROP S" <?nested exception>" EXIT
> Но ведь это слово может вызыватся в других контекстах. Лучше например
> S" <WordByAddr failed>".
>  
Что-то где-то мы с Рувимом уже спотыкались на "<?". Не помню подробностей,
но раз не убрали, значит <? пригодился :) Рувим вернется из отпуска -
напомнит.
Текст, конечно, можем любой туда вписать. Вроде бы предложенный вариант
менее
информативен (в случае реально вложенного исключения). Может тогда
что-то вроде "nested exception (WordByAddr)"?
> Может по умолчанию не выводить инфу о регистрах? Сделать
> опциональным расширением через AT-EXC-DUMP?
>  
Можно и так. Они действительно нечасто нужны. Тем более что на x64 не
соответствовали действительности :)



Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

ygrek-3
On Mon, 02 Jul 2007 18:07:34 +0300
Andrey Cherezov <[hidden email]> wrote:

> Что-то где-то мы с Рувимом уже спотыкались на "<?". Не помню
> подробностей, но раз не убрали, значит <? пригодился :) Рувим
> вернется из отпуска - напомнит.
> Текст, конечно, можем любой туда вписать. Вроде бы предложенный
> вариант менее
> информативен (в случае реально вложенного исключения). Может тогда
> что-то вроде "nested exception (WordByAddr)"?

Хм, про знак вопроса я не в курсе, он там то есть то нет. А вот именно
в тексте самого сообщения информация "nested exception" - есть
внешняя инфа по отношению к этому слову и валидна только в случае
вызова его из обработчика исключений. А использоваться оно может ещё
много где и "nested" там будет выглядеть не к месту.

> > Может по умолчанию не выводить инфу о регистрах? Сделать
> > опциональным расширением через AT-EXC-DUMP?
> >
> Можно и так. Они действительно нечасто нужны. Тем более что на x64 не
> соответствовали действительности :)

Ну теперь-то будут. Просто мне тоже кажется что они очень редко
нужны (тем более сейчас показывается стек данных, что во сто крат
полезнее), а место зря на экране занимают ;)

--
ygrek

attachment0 (187 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

Ruvim Pinka
In reply to this post by ygrek-3
Привет!

On 7/2/07, ygrek <[hidden email]> wrote:
> Я пропустил, до чего договорились с новым EXC-DUMP?
> Включаем в ядро исправленный/дополненный обработчик или продолжаем
> тестировать?

Включаем EXC-DUMP2. И векторный NEAR_NFA.

Векторизация NEAR_NFA не решает баг #1734449 — все равно придется подключать багфикс (вместе с EXC-DUMP2 или без него).

Исходник исправленного варианта для ревю:  http://www.forth.org.ru/~ruvim/test/spf/spf_wordlist.f
После исправления WordByAddr меняем EXC-DUMP на отлаженный вариант (можно и без дампа регистров, его подключать, если надо, через AT-EXC-DUMP, в конце будет выводится тогда). После этого багфикс не нужен совсем.


--
Ruvim
Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

Andrey Cherezov
Добрый день, Ruvim Pinka!

Ваше сообщение от 20.07.2007 21:07:
> Исходник исправленного варианта для ревю:  
> http://www.forth.org.ru/~ruvim/test/spf/spf_wordlist.f 
> <http://www.forth.org.ru/%7Eruvim/test/spf/spf_wordlist.f>
> После исправления WordByAddr меняем EXC-DUMP на отлаженный вариант
> (можно и без дампа регистров, его подключать, если надо, через
> AT-EXC-DUMP, в конце будет выводится тогда). После этого багфикс не
> нужен совсем.
Поддерживаю.



Reply | Threaded
Open this post in threaded view
|

Re: Предложение по EXC-DUMP

ygrek-3

> > Исходник исправленного варианта для ревю:  
> > http://www.forth.org.ru/~ruvim/test/spf/spf_wordlist.f 
> > <http://www.forth.org.ru/%7Eruvim/test/spf/spf_wordlist.f>
> > После исправления WordByAddr меняем EXC-DUMP на отлаженный вариант
> > (можно и без дампа регистров, его подключать, если надо, через
> > AT-EXC-DUMP, в конце будет выводится тогда). После этого багфикс не
> > нужен совсем.
> Поддерживаю.

Я теперь буду тестером spf на wine :) Патч работает.
Предлагаю сразу коммитить на CVS версии для "ревю" тоже.

--

attachment0 (189 bytes) Download Attachment
12