On 2014/06/03 08:12:46, Yang wrote:
https://codereview.chromium.org/296953005/diff/40001/src/debug-debugger.js
File src/debug-debugger.js (right):
https://codereview.chromium.org/296953005/diff/40001/src/debug-debugger.js#newcode491
src/debug-debugger.js:491: return %DebugGetLoadedScripts();
On 2014/06/03 08:07:21, yurys wrote:
> This change looks wrong to me. By design of V8 debugging protocol mirror
cache
> should be kept while we are staying on a breakpoint so that the client
could
> access corresponding object by its mirror id. After this change,
however,
the
> cache will be cleared on any call to GetLoadedScripts() and the remote
id
will
> become invalid.
>
> In case of blink the problem is that we create mirror objects not only
when
we
> stay on a breakpoint and I'm not sure we clear them properly. Also we
don't
use
> id->mirror map in blink and I believe a right way to fix this would be
to
> disable mirror cache in blink completely. WDYT?
Not sure I understand. Which code path does blink use to get loaded
scripts?
Blink adds a bunch of convenience methods into the debug context all of
which
are defined in DebuggerScript.js [1] and they leverage mirror
infrastructure to
inspected user objects (one important difference compared to v8 debugger as
I
said is that we never need to resolve id into morror object so the cache is
useless in case of Blink). To collect current scripts
PageScriptDebugServer.cpp
calls [2] DebuggerScript.getScripts() which in turn calls Debug.scripts()
[3]
but all of this happens without entering debugger as simple function call
using
v8 api. As we don't enter debugger in that case ClearMirrorCache may never
be
called. This might be a bug in this particular case and we should use
v8::Debug::Call for invoking DebuggerScript.getScripts() to make sure
EnterDebugger is called and mirror cache is cleared after the call. But in
general to avoid bugs like this we could skip mirror cache for the mirrors
created by Blink.
[1]
https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/v8/DebuggerScript.js
[2]
https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/v8/PageScriptDebugServer.cpp&q=PageScriptDebugServer.cpp&sq=package:chromium&type=cs&l=132
[3]
https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/v8/DebuggerScript.js&q=getScripts&sq=package:chromium&type=cs&l=132
https://codereview.chromium.org/296953005/
--
--
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.