I am able to reproduce the same behavior with Node.js v10.21.0.
On Tuesday, June 30, 2020 at 5:46:07 PM UTC-7, Nupoor Kotasthane wrote: > > The observation here was that we are able to inspect, only the objects > that are imported/exported, using Debugger.evaluateOnCallFrame. For all the > other objects, when evaluated, we just get reference errors. > Any insight on why this may be happening will be great! > > Thanks, > Nupoor > > > > On Friday, June 26, 2020 at 9:07:45 AM UTC-7, Nupoor Kotasthane wrote: >> >> Hi Ben, >> >> Here's the example I have been using: >> I have two mjs files: >> sample.mjs: >> import {a} from '/testmod.mjs'; >> let p = 9; >> var t1 = 1; >> var t2 = 2; >> var t3 = 3; >> var t4 = 4; >> var temp = 1; >> temp = 2* temp; >> temp = 3* temp; >> temp >> >> testmod.mjs: >> export var a = 10; >> export var b = 20; >> export var c = 30; >> >> Once I start debugging sample.mjs, I step over a little and reach line 5 >> and I get the following notification from inspector: >> { >> "method": "Debugger.paused", >> "params": { >> "callFrames": [ >> { >> "callFrameId": "{\"ordinal\":0,\"injectedScriptId\":1}", >> "functionName": "", >> "functionLocation": { >> "scriptId": "11", >> "lineNumber": 0, >> "columnNumber": 0 >> }, >> "location": { >> "scriptId": "11", >> "lineNumber": 5, >> "columnNumber": 9 >> }, >> "url": "/sample.mjs", >> "scopeChain": [ >> { >> "type": "module", >> "object": { >> "type": "object", >> "className": "Object", >> "description": "Object", >> "objectId": "{\"injectedScriptId\":1,\"id\":19}" >> }, >> "startLocation": { >> "scriptId": "11", >> "lineNumber": 0, >> "columnNumber": 0 >> }, >> "endLocation": { >> "scriptId": "11", >> "lineNumber": 10, >> "columnNumber": 0 >> } >> }, >> { >> "type": "global", >> "object": { >> "type": "object", >> "className": "global", >> "description": "global", >> "objectId": "{\"injectedScriptId\":1,\"id\":20}" >> } >> } >> ], >> "this": { >> "type": "undefined" >> } >> } >> ], >> "reason": "other", >> "hitBreakpoints": [] >> } >> } >> >> >> At this point I want to inspect variable "p". A >> Debugger.evaluateOnCallFrame request to inspector with the parameter "p" >> returns: >> { >> "id": 12, >> "result": >> { >> "result": >> { >> "type": "object", >> "subtype": "error", >> "className": "ReferenceError", >> "description": "ReferenceError: p is not defined\n at eval (eval at >> <anonymous> (/sample.mjs:6:10), <anonymous>:1:1)\n at /sample.mjs:6:10", >> "objectId": "{\"injectedScriptId\":1,\"id\":21}" >> } >> , >> "exceptionDetails": >> { >> "exceptionId": 1, >> "text": "Uncaught", >> "lineNumber": 0, >> "columnNumber": 0, >> "scriptId": "14", >> "stackTrace": >> { >> "callFrames": >> [ >> { >> "functionName": "", >> "scriptId": "14", >> "url": "", >> "lineNumber": 0, >> "columnNumber": 0 >> } >> , >> { >> "functionName": "", >> "scriptId": "11", >> "url": "/sample.mjs", >> "lineNumber": 5, >> "columnNumber": 9 >> } >> ] >> } >> , >> "exception": >> { >> "type": "object", >> "subtype": "error", >> "className": "ReferenceError", >> "description": "ReferenceError: p is not defined\n at eval (eval at >> <anonymous> (/sample.mjs:6:10), <anonymous>:1:1)\n at /sample.mjs:6:10", >> "objectId": "{\"injectedScriptId\":1,\"id\":22}" >> } >> } >> } >> } >> >> The expected outcome here would have been to see the actual value of >> variable "p". I am seeing similar response for all variables declared in >> sample.mjs and that is unexpected. However, the imported object "a" can >> does not yield the same response. Inspector returns the right value for >> "a". >> >> At the same point if I send Runtime.getProperties request to V8 with the >> current module scope's object id: '{\"injectedScriptId\":1,\"id\":19}' as >> parameter, I only see the following: >> { >> "id": 15, >> "result": >> { >> "result": >> [ >> { >> "name": "a", >> "value": >> { >> "type": "number", >> "value": 10, >> "description": "10" >> } >> , >> "writable": true, >> "configurable": true, >> "enumerable": true, >> "isOwn": true >> } >> ] >> } >> } >> >> I do not see the other variables in sample.mjs in the above response. >> >> Do you still think this is expected behavior or do you suspect there is >> another issue here? >> >> Please let me know. Any help will be great! >> >> Thanks, >> Nupoor >> >> >> >> >> >> >> On Friday, June 26, 2020 at 4:11:04 AM UTC-7, Ben Noordhuis wrote: >>> >>> On Thu, Jun 25, 2020 at 2:35 AM Nupoor Kotasthane <nupoo...@gmail.com> >>> wrote: >>> > >>> > I also notice that the 'this' object in the Debugger.CallFrame objects >>> have their 'type' set to 'undefined' when debugging ES6 modules. I also >>> notice that the variables declared in the starting module are missing from >>> the scope when I try to inspect the scope object with >>> Runtime.getProperties. Is this expected behavior? >>> > >>> > >>> > >>> > On Tuesday, June 23, 2020 at 2:56:57 PM UTC-7, Nupoor Kotasthane >>> wrote: >>> >> >>> >> Hi Ben, >>> >> >>> >> We have embedded V8 version 6.7 in our product. We use it to run and >>> debug JavaScript. While debugging scripts is working okay, debugging ES6 >>> modules using the inspector has this one problem. When using >>> Debugger.evaluateOnCallFrame to inspect variables we keep getting an >>> inspector response with reference errors saying the variables are not >>> defined. This is true for all locally declared variables within the current >>> scope in the "mjs" module (I do not see this problem with the imported >>> module, only the importing module). >>> >> >>> >> It seems like symbols are not generated for the importing 'mjs' >>> module. So do we have to do anything special for modules for this to work? >>> I can share my example if and inspector responses if that will help. >>> >> >>> >> Thanks, >>> >> Nupoor >>> >>> It's possible I'm misunderstanding you but it sounds like it's working >>> as expected. >>> >>> ES modules run in strict mode. Function calls (not method calls) have >>> `this` set to `undefined`, and top-level variables are local to the >>> module, not global. >>> >>> If that's not what you mean, can you share some example code and >>> expected vs. actual output? >>> >> -- -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-users/24b22a5d-c7f3-4cd9-8f0e-e7928031735fo%40googlegroups.com.