| OLD | NEW | 
|---|
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without | 
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are | 
| 4 // met: | 4 // met: | 
| 5 // | 5 // | 
| 6 //     * Redistributions of source code must retain the above copyright | 6 //     * Redistributions of source code must retain the above copyright | 
| 7 //       notice, this list of conditions and the following disclaimer. | 7 //       notice, this list of conditions and the following disclaimer. | 
| 8 //     * Redistributions in binary form must reproduce the above | 8 //     * Redistributions in binary form must reproduce the above | 
| 9 //       copyright notice, this list of conditions and the following | 9 //       copyright notice, this list of conditions and the following | 
| 10 //       disclaimer in the documentation and/or other materials provided | 10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 647     break_point.actual_location = { line: actual_location.line, | 647     break_point.actual_location = { line: actual_location.line, | 
| 648                                     column: actual_location.column }; | 648                                     column: actual_location.column }; | 
| 649     break_point.setCondition(opt_condition); | 649     break_point.setCondition(opt_condition); | 
| 650     return break_point.number(); | 650     return break_point.number(); | 
| 651   } | 651   } | 
| 652 }; | 652 }; | 
| 653 | 653 | 
| 654 | 654 | 
| 655 Debug.enableBreakPoint = function(break_point_number) { | 655 Debug.enableBreakPoint = function(break_point_number) { | 
| 656   var break_point = this.findBreakPoint(break_point_number, false); | 656   var break_point = this.findBreakPoint(break_point_number, false); | 
| 657   // Only enable if the breakpoint hasn't been deleted: | 657   break_point.enable(); | 
| 658   if (break_point) { |  | 
| 659     break_point.enable(); |  | 
| 660   } |  | 
| 661 }; | 658 }; | 
| 662 | 659 | 
| 663 | 660 | 
| 664 Debug.disableBreakPoint = function(break_point_number) { | 661 Debug.disableBreakPoint = function(break_point_number) { | 
| 665   var break_point = this.findBreakPoint(break_point_number, false); | 662   var break_point = this.findBreakPoint(break_point_number, false); | 
| 666   // Only enable if the breakpoint hasn't been deleted: | 663   break_point.disable(); | 
| 667   if (break_point) { |  | 
| 668     break_point.disable(); |  | 
| 669   } |  | 
| 670 }; | 664 }; | 
| 671 | 665 | 
| 672 | 666 | 
| 673 Debug.changeBreakPointCondition = function(break_point_number, condition) { | 667 Debug.changeBreakPointCondition = function(break_point_number, condition) { | 
| 674   var break_point = this.findBreakPoint(break_point_number, false); | 668   var break_point = this.findBreakPoint(break_point_number, false); | 
| 675   break_point.setCondition(condition); | 669   break_point.setCondition(condition); | 
| 676 }; | 670 }; | 
| 677 | 671 | 
| 678 | 672 | 
| 679 Debug.changeBreakPointIgnoreCount = function(break_point_number, ignoreCount) { | 673 Debug.changeBreakPointIgnoreCount = function(break_point_number, ignoreCount) { | 
| (...skipping 20 matching lines...) Expand all  Loading... | 
| 700 | 694 | 
| 701 Debug.clearAllBreakPoints = function() { | 695 Debug.clearAllBreakPoints = function() { | 
| 702   for (var i = 0; i < break_points.length; i++) { | 696   for (var i = 0; i < break_points.length; i++) { | 
| 703     break_point = break_points[i]; | 697     break_point = break_points[i]; | 
| 704     %ClearBreakPoint(break_point); | 698     %ClearBreakPoint(break_point); | 
| 705   } | 699   } | 
| 706   break_points = []; | 700   break_points = []; | 
| 707 }; | 701 }; | 
| 708 | 702 | 
| 709 | 703 | 
| 710 Debug.disableAllBreakPoints = function() { |  | 
| 711   // Disable all user defined breakpoints: |  | 
| 712   for (var i = 1; i < next_break_point_number; i++) { |  | 
| 713     Debug.disableBreakPoint(i); |  | 
| 714   } |  | 
| 715   // Disable all exception breakpoints: |  | 
| 716   %ChangeBreakOnException(Debug.ExceptionBreak.Caught, false); |  | 
| 717   %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, false); |  | 
| 718 }; |  | 
| 719 |  | 
| 720 |  | 
| 721 Debug.findScriptBreakPoint = function(break_point_number, remove) { | 704 Debug.findScriptBreakPoint = function(break_point_number, remove) { | 
| 722   var script_break_point; | 705   var script_break_point; | 
| 723   for (var i = 0; i < script_break_points.length; i++) { | 706   for (var i = 0; i < script_break_points.length; i++) { | 
| 724     if (script_break_points[i].number() == break_point_number) { | 707     if (script_break_points[i].number() == break_point_number) { | 
| 725       script_break_point = script_break_points[i]; | 708       script_break_point = script_break_points[i]; | 
| 726       // Remove the break point from the list if requested. | 709       // Remove the break point from the list if requested. | 
| 727       if (remove) { | 710       if (remove) { | 
| 728         script_break_point.clear(); | 711         script_break_point.clear(); | 
| 729         script_break_points.splice(i,1); | 712         script_break_points.splice(i,1); | 
| 730       } | 713       } | 
| (...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1351       } else if (request.command == 'break') { | 1334       } else if (request.command == 'break') { | 
| 1352         this.breakRequest_(request, response); | 1335         this.breakRequest_(request, response); | 
| 1353       } else if (request.command == 'setbreakpoint') { | 1336       } else if (request.command == 'setbreakpoint') { | 
| 1354         this.setBreakPointRequest_(request, response); | 1337         this.setBreakPointRequest_(request, response); | 
| 1355       } else if (request.command == 'changebreakpoint') { | 1338       } else if (request.command == 'changebreakpoint') { | 
| 1356         this.changeBreakPointRequest_(request, response); | 1339         this.changeBreakPointRequest_(request, response); | 
| 1357       } else if (request.command == 'clearbreakpoint') { | 1340       } else if (request.command == 'clearbreakpoint') { | 
| 1358         this.clearBreakPointRequest_(request, response); | 1341         this.clearBreakPointRequest_(request, response); | 
| 1359       } else if (request.command == 'clearbreakpointgroup') { | 1342       } else if (request.command == 'clearbreakpointgroup') { | 
| 1360         this.clearBreakPointGroupRequest_(request, response); | 1343         this.clearBreakPointGroupRequest_(request, response); | 
| 1361       } else if (request.command == 'disconnect') { |  | 
| 1362         this.disconnectRequest_(request, response); |  | 
| 1363       } else if (request.command == 'setexceptionbreak') { |  | 
| 1364         this.setExceptionBreakRequest_(request, response); |  | 
| 1365       } else if (request.command == 'listbreakpoints') { | 1344       } else if (request.command == 'listbreakpoints') { | 
| 1366         this.listBreakpointsRequest_(request, response); | 1345         this.listBreakpointsRequest_(request, response); | 
| 1367       } else if (request.command == 'backtrace') { | 1346       } else if (request.command == 'backtrace') { | 
| 1368         this.backtraceRequest_(request, response); | 1347         this.backtraceRequest_(request, response); | 
| 1369       } else if (request.command == 'frame') { | 1348       } else if (request.command == 'frame') { | 
| 1370         this.frameRequest_(request, response); | 1349         this.frameRequest_(request, response); | 
| 1371       } else if (request.command == 'scopes') { | 1350       } else if (request.command == 'scopes') { | 
| 1372         this.scopesRequest_(request, response); | 1351         this.scopesRequest_(request, response); | 
| 1373       } else if (request.command == 'scope') { | 1352       } else if (request.command == 'scope') { | 
| 1374         this.scopeRequest_(request, response); | 1353         this.scopeRequest_(request, response); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 1387       } else if (request.command == 'suspend') { | 1366       } else if (request.command == 'suspend') { | 
| 1388         this.suspendRequest_(request, response); | 1367         this.suspendRequest_(request, response); | 
| 1389       } else if (request.command == 'version') { | 1368       } else if (request.command == 'version') { | 
| 1390         this.versionRequest_(request, response); | 1369         this.versionRequest_(request, response); | 
| 1391       } else if (request.command == 'profile') { | 1370       } else if (request.command == 'profile') { | 
| 1392         this.profileRequest_(request, response); | 1371         this.profileRequest_(request, response); | 
| 1393       } else if (request.command == 'changelive') { | 1372       } else if (request.command == 'changelive') { | 
| 1394         this.changeLiveRequest_(request, response); | 1373         this.changeLiveRequest_(request, response); | 
| 1395       } else if (request.command == 'flags') { | 1374       } else if (request.command == 'flags') { | 
| 1396         this.debuggerFlagsRequest_(request, response); | 1375         this.debuggerFlagsRequest_(request, response); | 
| 1397       } else if (request.command == 'v8flags') { |  | 
| 1398         this.v8FlagsRequest_(request, response); |  | 
| 1399 |  | 
| 1400       // GC tools: |  | 
| 1401       } else if (request.command == 'gc') { |  | 
| 1402         this.gcRequest_(request, response); |  | 
| 1403 |  | 
| 1404       } else { | 1376       } else { | 
| 1405         throw new Error('Unknown command "' + request.command + '" in request'); | 1377         throw new Error('Unknown command "' + request.command + '" in request'); | 
| 1406       } | 1378       } | 
| 1407     } catch (e) { | 1379     } catch (e) { | 
| 1408       // If there is no response object created one (without command). | 1380       // If there is no response object created one (without command). | 
| 1409       if (!response) { | 1381       if (!response) { | 
| 1410         response = this.createResponse(); | 1382         response = this.createResponse(); | 
| 1411       } | 1383       } | 
| 1412       response.success = false; | 1384       response.success = false; | 
| 1413       response.message = %ToString(e); | 1385       response.message = %ToString(e); | 
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1711     if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { | 1683     if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { | 
| 1712       description.type = 'scriptId'; | 1684       description.type = 'scriptId'; | 
| 1713       description.script_id = break_point.script_id(); | 1685       description.script_id = break_point.script_id(); | 
| 1714     } else { | 1686     } else { | 
| 1715       description.type = 'scriptName'; | 1687       description.type = 'scriptName'; | 
| 1716       description.script_name = break_point.script_name(); | 1688       description.script_name = break_point.script_name(); | 
| 1717     } | 1689     } | 
| 1718     array.push(description); | 1690     array.push(description); | 
| 1719   } | 1691   } | 
| 1720 | 1692 | 
| 1721   response.body = { | 1693   response.body = { breakpoints: array } | 
| 1722     breakpoints: array, |  | 
| 1723     breakOnExceptions: Debug.isBreakOnException(), |  | 
| 1724     breakOnUncaughtExceptions: Debug.isBreakOnUncaughtException() |  | 
| 1725   } |  | 
| 1726 } |  | 
| 1727 |  | 
| 1728 |  | 
| 1729 DebugCommandProcessor.prototype.disconnectRequest_ = |  | 
| 1730     function(request, response) { |  | 
| 1731   Debug.disableAllBreakPoints(); |  | 
| 1732   this.continueRequest_(request, response); |  | 
| 1733 } |  | 
| 1734 |  | 
| 1735 |  | 
| 1736 DebugCommandProcessor.prototype.setExceptionBreakRequest_ = |  | 
| 1737     function(request, response) { |  | 
| 1738   // Check for legal request. |  | 
| 1739   if (!request.arguments) { |  | 
| 1740     response.failed('Missing arguments'); |  | 
| 1741     return; |  | 
| 1742   } |  | 
| 1743 |  | 
| 1744   // Pull out and check the 'type' argument: |  | 
| 1745   var type = request.arguments.type; |  | 
| 1746   if (!type) { |  | 
| 1747     response.failed('Missing argument "type"'); |  | 
| 1748     return; |  | 
| 1749   } |  | 
| 1750 |  | 
| 1751   // Initialize the default value of enable: |  | 
| 1752   var enabled; |  | 
| 1753   if (type == 'all') { |  | 
| 1754     enabled = !Debug.isBreakOnException(); |  | 
| 1755   } else if (type == 'uncaught') { |  | 
| 1756     enabled = !Debug.isBreakOnUncaughtException(); |  | 
| 1757   } |  | 
| 1758 |  | 
| 1759   // Pull out and check the 'enabled' argument if present: |  | 
| 1760   if (!IS_UNDEFINED(request.arguments.enabled)) { |  | 
| 1761     enabled = request.arguments.enabled; |  | 
| 1762     if ((enabled != true) && (enabled != false)) { |  | 
| 1763       response.failed('Illegal value for "enabled":"' + enabled + '"'); |  | 
| 1764     } |  | 
| 1765   } |  | 
| 1766 |  | 
| 1767   // Now set the exception break state: |  | 
| 1768   if (type == 'all') { |  | 
| 1769     %ChangeBreakOnException(Debug.ExceptionBreak.Caught, enabled); |  | 
| 1770   } else if (type == 'uncaught') { |  | 
| 1771     %ChangeBreakOnException(Debug.ExceptionBreak.Uncaught, enabled); |  | 
| 1772   } else { |  | 
| 1773     response.failed('Unknown "type":"' + type + '"'); |  | 
| 1774   } |  | 
| 1775 |  | 
| 1776   // Add the cleared break point number to the response. |  | 
| 1777   response.body = { 'type': type, 'enabled': enabled }; |  | 
| 1778 } | 1694 } | 
| 1779 | 1695 | 
| 1780 | 1696 | 
| 1781 DebugCommandProcessor.prototype.backtraceRequest_ = function(request, response) 
      { | 1697 DebugCommandProcessor.prototype.backtraceRequest_ = function(request, response) 
      { | 
| 1782   // Get the number of frames. | 1698   // Get the number of frames. | 
| 1783   var total_frames = this.exec_state_.frameCount(); | 1699   var total_frames = this.exec_state_.frameCount(); | 
| 1784 | 1700 | 
| 1785   // Create simple response if there are no frames. | 1701   // Create simple response if there are no frames. | 
| 1786   if (total_frames == 0) { | 1702   if (total_frames == 0) { | 
| 1787     response.body = { | 1703     response.body = { | 
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2124       response.setOption('includeSource', includeSource); | 2040       response.setOption('includeSource', includeSource); | 
| 2125     } | 2041     } | 
| 2126 | 2042 | 
| 2127     if (IS_ARRAY(request.arguments.ids)) { | 2043     if (IS_ARRAY(request.arguments.ids)) { | 
| 2128       idsToInclude = {}; | 2044       idsToInclude = {}; | 
| 2129       var ids = request.arguments.ids; | 2045       var ids = request.arguments.ids; | 
| 2130       for (var i = 0; i < ids.length; i++) { | 2046       for (var i = 0; i < ids.length; i++) { | 
| 2131         idsToInclude[ids[i]] = true; | 2047         idsToInclude[ids[i]] = true; | 
| 2132       } | 2048       } | 
| 2133     } | 2049     } | 
| 2134 |  | 
| 2135     var filterStr = null; |  | 
| 2136     var filterNum = null; |  | 
| 2137     if (!IS_UNDEFINED(request.arguments.filter)) { |  | 
| 2138       var num = %ToNumber(request.arguments.filter); |  | 
| 2139       if (!isNaN(num)) { |  | 
| 2140         filterNum = num; |  | 
| 2141       } |  | 
| 2142       filterStr = request.arguments.filter; |  | 
| 2143     } |  | 
| 2144   } | 2050   } | 
| 2145 | 2051 | 
| 2146   // Collect all scripts in the heap. | 2052   // Collect all scripts in the heap. | 
| 2147   var scripts = %DebugGetLoadedScripts(); | 2053   var scripts = %DebugGetLoadedScripts(); | 
| 2148 | 2054 | 
| 2149   response.body = []; | 2055   response.body = []; | 
| 2150 | 2056 | 
| 2151   for (var i = 0; i < scripts.length; i++) { | 2057   for (var i = 0; i < scripts.length; i++) { | 
| 2152     if (idsToInclude && !idsToInclude[scripts[i].id]) { | 2058     if (idsToInclude && !idsToInclude[scripts[i].id]) { | 
| 2153       continue; | 2059       continue; | 
| 2154     } | 2060     } | 
| 2155     if (filterStr || filterNum) { |  | 
| 2156       var script = scripts[i]; |  | 
| 2157       var found = false; |  | 
| 2158       if (filterNum && !found) { |  | 
| 2159         if (script.id && script.id === filterNum) { |  | 
| 2160           found = true; |  | 
| 2161         } |  | 
| 2162       } |  | 
| 2163       if (filterStr && !found) { |  | 
| 2164         if (script.name && script.name.indexOf(filterStr) >= 0) { |  | 
| 2165           found = true; |  | 
| 2166         } |  | 
| 2167       } |  | 
| 2168       if (!found) continue; |  | 
| 2169     } |  | 
| 2170     if (types & ScriptTypeFlag(scripts[i].type)) { | 2061     if (types & ScriptTypeFlag(scripts[i].type)) { | 
| 2171       response.body.push(MakeMirror(scripts[i])); | 2062       response.body.push(MakeMirror(scripts[i])); | 
| 2172     } | 2063     } | 
| 2173   } | 2064   } | 
| 2174 }; | 2065 }; | 
| 2175 | 2066 | 
| 2176 | 2067 | 
| 2177 DebugCommandProcessor.prototype.threadsRequest_ = function(request, response) { | 2068 DebugCommandProcessor.prototype.threadsRequest_ = function(request, response) { | 
| 2178   // Get the number of threads. | 2069   // Get the number of threads. | 
| 2179   var total_threads = this.exec_state_.threadCount(); | 2070   var total_threads = this.exec_state_.threadCount(); | 
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2298     } | 2189     } | 
| 2299   } else { | 2190   } else { | 
| 2300     for (var name in debugger_flags) { | 2191     for (var name in debugger_flags) { | 
| 2301       var value = debugger_flags[name].getValue(); | 2192       var value = debugger_flags[name].getValue(); | 
| 2302       response.body.flags.push({ name: name, value: value }); | 2193       response.body.flags.push({ name: name, value: value }); | 
| 2303     } | 2194     } | 
| 2304   } | 2195   } | 
| 2305 } | 2196 } | 
| 2306 | 2197 | 
| 2307 | 2198 | 
| 2308 DebugCommandProcessor.prototype.v8FlagsRequest_ = function(request, response) { |  | 
| 2309   var flags = request.arguments.flags; |  | 
| 2310   if (!flags) flags = ''; |  | 
| 2311   %SetFlags(flags); |  | 
| 2312 }; |  | 
| 2313 |  | 
| 2314 |  | 
| 2315 DebugCommandProcessor.prototype.gcRequest_ = function(request, response) { |  | 
| 2316   var type = request.arguments.type; |  | 
| 2317   if (!type) type = 'all'; |  | 
| 2318 |  | 
| 2319   var before = %GetHeapUsage(); |  | 
| 2320   %CollectGarbage(type); |  | 
| 2321   var after = %GetHeapUsage(); |  | 
| 2322 |  | 
| 2323   response.body = { "before": before, "after": after }; |  | 
| 2324 }; |  | 
| 2325 |  | 
| 2326 |  | 
| 2327 |  | 
| 2328 |  | 
| 2329 // Check whether the previously processed command caused the VM to become | 2199 // Check whether the previously processed command caused the VM to become | 
| 2330 // running. | 2200 // running. | 
| 2331 DebugCommandProcessor.prototype.isRunning = function() { | 2201 DebugCommandProcessor.prototype.isRunning = function() { | 
| 2332   return this.running_; | 2202   return this.running_; | 
| 2333 } | 2203 } | 
| 2334 | 2204 | 
| 2335 | 2205 | 
| 2336 DebugCommandProcessor.prototype.systemBreak = function(cmd, args) { | 2206 DebugCommandProcessor.prototype.systemBreak = function(cmd, args) { | 
| 2337   return %SystemBreak(); | 2207   return %SystemBreak(); | 
| 2338 }; | 2208 }; | 
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2422     case 'string': | 2292     case 'string': | 
| 2423     case 'number': | 2293     case 'number': | 
| 2424       json = value; | 2294       json = value; | 
| 2425       break | 2295       break | 
| 2426 | 2296 | 
| 2427     default: | 2297     default: | 
| 2428       json = null; | 2298       json = null; | 
| 2429   } | 2299   } | 
| 2430   return json; | 2300   return json; | 
| 2431 } | 2301 } | 
| OLD | NEW | 
|---|