是否可以为ChaiScript执行添加断点?

Tom*_* M. 4 c++ debugging chaiscript

ChaiScript是否支持类似调试器的行为?例如,我可以设置执行暂停的断点,并允许我在恢复之前检查堆栈吗?如果是这样,怎么样?

lef*_*cus 5

目前无法打入ChaiScript.

你有两个选择.您可能会导致发生错误(例如eval('**');),这会导致eval错误异常,并且可能会生成堆栈错误以显示您的身份.

请参阅此处:https://github.com/ChaiScript/ChaiScript/blob/develop/src/main.cpp#L344,了解如何显示堆栈并调出错误信息.

另一种选择是使调试器在代码中破坏.它可能类似于:(参见:是否有一个可移植的等效于DebugBreak()/ __ debugbreak?)

功能定义

void debugbreak()
{
#ifdef _MSC_VER
  __debugbreak()
#else
  raise(SIGTRAP);
#endif
}
Run Code Online (Sandbox Code Playgroud)

将其添加到ChaiScript

chai.add(fun(&debugbreak), "debugbreak");
Run Code Online (Sandbox Code Playgroud)

触发它

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

此时的问题实际上是理解您看到的C++堆栈.这需要一些时间来习惯,但AST节点名称应该是相当描述性的.