2013-11-21 1 views
7

КонтекстDebugging переводчик в VM при изменении ут примитивы

В университетском проекте мы хотим изменить Pharo VM использовать объектную таблицу и посмотреть, что происходит.

Мы используем pharo-vm clone from github и VMMaker. Построение VM отлично работает.

Для начала мы добавили примитив, который возвращает инкрементируются Integer:

InterpreterPrimitives>>primitiveIntegerIncrement 
    "increments an integer" 
    self pushInteger: self popInteger + 1 . 

и модифицированного StackInterpreter class>>initializePrimitiveTable соответственно

MaxPrimitiveIndex := 576. 
"... and so on ..." 
    (575 primitiveFail) 
    (576 primitiveIntegerIncrement)) 

И это работает.

Проблема

Когда мы вносим изменения в виртуальной машине, мы хотим проверить, запустить уже в SmalltalkImage поэтому мы не должны обобщать и видеть, что это не работает.

Что-то вроде:

StackInterpreter test: '1 inc' 

И тогда я могу отладить, если примитивно неправильно или произошла ошибка. Конечно, нужно сделать гораздо больше, но как я могу это достичь?

То, что мы пытались

  1. категории VMMaker-InterpreterSimulation класс StackInterpreterSimulator. Trying код в комментариях

    DoIt 
        ^(StackInterpreterSimulator new openOn: Smalltalk imageName) test 
    

    ошибки:

    displayForm := 'Display has not yet been installed' asDisplayText form. 
    

    байтовой строки не понимает asDisplayText

  2. (CogVMSimulator new openOn: Smalltalk imageName) test 
    (InterpreterSimulator new openOn: Smalltalk imageName) test 
    

    ошибка:

    PrimitiveFailed: primitive #basicNew: in Array class failed 
    

Я также нашел этот скринкаст, но он отлаживает только ВМ снаружи с помощью ГПБ: http://vimeo.com/22485382#

Наш проект размещен здесь: http://smalltalkhub.com/#!/~kirstin/PharoObjectTable

Текущий статус

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

+1

Для справки, вы можете посмотреть RoarVM, у него обычно есть таблица объектов, но есть и вариант без: https://github.com/smarr/RoarVM/tree/features/without-object- table По сравнению с CogVM у него нет JIT-компилятора, и в целом он довольно медленный. Тем не менее, он все же может дать несколько сведений о том, как подойти к вещам. – smarr

ответ

4

Сколько времени у вас есть проект и сколько человек? Для меня то, что вы пытаетесь сделать, это определенная работа. У вас есть хорошие знания о поведении на низком уровне?

Чтобы ответить на ваш вопрос, основная проблема здесь в том, что симулятор cog не поддерживается в вилке pharo vm. Это объясняется тем, что никто в команде фаронов не использует симулятор. Мы используем только внешнюю отладку из gdb. Фактически, люди pharo работают в основном на плагинах VM, ядро ​​VM в основном поддерживается и развивается Элиотом Мирандой, которая работает на Squeak. Поэтому мы сообщим ему, когда в ядре VM есть ошибка.

Для вашего проекта вы должны разделить его по крайней мере 2 шага:

шаг 1: сделать объект таблицы работы с стек VM

шаг 2: сделать JIT работу с вашим столом объекта

Обратите внимание, что для шага 2 я бы рекомендовал не изменять способ доступа к его заголовку, поэтому имеет таблицу объектов, похожую на VW, где у вас заголовок фиксированного размера на том, что находится в таблице объектов, и поля объектов (и, возможно, заголовков) в куче.

Так что используйте StackVMSimulator и сначала создайте StackVM. Когда все будет работать (включая контекст), вы можете подумать о взломе JIT. Недавно Гильермо Полито портировал виртуальную машину Stack в процесс сборки (см. PharoSVMBuilder вместо PharoVMBuilder), парень сообщил о проблемах с этим строителем, но вы могли немного взломать его, чтобы заставить его работать.

Теперь, чтобы заставить тренажер работать на Pharo 2.0 (который является версией Pharo изображения генератора у вас есть), вам нужно открыть браузер monticello и слить из ветки Элиота пакет Cog (репо MCHttpRepository: http: // source. squeak. org/VMMaker '), но не последний Cog, тот, который находится примерно в ту же дату, что и текущий пакет VMMaker pharo-vm, потому что последние Cog и VMMaker ветви Элиота нестабильны.

Альтернативный вариант - начать с создания образа Элиота и слить вещи с ветки pharo. Вот информация о том, как создать образ разработки скрипа (http://www.mirandabanda.org/cogblog/build-image/).

Тогда Элиот дал мне этот скрипт один раз:

| cos | 
cos := CogVMSimulator newWithOptions: #(Cogit SistaStackToRegisterMappingCogit). 
cos desiredNumStackPages: 8. 
cos openOn: 'my/favourite.image'. 
cos openAsMorph; toggleTranscript; halt; run 

Вам не нужна опция SistaStackToRegisterMappingCogit. Думаю, какой-то похожий скрипт с StackVMSimulator должен работать.

Наконец есть некоторые документы о тренажере, но это только для CogSimulator (эти Документации ожидают вас уже знают, как работает StackSimulator, и просто дать вам советы о том, как использовать его с JIT): http://www.mirandabanda.org/cogblog/2008/12/12/simulate-out-of-the-bochs/ и в одном из видео под названием «Cog VM (часть x)», x от 1 до 6, Элиот показывает, как он использует симулятор для демонтажа x86, распечатывает стек и проверяет кучу.

Еще один вопрос, задайте свои вопросы в списке рассылки pharo (пользователи pharo или pharo dev), потому что здесь никто не может заметить ваш вопрос (к счастью, кто-то на этот раз указал мне ваш вопрос).

И расскажите о списке рассылки pharo, если вам удалось запустить симулятор в Pharo 2.0, некоторые люди (как я) очень заинтересованы в нем. Я планировал сделать это в какой-то момент.

Удачи вам! Хороший проект в любом случае.

1

Последний раз, когда я пытался использовать симулятор примерно год назад, я не работал. Однако, есть несколько участков, которые я не предполагают и не получили интегрированные, которые могут быть полезны:

Выпуск 107 включает в себя патч для вашего asDisplayText вопрос.

Смежные вопросы