Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(529)

Side by Side Diff: src/debug-debugger.js

Issue 7200024: Issue 1418: Debug: extends setBreakpoint API to accept partial script name as a parameter (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: follow codereview Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/d8.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 Normal: 2 }; 61 Normal: 2 };
62 62
63 // The different types of script compilations matching enum 63 // The different types of script compilations matching enum
64 // Script::CompilationType in objects.h. 64 // Script::CompilationType in objects.h.
65 Debug.ScriptCompilationType = { Host: 0, 65 Debug.ScriptCompilationType = { Host: 0,
66 Eval: 1, 66 Eval: 1,
67 JSON: 2 }; 67 JSON: 2 };
68 68
69 // The different script break point types. 69 // The different script break point types.
70 Debug.ScriptBreakPointType = { ScriptId: 0, 70 Debug.ScriptBreakPointType = { ScriptId: 0,
71 ScriptName: 1 }; 71 ScriptName: 1,
72 ScriptRegExp: 2 };
72 73
73 function ScriptTypeFlag(type) { 74 function ScriptTypeFlag(type) {
74 return (1 << type); 75 return (1 << type);
75 } 76 }
76 77
77 // Globals. 78 // Globals.
78 var next_response_seq = 0; 79 var next_response_seq = 0;
79 var next_break_point_number = 1; 80 var next_break_point_number = 1;
80 var break_points = []; 81 var break_points = [];
81 var script_break_points = []; 82 var script_break_points = [];
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 249
249 250
250 // Object representing a script break point. The script is referenced by its 251 // Object representing a script break point. The script is referenced by its
251 // script name or script id and the break point is represented as line and 252 // script name or script id and the break point is represented as line and
252 // column. 253 // column.
253 function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column, 254 function ScriptBreakPoint(type, script_id_or_name, opt_line, opt_column,
254 opt_groupId) { 255 opt_groupId) {
255 this.type_ = type; 256 this.type_ = type;
256 if (type == Debug.ScriptBreakPointType.ScriptId) { 257 if (type == Debug.ScriptBreakPointType.ScriptId) {
257 this.script_id_ = script_id_or_name; 258 this.script_id_ = script_id_or_name;
258 } else { // type == Debug.ScriptBreakPointType.ScriptName 259 } else if (type == Debug.ScriptBreakPointType.ScriptName) {
259 this.script_name_ = script_id_or_name; 260 this.script_name_ = script_id_or_name;
261 } else if (type == Debug.ScriptBreakPointType.ScriptRegExp) {
262 this.script_regexp_object_ = new RegExp(script_id_or_name);
263 } else {
264 throw new Error("Unexpected breakpoint type " + type);
260 } 265 }
261 this.line_ = opt_line || 0; 266 this.line_ = opt_line || 0;
262 this.column_ = opt_column; 267 this.column_ = opt_column;
263 this.groupId_ = opt_groupId; 268 this.groupId_ = opt_groupId;
264 this.hit_count_ = 0; 269 this.hit_count_ = 0;
265 this.active_ = true; 270 this.active_ = true;
266 this.condition_ = null; 271 this.condition_ = null;
267 this.ignoreCount_ = 0; 272 this.ignoreCount_ = 0;
268 this.break_points_ = []; 273 this.break_points_ = [];
269 } 274 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 ScriptBreakPoint.prototype.script_id = function() { 307 ScriptBreakPoint.prototype.script_id = function() {
303 return this.script_id_; 308 return this.script_id_;
304 }; 309 };
305 310
306 311
307 ScriptBreakPoint.prototype.script_name = function() { 312 ScriptBreakPoint.prototype.script_name = function() {
308 return this.script_name_; 313 return this.script_name_;
309 }; 314 };
310 315
311 316
317 ScriptBreakPoint.prototype.script_regexp_object = function() {
318 return this.script_regexp_object_;
319 };
320
321
312 ScriptBreakPoint.prototype.line = function() { 322 ScriptBreakPoint.prototype.line = function() {
313 return this.line_; 323 return this.line_;
314 }; 324 };
315 325
316 326
317 ScriptBreakPoint.prototype.column = function() { 327 ScriptBreakPoint.prototype.column = function() {
318 return this.column_; 328 return this.column_;
319 }; 329 };
320 330
321 331
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 this.break_points_[i].setIgnoreCount(ignoreCount); 387 this.break_points_[i].setIgnoreCount(ignoreCount);
378 } 388 }
379 }; 389 };
380 390
381 391
382 // Check whether a script matches this script break point. Currently this is 392 // Check whether a script matches this script break point. Currently this is
383 // only based on script name. 393 // only based on script name.
384 ScriptBreakPoint.prototype.matchesScript = function(script) { 394 ScriptBreakPoint.prototype.matchesScript = function(script) {
385 if (this.type_ == Debug.ScriptBreakPointType.ScriptId) { 395 if (this.type_ == Debug.ScriptBreakPointType.ScriptId) {
386 return this.script_id_ == script.id; 396 return this.script_id_ == script.id;
387 } else { // this.type_ == Debug.ScriptBreakPointType.ScriptName 397 } else {
388 return this.script_name_ == script.nameOrSourceURL() && 398 // We might want to account columns here as well.
389 script.line_offset <= this.line_ && 399 if (!(script.line_offset <= this.line_ &&
390 this.line_ < script.line_offset + script.lineCount(); 400 this.line_ < script.line_offset + script.lineCount())) {
401 return false;
402 }
403 if (this.type_ == Debug.ScriptBreakPointType.ScriptName) {
404 return this.script_name_ == script.nameOrSourceURL();
405 } else if (this.type_ == Debug.ScriptBreakPointType.ScriptRegExp) {
406 return this.script_regexp_object_.test(script.nameOrSourceURL());
407 } else {
408 throw new Error("Unexpected breakpoint type " + this.type_);
409 }
391 } 410 }
392 }; 411 };
393 412
394 413
395 // Set the script break point in a script. 414 // Set the script break point in a script.
396 ScriptBreakPoint.prototype.set = function (script) { 415 ScriptBreakPoint.prototype.set = function (script) {
397 var column = this.column(); 416 var column = this.column();
398 var line = this.line(); 417 var line = this.line();
399 // If the column is undefined the break is on the line. To help locate the 418 // If the column is undefined the break is on the line. To help locate the
400 // first piece of breakable code on the line try to find the column on the 419 // first piece of breakable code on the line try to find the column on the
(...skipping 23 matching lines...) Expand all
424 443
425 // Create a break point object and set the break point. 444 // Create a break point object and set the break point.
426 break_point = MakeBreakPoint(position, this); 445 break_point = MakeBreakPoint(position, this);
427 break_point.setIgnoreCount(this.ignoreCount()); 446 break_point.setIgnoreCount(this.ignoreCount());
428 var actual_position = %SetScriptBreakPoint(script, position, break_point); 447 var actual_position = %SetScriptBreakPoint(script, position, break_point);
429 if (IS_UNDEFINED(actual_position)) { 448 if (IS_UNDEFINED(actual_position)) {
430 actual_position = position; 449 actual_position = position;
431 } 450 }
432 var actual_location = script.locationFromPosition(actual_position, true); 451 var actual_location = script.locationFromPosition(actual_position, true);
433 break_point.actual_location = { line: actual_location.line, 452 break_point.actual_location = { line: actual_location.line,
434 column: actual_location.column }; 453 column: actual_location.column,
454 script_id: script.id };
435 this.break_points_.push(break_point); 455 this.break_points_.push(break_point);
436 return break_point; 456 return break_point;
437 }; 457 };
438 458
439 459
440 // Clear all the break points created from this script break point 460 // Clear all the break points created from this script break point
441 ScriptBreakPoint.prototype.clear = function () { 461 ScriptBreakPoint.prototype.clear = function () {
442 var remaining_break_points = []; 462 var remaining_break_points = [];
443 for (var i = 0; i < break_points.length; i++) { 463 for (var i = 0; i < break_points.length; i++) {
444 if (break_points[i].script_break_point() && 464 if (break_points[i].script_break_point() &&
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 location.line, location.column, 657 location.line, location.column,
638 opt_condition); 658 opt_condition);
639 } else { 659 } else {
640 // Set a break point directly on the function. 660 // Set a break point directly on the function.
641 var break_point = MakeBreakPoint(source_position); 661 var break_point = MakeBreakPoint(source_position);
642 var actual_position = 662 var actual_position =
643 %SetFunctionBreakPoint(func, source_position, break_point); 663 %SetFunctionBreakPoint(func, source_position, break_point);
644 actual_position += this.sourcePosition(func); 664 actual_position += this.sourcePosition(func);
645 var actual_location = script.locationFromPosition(actual_position, true); 665 var actual_location = script.locationFromPosition(actual_position, true);
646 break_point.actual_location = { line: actual_location.line, 666 break_point.actual_location = { line: actual_location.line,
647 column: actual_location.column }; 667 column: actual_location.column,
668 script_id: script.id };
648 break_point.setCondition(opt_condition); 669 break_point.setCondition(opt_condition);
649 return break_point.number(); 670 return break_point.number();
650 } 671 }
651 }; 672 };
652 673
653 674
654 Debug.setBreakPointByScriptIdAndPosition = function(script_id, position, 675 Debug.setBreakPointByScriptIdAndPosition = function(script_id, position,
655 condition, enabled) 676 condition, enabled)
656 { 677 {
657 break_point = MakeBreakPoint(position); 678 break_point = MakeBreakPoint(position);
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
792 813
793 Debug.setScriptBreakPointByName = function(script_name, 814 Debug.setScriptBreakPointByName = function(script_name,
794 opt_line, opt_column, 815 opt_line, opt_column,
795 opt_condition, opt_groupId) { 816 opt_condition, opt_groupId) {
796 return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptName, 817 return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptName,
797 script_name, opt_line, opt_column, 818 script_name, opt_line, opt_column,
798 opt_condition, opt_groupId); 819 opt_condition, opt_groupId);
799 } 820 }
800 821
801 822
823 Debug.setScriptBreakPointByRegExp = function(script_regexp,
824 opt_line, opt_column,
825 opt_condition, opt_groupId) {
826 return this.setScriptBreakPoint(Debug.ScriptBreakPointType.ScriptRegExp,
827 script_regexp, opt_line, opt_column,
828 opt_condition, opt_groupId);
829 }
830
831
802 Debug.enableScriptBreakPoint = function(break_point_number) { 832 Debug.enableScriptBreakPoint = function(break_point_number) {
803 var script_break_point = this.findScriptBreakPoint(break_point_number, false); 833 var script_break_point = this.findScriptBreakPoint(break_point_number, false);
804 script_break_point.enable(); 834 script_break_point.enable();
805 }; 835 };
806 836
807 837
808 Debug.disableScriptBreakPoint = function(break_point_number) { 838 Debug.disableScriptBreakPoint = function(break_point_number) {
809 var script_break_point = this.findScriptBreakPoint(break_point_number, false); 839 var script_break_point = this.findScriptBreakPoint(break_point_number, false);
810 script_break_point.disable(); 840 script_break_point.disable();
811 }; 841 };
(...skipping 730 matching lines...) Expand 10 before | Expand all | Expand 10 after
1542 true : request.arguments.enabled; 1572 true : request.arguments.enabled;
1543 var condition = request.arguments.condition; 1573 var condition = request.arguments.condition;
1544 var ignoreCount = request.arguments.ignoreCount; 1574 var ignoreCount = request.arguments.ignoreCount;
1545 var groupId = request.arguments.groupId; 1575 var groupId = request.arguments.groupId;
1546 1576
1547 // Check for legal arguments. 1577 // Check for legal arguments.
1548 if (!type || IS_UNDEFINED(target)) { 1578 if (!type || IS_UNDEFINED(target)) {
1549 response.failed('Missing argument "type" or "target"'); 1579 response.failed('Missing argument "type" or "target"');
1550 return; 1580 return;
1551 } 1581 }
1552 if (type != 'function' && type != 'handle' && 1582
1553 type != 'script' && type != 'scriptId') {
1554 response.failed('Illegal type "' + type + '"');
1555 return;
1556 }
1557
1558 // Either function or script break point. 1583 // Either function or script break point.
1559 var break_point_number; 1584 var break_point_number;
1560 if (type == 'function') { 1585 if (type == 'function') {
1561 // Handle function break point. 1586 // Handle function break point.
1562 if (!IS_STRING(target)) { 1587 if (!IS_STRING(target)) {
1563 response.failed('Argument "target" is not a string value'); 1588 response.failed('Argument "target" is not a string value');
1564 return; 1589 return;
1565 } 1590 }
1566 var f; 1591 var f;
1567 try { 1592 try {
(...skipping 23 matching lines...) Expand all
1591 } 1616 }
1592 1617
1593 // Set function break point. 1618 // Set function break point.
1594 break_point_number = Debug.setBreakPoint(mirror.value(), 1619 break_point_number = Debug.setBreakPoint(mirror.value(),
1595 line, column, condition); 1620 line, column, condition);
1596 } else if (type == 'script') { 1621 } else if (type == 'script') {
1597 // set script break point. 1622 // set script break point.
1598 break_point_number = 1623 break_point_number =
1599 Debug.setScriptBreakPointByName(target, line, column, condition, 1624 Debug.setScriptBreakPointByName(target, line, column, condition,
1600 groupId); 1625 groupId);
1601 } else { // type == 'scriptId. 1626 } else if (type == 'scriptId') {
1602 break_point_number = 1627 break_point_number =
1603 Debug.setScriptBreakPointById(target, line, column, condition, groupId); 1628 Debug.setScriptBreakPointById(target, line, column, condition, groupId);
1629 } else if (type == 'scriptRegExp') {
1630 break_point_number =
1631 Debug.setScriptBreakPointByRegExp(target, line, column, condition,
1632 groupId);
1633 } else {
1634 response.failed('Illegal type "' + type + '"');
1635 return;
1604 } 1636 }
1605 1637
1606 // Set additional break point properties. 1638 // Set additional break point properties.
1607 var break_point = Debug.findBreakPoint(break_point_number); 1639 var break_point = Debug.findBreakPoint(break_point_number);
1608 if (ignoreCount) { 1640 if (ignoreCount) {
1609 Debug.changeBreakPointIgnoreCount(break_point_number, ignoreCount); 1641 Debug.changeBreakPointIgnoreCount(break_point_number, ignoreCount);
1610 } 1642 }
1611 if (!enabled) { 1643 if (!enabled) {
1612 Debug.disableBreakPoint(break_point_number); 1644 Debug.disableBreakPoint(break_point_number);
1613 } 1645 }
1614 1646
1615 // Add the break point number to the response. 1647 // Add the break point number to the response.
1616 response.body = { type: type, 1648 response.body = { type: type,
1617 breakpoint: break_point_number } 1649 breakpoint: break_point_number }
1618 1650
1619 // Add break point information to the response. 1651 // Add break point information to the response.
1620 if (break_point instanceof ScriptBreakPoint) { 1652 if (break_point instanceof ScriptBreakPoint) {
1621 if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { 1653 if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) {
1622 response.body.type = 'scriptId'; 1654 response.body.type = 'scriptId';
1623 response.body.script_id = break_point.script_id(); 1655 response.body.script_id = break_point.script_id();
1624 } else { 1656 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) {
1625 response.body.type = 'scriptName'; 1657 response.body.type = 'scriptName';
1626 response.body.script_name = break_point.script_name(); 1658 response.body.script_name = break_point.script_name();
1659 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) {
1660 response.body.type = 'scriptRegExp';
1661 response.body.script_regexp = break_point.script_regexp_object().source;
1662 } else {
1663 throw new Error("Internal error: Unexpected breakpoint type: " + break_poi nt.type());
1627 } 1664 }
1628 response.body.line = break_point.line(); 1665 response.body.line = break_point.line();
1629 response.body.column = break_point.column(); 1666 response.body.column = break_point.column();
1630 response.body.actual_locations = break_point.actual_locations(); 1667 response.body.actual_locations = break_point.actual_locations();
1631 } else { 1668 } else {
1632 response.body.type = 'function'; 1669 response.body.type = 'function';
1633 response.body.actual_locations = [break_point.actual_location]; 1670 response.body.actual_locations = [break_point.actual_location];
1634 } 1671 }
1635 }; 1672 };
1636 1673
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1746 hit_count: break_point.hit_count(), 1783 hit_count: break_point.hit_count(),
1747 active: break_point.active(), 1784 active: break_point.active(),
1748 condition: break_point.condition(), 1785 condition: break_point.condition(),
1749 ignoreCount: break_point.ignoreCount(), 1786 ignoreCount: break_point.ignoreCount(),
1750 actual_locations: break_point.actual_locations() 1787 actual_locations: break_point.actual_locations()
1751 } 1788 }
1752 1789
1753 if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) { 1790 if (break_point.type() == Debug.ScriptBreakPointType.ScriptId) {
1754 description.type = 'scriptId'; 1791 description.type = 'scriptId';
1755 description.script_id = break_point.script_id(); 1792 description.script_id = break_point.script_id();
1756 } else { 1793 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptName) {
1757 description.type = 'scriptName'; 1794 description.type = 'scriptName';
1758 description.script_name = break_point.script_name(); 1795 description.script_name = break_point.script_name();
1796 } else if (break_point.type() == Debug.ScriptBreakPointType.ScriptRegExp) {
1797 description.type = 'scriptRegExp';
1798 description.script_regexp = break_point.script_regexp_object().source;
1799 } else {
1800 throw new Error("Internal error: Unexpected breakpoint type: " + break_poi nt.type());
1759 } 1801 }
1760 array.push(description); 1802 array.push(description);
1761 } 1803 }
1762 1804
1763 response.body = { 1805 response.body = {
1764 breakpoints: array, 1806 breakpoints: array,
1765 breakOnExceptions: Debug.isBreakOnException(), 1807 breakOnExceptions: Debug.isBreakOnException(),
1766 breakOnUncaughtExceptions: Debug.isBreakOnUncaughtException() 1808 breakOnUncaughtExceptions: Debug.isBreakOnUncaughtException()
1767 } 1809 }
1768 } 1810 }
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after
2560 case 'string': 2602 case 'string':
2561 case 'number': 2603 case 'number':
2562 json = value; 2604 json = value;
2563 break 2605 break
2564 2606
2565 default: 2607 default:
2566 json = null; 2608 json = null;
2567 } 2609 }
2568 return json; 2610 return json;
2569 } 2611 }
OLDNEW
« no previous file with comments | « src/d8.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698