Можно ли добавить точки останова для выполнения ChaiScript?

Есть ли ChaiScript Поддерживать поведение, подобное отладчику? Например, могу ли я установить точки останова, на которых должно приостанавливаться выполнение, и разрешить мне проверять стек перед возобновлением? Если так, то как?

4

Решение

В настоящее время невозможно взломать ChaiScript.

У вас есть два варианта. Вы можете вызвать ошибку (скажем, eval('**');), которая вызвала бы исключение eval error и могла бы генерировать ошибку стека, чтобы показать, что вы есть.

Посмотреть здесь: https://github.com/ChaiScript/ChaiScript/blob/develop/src/main.cpp#L344 за то, как вы могли бы отображать стек и вызывать информацию о том, что пошло не так

Другой вариант — вызвать отладчик внутри вашего кода. Это может пойти что-то вроде: (см .: Существует ли переносимый эквивалент DebugBreak () / __ debugbreak?)

Определение функции

void debugbreak()
{
#ifdef _MSC_VER
__debugbreak()
#else
raise(SIGTRAP);
#endif
}

Добавление его в ChaiScript

chai.add(fun(&debugbreak), "debugbreak");

Запуск его

//inside chaicript code
for (var i = 0; i < 1000; ++i)
{
if (i == 980) {
// should cause your C++ debugger to break
debugbreak();
}
}

Проблема на этом этапе заключается в понимании стека C ++, который вы видите. Это займет некоторое привыкание, но имена узлов AST должны быть достаточно наглядными.

5

Другие решения