Есть ли ChaiScript Поддерживать поведение, подобное отладчику? Например, могу ли я установить точки останова, на которых должно приостанавливаться выполнение, и разрешить мне проверять стек перед возобновлением? Если так, то как?
В настоящее время невозможно взломать 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 должны быть достаточно наглядными.