Closed ChunelFeng closed 2 months ago
你好,关于您提到的这个问题。
是这样的,色图中,如果您想调试单个node逻辑,但缺少某些必要条件(比如,特定参数值), 可以简单的通过 外部修改 GParam 值,再注册 单个node 并执行,
即可达到您说的node 单步执行的效果。
我是想调试整个pipeline的逻辑的。 我现在尝试的方法是,在调试状态下,给每个node增加一个切面,增加一个全局变量paused。 当运行到指定节点时,在切面中设置paused为true,增加一个等待的信号量。 当外部发送继续运行信号后,外部将paused设置为false。 类似于这样:
class InoDebugAspect : public CGraph::GAspect {
CStatus beginRun() override
{
bool paused = false;
if (this->getName() == "specified_node_name") {
fmt::print("paused...\n");
paused = true;
}
{
std::mutex mutex;
std::condition_variable cv;
std::unique_lock<std::mutex> lock(mutex);
cv.wait(lock, [&paused] { return !paused; });
}
return CStatus();
}
};
刚发现和这个问题重复了。。。 https://github.com/ChunelFeng/CGraph/issues/45
新版本中,可以尝试通过 registerGNode 方法,注册一个节点, 并且在外部,人为将 GParam的值,修改为你需要的,然后直接运行 node的 run 方法,进行调试。
auto node = pipeline->registerGNode<MyWriteParamNode>();
auto param = pipeline->getGParamWithNoEmpty<MyParam>("key");
param->iCount = 10; // 在这里,把参数修改为需要的值,而不需要修改 node内部的逻辑
node->run(); // 运行 node的 run 方法
如果对项目感兴趣,欢迎添加我的个人微信(ChunelFeng),以便随时交流联系
请问有机制,可以让节点单步执行吗? 类似于调试的时候,在收到信号后,再执行下一个节点,执行完成后,继续等待后续节点执行的信号。