Node v10 uses V8 6.8 (two years old), and the latest version of V8 is 8.4. On Thursday, July 9, 2020 at 1:42:07 PM UTC-7, Nupoor Kotasthane wrote: > > 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/72613b0f-11fb-4682-b131-b72a83fd5553o%40googlegroups.com.