Index: src/d8.js |
=================================================================== |
--- src/d8.js (revision 1220) |
+++ src/d8.js (working copy) |
@@ -79,7 +79,7 @@ |
// Debug events which can occour in the V8 JavaScript engine. These originate |
-// from the API include file debug.h. |
+// from the API include file v8-debug.h. |
Debug.DebugEvent = { Break: 1, |
Exception: 2, |
NewFunction: 3, |
@@ -99,75 +99,91 @@ |
currentFrame: kNoFrame, |
currentSourceLine: -1 |
} |
+var trace_compile = false; // Tracing all compile events? |
function DebugEventToText(event) { |
- if (event.eventType() == 1) { |
- // Build the break details. |
- var details = ''; |
- if (event.breakPointsHit()) { |
- details += 'breakpoint'; |
- if (event.breakPointsHit().length > 1) { |
- details += 's'; |
- } |
- details += ' #'; |
- for (var i = 0; i < event.breakPointsHit().length; i++) { |
- if (i > 0) { |
- details += ', #'; |
+ switch (event.eventType()) { |
+ case Debug.DebugEvent.Break: |
+ // Build the break details. |
+ var details = ''; |
+ if (event.breakPointsHit()) { |
+ details += 'breakpoint'; |
+ if (event.breakPointsHit().length > 1) { |
+ details += 's'; |
} |
- // Find the break point number. For break points originating from a |
- // script break point display the script break point number. |
- var break_point = event.breakPointsHit()[i]; |
- var script_break_point = break_point.script_break_point(); |
- if (script_break_point) { |
- details += script_break_point.number(); |
- } else { |
- details += break_point.number(); |
+ details += ' #'; |
+ for (var i = 0; i < event.breakPointsHit().length; i++) { |
+ if (i > 0) { |
+ details += ', #'; |
+ } |
+ // Find the break point number. For break points originating from a |
+ // script break point display the script break point number. |
+ var break_point = event.breakPointsHit()[i]; |
+ var script_break_point = break_point.script_break_point(); |
+ if (script_break_point) { |
+ details += script_break_point.number(); |
+ } else { |
+ details += break_point.number(); |
+ } |
} |
+ } else { |
+ details += 'break'; |
} |
- } else { |
- details += 'break'; |
- } |
- details += ' in '; |
- details += event.executionState().frame(0).invocationText(); |
- details += ' at '; |
- details += event.executionState().frame(0).sourceAndPositionText(); |
- details += '\n' |
- if (event.func().script()) { |
- details += FrameSourceUnderline(event.executionState().frame(0)); |
- } |
- Debug.State.currentSourceLine = |
- event.executionState().frame(0).sourceLine(); |
- Debug.State.currentFrame = 0; |
- return details; |
- } else if (event.eventType() == 2) { |
- var details = ''; |
- if (event.uncaught_) { |
- details += 'Uncaught: '; |
- } else { |
- details += 'Exception: '; |
- } |
- |
- details += '"'; |
- details += event.exception(); |
- details += '"'; |
- if (event.executionState().frameCount() > 0) { |
- details += '"'; |
- details += event.exception(); |
+ details += ' in '; |
+ details += event.executionState().frame(0).invocationText(); |
details += ' at '; |
details += event.executionState().frame(0).sourceAndPositionText(); |
- details += '\n'; |
- details += FrameSourceUnderline(event.executionState().frame(0)); |
+ details += '\n' |
+ if (event.func().script()) { |
+ details += FrameSourceUnderline(event.executionState().frame(0)); |
+ } |
Debug.State.currentSourceLine = |
event.executionState().frame(0).sourceLine(); |
Debug.State.currentFrame = 0; |
- } else { |
- details += ' (empty stack)'; |
- Debug.State.currentSourceLine = -1; |
- Debug.State.currentFrame = kNoFrame; |
- } |
+ return details; |
- return details; |
+ case Debug.DebugEvent.Exception: |
+ var details = ''; |
+ if (event.uncaught_) { |
+ details += 'Uncaught: '; |
+ } else { |
+ details += 'Exception: '; |
+ } |
+ |
+ details += '"'; |
+ details += event.exception(); |
+ details += '"'; |
+ if (event.executionState().frameCount() > 0) { |
+ details += '"'; |
+ details += event.exception(); |
+ details += ' at '; |
+ details += event.executionState().frame(0).sourceAndPositionText(); |
+ details += '\n'; |
+ details += FrameSourceUnderline(event.executionState().frame(0)); |
+ Debug.State.currentSourceLine = |
+ event.executionState().frame(0).sourceLine(); |
+ Debug.State.currentFrame = 0; |
+ } else { |
+ details += ' (empty stack)'; |
+ Debug.State.currentSourceLine = -1; |
+ Debug.State.currentFrame = kNoFrame; |
+ } |
+ return details; |
+ |
+ case Debug.DebugEvent.AfterCompile: |
+ if (trace_compile) { |
+ details = 'Source ' + event.script().name() + ' compiled:\n' |
+ var source = event.script().source(); |
+ if (!(source[source.length - 1] == '\n')) { |
+ details += source; |
+ } else { |
+ details += source.substring(0, source.length - 1); |
+ } |
+ return details; |
+ } else { |
+ return ''; |
+ } |
} |
return 'Unknown debug event ' + event.eventType(); |
@@ -283,11 +299,17 @@ |
this.request_ = this.clearCommandToJSONRequest_(args); |
break; |
+ case 'trace': |
+ // Return undefined to indicate command handled internally (no JSON). |
+ this.request_ = void 0; |
+ this.traceCommand_(args); |
+ break; |
+ |
case 'help': |
case '?': |
this.helpCommand_(args); |
- // Return null to indicate no JSON to send (command handled internally). |
- this.request_ = void 0; |
+ // Return undefined to indicate command handled internally (no JSON). |
+ this.request_ = void 0; |
break; |
default: |
@@ -597,7 +619,22 @@ |
}; |
-// Create a JSON request for the break command. |
+// Handle the trace command. |
+DebugRequest.prototype.traceCommand_ = function(args) { |
+ // Process arguments. |
+ if (args && args.length > 0) { |
+ if (args == 'compile') { |
+ trace_compile = !trace_compile; |
+ print('Tracing of compiled scripts ' + (trace_compile ? 'on' : 'off')); |
+ } else { |
+ throw new Error('Invalid trace arguments.'); |
+ } |
+ } else { |
+ throw new Error('Invalid trace arguments.'); |
+ } |
+} |
+ |
+// Handle the help command. |
DebugRequest.prototype.helpCommand_ = function(args) { |
// Help os quite simple. |
if (args && args.length > 0) { |
@@ -613,6 +650,7 @@ |
print('source [from line [num lines]]'); |
print('scripts'); |
print('continue'); |
+ print('trace compile'); |
print('help'); |
} |