Hi @soylentgraham, I'm trying to replicate what you're doing as well but am running into some other problems. The most notable of which is that my websocket is on a different thread than my isolate creation. I see from your solution that you're adding the frontend messages to a queue and looking through them in your event loop. My problem is that I have long running javascript that is not intended to exit/return until the program stops. Do you have any suggestions/ideas?
Thanks, Konrad On Tuesday, September 18, 2018 at 10:49:43 AM UTC-4, @soylentgraham wrote: > > YetAnotherUpdate > > After some more digging, I found the issue I have is identified node and > chromium too... > > https://github.com/nodejs/node/commit/b1e26128f317a6f5a5808a0a727e98f80f088b84 > > So, it looks like the default v8 [platform] isn't chrome-dev-tools > compatible. > Ibon's case worked as it has a specific Android platform implementation. > Chromium and Node also have their own platform. > > So, I made the most basic platform proxy possible to work around it... > > https://github.com/SoylentGraham/V8InspectorMinimal/blob/master/src/TV8Platform.h > > And it works! > I can now modify code on the fly, execute from the console. > I can't seem to debug, and pressing pause-execution a few times gives me a > new assert, but the higher level code is a bit of a mess at this point, so > I'm probably implementing something wrong... > > Still, if anyone else ever finds this problem... V8 alone cannot be used > with chrome dev tools. (as of 7.1.0.0 > > 4544e18b0c3845a9fca422cf0903df4803343cf1) > > On Friday, 14 September 2018 11:44:33 UTC+1, @soylentgraham wrote: >> >> So the core of my issue at the moment, is this assert (UNIMPLEMENTED) >> >> void >> DefaultWorkerThreadsTaskRunner::PostDelayedTask(std::unique_ptr<Task> task, >> >> double >> delay_in_seconds) { >> >> base::LockGuard<base::Mutex> guard(&lock_); >> >> if (terminated_) return; >> >> if (delay_in_seconds == 0) { >> >> queue_.Append(std::move(task)); >> >> return; >> >> } >> >> // There is no use case for this function with non zero >> delay_in_second on a >> >> // worker thread at the moment, but it is still part of the interface. >> >> UNIMPLEMENTED(); >> >> } >> >> from >> >> DefaultPlatform::CallDelayedOnWorkerThread( >> >> being called by >> >> protocol::Response V8InspectorImpl::EvaluateScope::setTimeout(double >> timeout) { >> >> if (m_isolate->IsExecutionTerminating()) { >> >> return protocol::Response::Error("Execution was terminated"); >> >> } >> >> m_cancelToken.reset(new CancelToken()); >> >> v8::debug::GetCurrentPlatform()->CallDelayedOnWorkerThread( >> >> v8::base::make_unique<TerminateTask>(m_isolate, m_cancelToken), >> timeout); >> >> return protocol::Response::OK(); >> >> } >> >> >> >> so, SetTimeout in the inspector, explicitly uses something we[developers] >> know isn't implemented... >> From reading things before, Node.js was using the default platform, I >> think now it has it's own platform. Maybe chromium does too... >> Perhaps the demo/unittest debugger/d8/inspector doesn't call settimeout, >> so this hasn't been found with default setups... >> >> Maybe I HAVE to implement my own platform to support chrome dev tools and >> handle delayed jobs... >> >> >> On Thursday, 13 September 2018 17:14:58 UTC+1, @soylentgraham wrote: >>> >>> For any future readers; >>> I went back to trying to build a debug v8 set of libs (wouldnt compile >>> before, added is_component_build=false which I think fixed that) >>> Built with latest master (4544e18b0c3845a9fca422cf0903df4803343cf1) >>> >>> Which forced me to correct a few uses of deprecated functions, including >>> v8::String::NewFromUtf8() with no isolate, so *possibly* that was the >>> source of the crash re: scriptorigin. I now get an origin in CDT (kinda, it >>> still breaks in a VMXX file) >>> >>> Then asserts as before in "code that should never be reached" (see >>> earlier in the thread) >>> >>> [image: Screen Shot 2018-09-13 at 17.08.09.png] >>> >>> >>> >>> On Wednesday, 12 September 2018 17:34:30 UTC+1, @soylentgraham wrote: >>>> >>>> With a lot of back & forth help from Ibon/hyperandroid, we've got a bit >>>> further in working out which things are good, and which are bad. >>>> Feels like we're close, but things are still unstable, and a bit >>>> unresponsive. >>>> >>>> I can kinda break into the code (which only shows *this *in sources) >>>> Still get the assert above from trying to autocomplete too many times. >>>> (albeit after a RunMessageLoop callback now) >>>> And if I add a script origin, I get a crash trying to stacktrace >>>> (immediately when connecting, still trying to figure this out, as my >>>> scriptorigin is okay) >>>> >>>> More stripped back version here (cutting more dependencies out, but all >>>> my setup, inspector, frontend, messaging is in v8minimal.cpp) >>>> https://github.com/SoylentGraham/V8InspectorMinimal >>>> >>>> On Monday, 27 August 2018 13:49:37 UTC+1, @soylentgraham wrote: >>>>> >>>>> Through various sources (ie, googling & github) I've finally got a bit >>>>> of a grasp of the flow for connecting chrome dev tools to my v8 app. >>>>> (which >>>>> is using a pretty recent HEAD build I've built myself with all default >>>>> settings other than compiling as a static lib[s]. v8-version.h says >>>>> 7.0.0.0) >>>>> >>>>> I connect via an explicit url (can't quite get json/list/ to show up >>>>> in chrome yet) >>>>> *chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:8008 >>>>> >>>>> <http://127.0.0.1:8008>* >>>>> (Not sure how relevant the v8only=true and experiments=true are, >>>>> couldn't find any documentation on this) >>>>> >>>>> This connects to my websocket, and I pass all messages straight to >>>>> *Session->dispatchProtocolMessage* >>>>> >>>>> My channel then gets *sendResponse's* in return, which I send back to >>>>> chrome over my websocket. >>>>> >>>>> Chrome dev tools shows essentially an empty debugger, no sources, no >>>>> console output, no errors... >>>>> >>>>> The responses my isolate/context sends back, suggest maybe I have some >>>>> JS symbols/modules missing, which maybe I need to implement? >>>>> I'm kinda assuming this, as the debugger. methods succeed, but things >>>>> like *Inspector.enable* (which I haven't found anyone implementing, >>>>> but some people are implementing Inspector objects, just with different >>>>> methods) fail >>>>> >>>>> *Chrome tools message: {"id":16,"method":"Inspector.enable"}* >>>>> >>>>> *Channel response: >>>>> {"error":{"code":-32601,"message":"'Inspector.enable' wasn't >>>>> found"},"id":16}* >>>>> Is this why chrome isn't proceeding with anything? >>>>> Am I supposed to implement these, or perhaps are they missing from my >>>>> native blobs when I built my v8 libraries? >>>>> >>>>> My overloads of the inspector client functions like >>>>> *runMessageLoopOnPause* aren't being called, but I assume that's just >>>>> because I haven't gotten to any stage where commands are being evaluated? >>>>> >>>>> Below is what I get when I connect chrome, but then it just sits there >>>>> :) >>>>> >>>>> Thanks for any pointers in the right direction! >>>>> >>>>> *Chrome tools message: >>>>> {"id":1,"method":"Network.enable","params":{"maxPostDataSize":65536}}* >>>>> >>>>> *Channel response: {"error":{"code":-32601,"message":"'Network.enable' >>>>> wasn't found"},"id":1}* >>>>> >>>>> *Chrome tools message: {"id":2,"method":"Page.enable"}* >>>>> >>>>> *Channel response: {"error":{"code":-32601,"message":"'Page.enable' >>>>> wasn't found"},"id":2}* >>>>> >>>>> *Chrome tools message: {"id":3,"method":"Page.getResourceTree"}* >>>>> >>>>> *Chrome tools message: {"id":4,"method":"Profiler.enable"}* >>>>> >>>>> *Channel response: >>>>> {"error":{"code":-32601,"message":"'Page.getResourceTree' wasn't >>>>> found"},"id":3}* >>>>> >>>>> *Channel response: {"id":4,"result":{}}* >>>>> >>>>> *Chrome tools message: {"id":5,"method":"Runtime.enable"}* >>>>> >>>>> *Channel response: >>>>> {"method":"Runtime.executionContextCreated","params":{"context":{"id":1,"origin":"","name":"PopEngineContextName"}}}* >>>>> >>>>> *Channel response: {"id":5,"result":{}}* >>>>> >>>>> *Chrome tools message: {"id":6,"method":"Debugger.enable"}* >>>>> >>>>> *Channel response: >>>>> {"method":"Debugger.scriptParsed","params":{"scriptId":"9","url":"","startLine":0,"startColumn":0,"endLine":1,"endColumn":0,"executionContextId":1,"hash":"2a70962568dbbde00fb323decd63c2ca137b304c","isLiveEdit":false,"sourceMapURL":"","hasSourceURL":false,"isModule":false,"length":17}}* >>>>> >>>>> *Channel response: >>>>> {"id":6,"result":{"debuggerId":"(6B1A58050CBFAE70E5B41C5556E5520D)"}}* >>>>> >>>>> *Chrome tools message: >>>>> {"id":7,"method":"Debugger.setPauseOnExceptions","params":{"state":"uncaught"}}* >>>>> >>>>> *Channel response: {"id":7,"result":{}}* >>>>> >>>>> *Chrome tools message: >>>>> {"id":8,"method":"Debugger.setAsyncCallStackDepth","params":{"maxDepth":32}}* >>>>> >>>>> *Channel response: {"id":8,"result":{}}* >>>>> >>>>> *Chrome tools message: {"id":9,"method":"DOM.enable"}* >>>>> >>>>> *Channel response: {"error":{"code":-32601,"message":"'DOM.enable' >>>>> wasn't found"},"id":9}* >>>>> >>>>> *Chrome tools message: {"id":10,"method":"CSS.enable"}* >>>>> >>>>> *Channel response: {"error":{"code":-32601,"message":"'CSS.enable' >>>>> wasn't found"},"id":10}* >>>>> >>>>> *Chrome tools message: {"id":11,"method":"Overlay.enable"}* >>>>> >>>>> *Channel response: {"error":{"code":-32601,"message":"'Overlay.enable' >>>>> wasn't found"},"id":11}* >>>>> >>>>> *Chrome tools message: >>>>> {"id":12,"method":"Overlay.setShowViewportSizeOnResize","params":{"show":true}}* >>>>> >>>>> *Channel response: >>>>> {"error":{"code":-32601,"message":"'Overlay.setShowViewportSizeOnResize' >>>>> wasn't found"},"id":12}* >>>>> >>>>> *Chrome tools message: {"id":13,"method":"Log.enable"}* >>>>> >>>>> *Channel response: {"error":{"code":-32601,"message":"'Log.enable' >>>>> wasn't found"},"id":13}* >>>>> >>>>> *Chrome tools message: >>>>> {"id":14,"method":"Log.startViolationsReport","params":{"config":[{"name":"longTask","threshold":200},{"name":"longLayout","threshold":30},{"name":"blockedEvent","threshold":100},{"name":"blockedParser","threshold":-1},{"name":"handler","threshold":150},{"name":"recurringHandler","threshold":50},{"name":"discouragedAPIUse","threshold":-1}]}}* >>>>> >>>>> *Channel response: >>>>> {"error":{"code":-32601,"message":"'Log.startViolationsReport' wasn't >>>>> found"},"id":14}* >>>>> >>>>> *Chrome tools message: {"id":15,"method":"ServiceWorker.enable"}* >>>>> >>>>> *Channel response: >>>>> {"error":{"code":-32601,"message":"'ServiceWorker.enable' wasn't >>>>> found"},"id":15}* >>>>> >>>>> *Chrome tools message: {"id":16,"method":"Inspector.enable"}* >>>>> >>>>> *Channel response: >>>>> {"error":{"code":-32601,"message":"'Inspector.enable' wasn't >>>>> found"},"id":16}* >>>>> >>>>> *Chrome tools message: >>>>> {"id":17,"method":"Target.setAutoAttach","params":{"autoAttach":true,"waitForDebuggerOnStart":true}}* >>>>> >>>>> *Channel response: >>>>> {"error":{"code":-32601,"message":"'Target.setAutoAttach' wasn't >>>>> found"},"id":17}* >>>>> >>>>> *Chrome tools message: >>>>> {"id":18,"method":"Target.setDiscoverTargets","params":{"discover":true}}* >>>>> >>>>> *Channel response: >>>>> {"error":{"code":-32601,"message":"'Target.setDiscoverTargets' wasn't >>>>> found"},"id":18}* >>>>> >>>>> *Chrome tools message: >>>>> {"id":19,"method":"Target.setRemoteLocations","params":{"locations":[{"host":"localhost","port":9229}]}}* >>>>> >>>>> *Channel response: >>>>> {"error":{"code":-32601,"message":"'Target.setRemoteLocations' wasn't >>>>> found"},"id":19}* >>>>> >>>>> *Chrome tools message: >>>>> {"id":20,"method":"Debugger.setBlackboxPatterns","params":{"patterns":["/main\\.js\\b"]}}* >>>>> >>>>> *Channel response: {"id":20,"result":{}}* >>>>> >>>>> *Chrome tools message: >>>>> {"id":21,"method":"Page.getNavigationHistory","params":{}}* >>>>> >>>>> *Channel response: >>>>> {"error":{"code":-32601,"message":"'Page.getNavigationHistory' wasn't >>>>> found"},"id":21}* >>>>> >>>>> >>>>> >>>>> -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.