进入调试状态, 也连接上了,
但是加断点经常不起作用,加的断点提示未验证什么的
vscode有时候还会显示
cocos request failed (reason: no valid source specified xxx.js)
进入调试状态, 也连接上了,
但是加断点经常不起作用,加的断点提示未验证什么的
vscode有时候还会显示
cocos request failed (reason: no valid source specified xxx.js)
然后今天断点又不好使了,但是不会C++那边不会报错了
但是在使用g_queue前有再次获取锁啊。不过你的做法是使得逻辑更清晰一些。
有报什么问题吗?
再次获取锁的时候,g_quene已经空了
vscode有时候还会显示
cocos request failed (reason: no valid source specified xxx.js)
断点不好使的问题找到了, 是我为了区分app和h5版本的main.js改了man.js的名字造成的,
cocos-debug的cocosFXDebug.js 里main.js的名字是固定的,
我在launch.json里加了个定义main名字的属性,算是解决了这个问题
C++端的那个g_quene的问题还是确实存在的。我按我的方法改了就没有问题了
从代码逻辑来看确实存在你说的情况。能否往github提交一个PR?
是的,目前只有main.js能够唯一定义路径问题。
void SimpleRunLoop::update(float dt)
{
//g_qMutex.lock();
//size_t size = g_queue.size();
//g_qMutex.unlock();
while (true)
{
std::string str = "";
g_qMutex.lock();
size_t size = g_queue.size();
if (size > 0)
{
auto first = g_queue.begin();
str = *first;
g_queue.erase(first);
size = g_queue.size();
}
g_qMutex.unlock();
if (str.length() > 0)
{
ScriptingCore::getInstance()->debugProcessInput(str);
}
if (size <= 0)
break;
}
}
void ScriptingCore::debugProcessInput(const std::string& str)
{
JSAutoCompartment ac(_cx, _debugGlobal.ref());
JSString* jsstr = JS_NewStringCopyZ(_cx, str.c_str());
jsval argv = STRING_TO_JSVAL(jsstr);
JS::RootedValue outval(_cx);
JS::RootedObject debugGlobal(_cx, _debugGlobal.ref());
JS_CallFunctionName(_cx, debugGlobal, "processInput", JS::HandleValueArray::fromMarkedLocation(1, &argv), &outval);
}
static bool NS_ProcessNextEvent()
{
//g_qMutex.lock();
//size_t size = g_queue.size();
//g_qMutex.unlock();
while (true)
{
std::string str = "";
g_qMutex.lock();
size_t size = g_queue.size();
if (size > 0)
{
auto first = g_queue.begin();
str = *first;
g_queue.erase(first);
size = g_queue.size();
}
g_qMutex.unlock();
if (str.length() > 0)
{
ScriptingCore::getInstance()->debugProcessInput(str);
}
if (size <= 0)
break;
}
// std::this_thread::yield();
std::this_thread::sleep_for(std::chrono::milliseconds(10));
return true;
}
就这两个函数,你们自己改吧
void SimpleRunLoop::update(float dt)
{
std::string message;
size_t messageCount = 0;
while (true)
{
g_qMutex.lock();
messageCount = g_queue.size(); // if messageCount == 1
if (messageCount > 0)
{
auto first = g_queue.begin();
message = *first; // get a message
g_queue.erase(first);
–messageCount; // messageCount = 0
}
g_qMutex.unlock();
if (messageCount == 0) // messageCount is 0 break
break;
if (!message.empty()) // message 还未处理
ScriptingCore::getInstance()->debugProcessInput(message);
}
}
最近我也遇到了