OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 1582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1593 CHECK_EQ(1, break_point_hit_count); | 1593 CHECK_EQ(1, break_point_hit_count); |
1594 | 1594 |
1595 EnableScriptBreakPointFromJS(isolate, sbp); | 1595 EnableScriptBreakPointFromJS(isolate, sbp); |
1596 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | 1596 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); |
1597 CHECK_EQ(2, break_point_hit_count); | 1597 CHECK_EQ(2, break_point_hit_count); |
1598 | 1598 |
1599 DisableScriptBreakPointFromJS(isolate, sbp); | 1599 DisableScriptBreakPointFromJS(isolate, sbp); |
1600 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | 1600 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); |
1601 CHECK_EQ(2, break_point_hit_count); | 1601 CHECK_EQ(2, break_point_hit_count); |
1602 | 1602 |
1603 // Reload the script and get f again checking that the disabling survives. | |
1604 v8::Script::Compile(context, script, &origin) | |
1605 .ToLocalChecked() | |
1606 ->Run(context) | |
1607 .ToLocalChecked(); | |
1608 f = v8::Local<v8::Function>::Cast( | |
1609 env->Global()->Get(context, v8_str(isolate, "f")).ToLocalChecked()); | |
1610 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | |
1611 CHECK_EQ(2, break_point_hit_count); | |
1612 | |
1613 EnableScriptBreakPointFromJS(isolate, sbp); | |
1614 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | |
1615 CHECK_EQ(3, break_point_hit_count); | |
1616 | |
1617 v8::Debug::SetDebugEventListener(isolate, nullptr); | 1603 v8::Debug::SetDebugEventListener(isolate, nullptr); |
1618 CheckDebuggerUnloaded(isolate); | 1604 CheckDebuggerUnloaded(isolate); |
1619 } | 1605 } |
1620 | 1606 |
1621 | 1607 |
1622 // Test conditional script break points. | 1608 // Test conditional script break points. |
1623 TEST(ConditionalScriptBreakPoint) { | 1609 TEST(ConditionalScriptBreakPoint) { |
1624 break_point_hit_count = 0; | 1610 break_point_hit_count = 0; |
1625 DebugLocalContext env; | 1611 DebugLocalContext env; |
1626 v8::HandleScope scope(env->GetIsolate()); | 1612 v8::HandleScope scope(env->GetIsolate()); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1664 f->Call(env.context(), env->Global(), 0, NULL).ToLocalChecked(); | 1650 f->Call(env.context(), env->Global(), 0, NULL).ToLocalChecked(); |
1665 CHECK_EQ(1, break_point_hit_count); | 1651 CHECK_EQ(1, break_point_hit_count); |
1666 | 1652 |
1667 ChangeScriptBreakPointConditionFromJS(env->GetIsolate(), sbp1, "x % 2 == 0"); | 1653 ChangeScriptBreakPointConditionFromJS(env->GetIsolate(), sbp1, "x % 2 == 0"); |
1668 break_point_hit_count = 0; | 1654 break_point_hit_count = 0; |
1669 for (int i = 0; i < 10; i++) { | 1655 for (int i = 0; i < 10; i++) { |
1670 f->Call(env.context(), env->Global(), 0, NULL).ToLocalChecked(); | 1656 f->Call(env.context(), env->Global(), 0, NULL).ToLocalChecked(); |
1671 } | 1657 } |
1672 CHECK_EQ(5, break_point_hit_count); | 1658 CHECK_EQ(5, break_point_hit_count); |
1673 | 1659 |
1674 // Reload the script and get f again checking that the condition survives. | |
1675 v8::Script::Compile(context, script, &origin) | |
1676 .ToLocalChecked() | |
1677 ->Run(context) | |
1678 .ToLocalChecked(); | |
1679 f = v8::Local<v8::Function>::Cast( | |
1680 env->Global() | |
1681 ->Get(context, v8_str(env->GetIsolate(), "f")) | |
1682 .ToLocalChecked()); | |
1683 | |
1684 break_point_hit_count = 0; | |
1685 for (int i = 0; i < 10; i++) { | |
1686 f->Call(env.context(), env->Global(), 0, NULL).ToLocalChecked(); | |
1687 } | |
1688 CHECK_EQ(5, break_point_hit_count); | |
1689 | |
1690 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); | 1660 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); |
1691 CheckDebuggerUnloaded(env->GetIsolate()); | 1661 CheckDebuggerUnloaded(env->GetIsolate()); |
1692 } | 1662 } |
1693 | |
1694 | |
1695 // Test that script break points survive when a script is reloaded. | |
1696 TEST(ScriptBreakPointReload) { | |
1697 break_point_hit_count = 0; | |
1698 DebugLocalContext env; | |
1699 v8::HandleScope scope(env->GetIsolate()); | |
1700 env.ExposeDebug(); | |
1701 | |
1702 v8::Debug::SetDebugEventListener(env->GetIsolate(), | |
1703 DebugEventBreakPointHitCount); | |
1704 | |
1705 v8::Local<v8::Context> context = env.context(); | |
1706 v8::Local<v8::Function> f; | |
1707 v8::Local<v8::String> script = v8_str(env->GetIsolate(), | |
1708 "function f() {\n" | |
1709 " function h() {\n" | |
1710 " a = 0; // line 2\n" | |
1711 " }\n" | |
1712 " b = 1; // line 4\n" | |
1713 " return h();\n" | |
1714 "}"); | |
1715 | |
1716 v8::ScriptOrigin origin_1 = v8::ScriptOrigin(v8_str(env->GetIsolate(), "1")); | |
1717 v8::ScriptOrigin origin_2 = v8::ScriptOrigin(v8_str(env->GetIsolate(), "2")); | |
1718 | |
1719 // Set a script break point before the script is loaded. | |
1720 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "1", 2, 0); | |
1721 | |
1722 // Compile the script and get the function. | |
1723 v8::Script::Compile(context, script, &origin_1) | |
1724 .ToLocalChecked() | |
1725 ->Run(context) | |
1726 .ToLocalChecked(); | |
1727 f = v8::Local<v8::Function>::Cast( | |
1728 env->Global() | |
1729 ->Get(context, v8_str(env->GetIsolate(), "f")) | |
1730 .ToLocalChecked()); | |
1731 | |
1732 // Call f and check that the script break point is active. | |
1733 break_point_hit_count = 0; | |
1734 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | |
1735 CHECK_EQ(1, break_point_hit_count); | |
1736 | |
1737 // Compile the script again with a different script data and get the | |
1738 // function. | |
1739 v8::Script::Compile(context, script, &origin_2) | |
1740 .ToLocalChecked() | |
1741 ->Run(context) | |
1742 .ToLocalChecked(); | |
1743 f = v8::Local<v8::Function>::Cast( | |
1744 env->Global() | |
1745 ->Get(context, v8_str(env->GetIsolate(), "f")) | |
1746 .ToLocalChecked()); | |
1747 | |
1748 // Call f and check that no break points are set. | |
1749 break_point_hit_count = 0; | |
1750 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | |
1751 CHECK_EQ(0, break_point_hit_count); | |
1752 | |
1753 // Compile the script again and get the function. | |
1754 v8::Script::Compile(context, script, &origin_1) | |
1755 .ToLocalChecked() | |
1756 ->Run(context) | |
1757 .ToLocalChecked(); | |
1758 f = v8::Local<v8::Function>::Cast( | |
1759 env->Global() | |
1760 ->Get(context, v8_str(env->GetIsolate(), "f")) | |
1761 .ToLocalChecked()); | |
1762 | |
1763 // Call f and check that the script break point is active. | |
1764 break_point_hit_count = 0; | |
1765 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | |
1766 CHECK_EQ(1, break_point_hit_count); | |
1767 | |
1768 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); | |
1769 CheckDebuggerUnloaded(env->GetIsolate()); | |
1770 } | |
1771 | 1663 |
1772 | 1664 |
1773 // Test when several scripts has the same script data | 1665 // Test when several scripts has the same script data |
1774 TEST(ScriptBreakPointMultiple) { | 1666 TEST(ScriptBreakPointMultiple) { |
1775 break_point_hit_count = 0; | 1667 break_point_hit_count = 0; |
1776 DebugLocalContext env; | 1668 DebugLocalContext env; |
1777 v8::HandleScope scope(env->GetIsolate()); | 1669 v8::HandleScope scope(env->GetIsolate()); |
1778 env.ExposeDebug(); | 1670 env.ExposeDebug(); |
1779 | 1671 |
1780 v8::Debug::SetDebugEventListener(env->GetIsolate(), | 1672 v8::Debug::SetDebugEventListener(env->GetIsolate(), |
1781 DebugEventBreakPointHitCount); | 1673 DebugEventBreakPointHitCount); |
1782 | 1674 |
1783 v8::Local<v8::Context> context = env.context(); | 1675 v8::Local<v8::Context> context = env.context(); |
1784 v8::Local<v8::Function> f; | 1676 v8::Local<v8::Function> f; |
1785 v8::Local<v8::String> script_f = v8_str(env->GetIsolate(), | 1677 v8::Local<v8::String> script_f = v8_str(env->GetIsolate(), |
1786 "function f() {\n" | 1678 "function f() {\n" |
1787 " a = 0; // line 1\n" | 1679 " a = 0; // line 1\n" |
1788 "}"); | 1680 "}"); |
1789 | 1681 |
1790 v8::Local<v8::Function> g; | 1682 v8::Local<v8::Function> g; |
1791 v8::Local<v8::String> script_g = v8_str(env->GetIsolate(), | 1683 v8::Local<v8::String> script_g = v8_str(env->GetIsolate(), |
1792 "function g() {\n" | 1684 "function g() {\n" |
1793 " b = 0; // line 1\n" | 1685 " b = 0; // line 1\n" |
1794 "}"); | 1686 "}"); |
1795 | 1687 |
1796 v8::ScriptOrigin origin = v8::ScriptOrigin(v8_str(env->GetIsolate(), "test")); | 1688 v8::ScriptOrigin origin = v8::ScriptOrigin(v8_str(env->GetIsolate(), "test")); |
1797 | 1689 |
1798 // Set a script break point before the scripts are loaded. | |
1799 int sbp = SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test", 1, 0); | |
1800 | |
1801 // Compile the scripts with same script data and get the functions. | 1690 // Compile the scripts with same script data and get the functions. |
1802 v8::Script::Compile(context, script_f, &origin) | 1691 v8::Script::Compile(context, script_f, &origin) |
1803 .ToLocalChecked() | 1692 .ToLocalChecked() |
1804 ->Run(context) | 1693 ->Run(context) |
1805 .ToLocalChecked(); | 1694 .ToLocalChecked(); |
1806 f = v8::Local<v8::Function>::Cast( | 1695 f = v8::Local<v8::Function>::Cast( |
1807 env->Global() | 1696 env->Global() |
1808 ->Get(context, v8_str(env->GetIsolate(), "f")) | 1697 ->Get(context, v8_str(env->GetIsolate(), "f")) |
1809 .ToLocalChecked()); | 1698 .ToLocalChecked()); |
1810 v8::Script::Compile(context, script_g, &origin) | 1699 v8::Script::Compile(context, script_g, &origin) |
1811 .ToLocalChecked() | 1700 .ToLocalChecked() |
1812 ->Run(context) | 1701 ->Run(context) |
1813 .ToLocalChecked(); | 1702 .ToLocalChecked(); |
1814 g = v8::Local<v8::Function>::Cast( | 1703 g = v8::Local<v8::Function>::Cast( |
1815 env->Global() | 1704 env->Global() |
1816 ->Get(context, v8_str(env->GetIsolate(), "g")) | 1705 ->Get(context, v8_str(env->GetIsolate(), "g")) |
1817 .ToLocalChecked()); | 1706 .ToLocalChecked()); |
1818 | 1707 |
| 1708 int sbp = SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test", 1, 0); |
| 1709 |
1819 // Call f and g and check that the script break point is active. | 1710 // Call f and g and check that the script break point is active. |
1820 break_point_hit_count = 0; | 1711 break_point_hit_count = 0; |
1821 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | 1712 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); |
1822 CHECK_EQ(1, break_point_hit_count); | 1713 CHECK_EQ(1, break_point_hit_count); |
1823 g->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | 1714 g->Call(context, env->Global(), 0, NULL).ToLocalChecked(); |
1824 CHECK_EQ(2, break_point_hit_count); | 1715 CHECK_EQ(2, break_point_hit_count); |
1825 | 1716 |
1826 // Clear the script break point. | 1717 // Clear the script break point. |
1827 ClearBreakPointFromJS(env->GetIsolate(), sbp); | 1718 ClearBreakPointFromJS(env->GetIsolate(), sbp); |
1828 | 1719 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1864 v8_str(env->GetIsolate(), | 1755 v8_str(env->GetIsolate(), |
1865 "function f() {\n" | 1756 "function f() {\n" |
1866 " a = 0; // line 8 as this script has line offset 7\n" | 1757 " a = 0; // line 8 as this script has line offset 7\n" |
1867 " b = 0; // line 9 as this script has line offset 7\n" | 1758 " b = 0; // line 9 as this script has line offset 7\n" |
1868 "}"); | 1759 "}"); |
1869 | 1760 |
1870 // Create script origin both name and line offset. | 1761 // Create script origin both name and line offset. |
1871 v8::ScriptOrigin origin(v8_str(env->GetIsolate(), "test.html"), | 1762 v8::ScriptOrigin origin(v8_str(env->GetIsolate(), "test.html"), |
1872 v8::Integer::New(env->GetIsolate(), 7)); | 1763 v8::Integer::New(env->GetIsolate(), 7)); |
1873 | 1764 |
1874 // Set two script break points before the script is loaded. | |
1875 int sbp1 = | |
1876 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 8, 0); | |
1877 int sbp2 = | |
1878 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 9, 0); | |
1879 | |
1880 // Compile the script and get the function. | 1765 // Compile the script and get the function. |
1881 v8::Script::Compile(context, script, &origin) | 1766 v8::Script::Compile(context, script, &origin) |
1882 .ToLocalChecked() | 1767 .ToLocalChecked() |
1883 ->Run(context) | 1768 ->Run(context) |
1884 .ToLocalChecked(); | 1769 .ToLocalChecked(); |
| 1770 |
| 1771 int sbp1 = |
| 1772 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 8, 0); |
| 1773 int sbp2 = |
| 1774 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 9, 0); |
| 1775 |
1885 f = v8::Local<v8::Function>::Cast( | 1776 f = v8::Local<v8::Function>::Cast( |
1886 env->Global() | 1777 env->Global() |
1887 ->Get(context, v8_str(env->GetIsolate(), "f")) | 1778 ->Get(context, v8_str(env->GetIsolate(), "f")) |
1888 .ToLocalChecked()); | 1779 .ToLocalChecked()); |
1889 | 1780 |
1890 // Call f and check that the script break point is active. | 1781 // Call f and check that the script break point is active. |
1891 break_point_hit_count = 0; | 1782 break_point_hit_count = 0; |
1892 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | 1783 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); |
1893 CHECK_EQ(2, break_point_hit_count); | 1784 CHECK_EQ(2, break_point_hit_count); |
1894 | 1785 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1940 " a = 2; // line 4\n" | 1831 " a = 2; // line 4\n" |
1941 " /* xx */ function g() { // line 5\n" | 1832 " /* xx */ function g() { // line 5\n" |
1942 " function h() { // line 6\n" | 1833 " function h() { // line 6\n" |
1943 " a = 3; // line 7\n" | 1834 " a = 3; // line 7\n" |
1944 " }\n" | 1835 " }\n" |
1945 " h(); // line 9\n" | 1836 " h(); // line 9\n" |
1946 " a = 4; // line 10\n" | 1837 " a = 4; // line 10\n" |
1947 " }\n" | 1838 " }\n" |
1948 " a=5; // line 12"); | 1839 " a=5; // line 12"); |
1949 | 1840 |
1950 // Set a couple script break point before the script is loaded. | 1841 // Compile the script and get the function. |
| 1842 break_point_hit_count = 0; |
| 1843 v8::ScriptOrigin origin(v8_str(env->GetIsolate(), "test.html"), |
| 1844 v8::Integer::New(env->GetIsolate(), 0)); |
| 1845 v8::Local<v8::Script> compiled = |
| 1846 v8::Script::Compile(context, script, &origin).ToLocalChecked(); |
| 1847 |
1951 int sbp1 = | 1848 int sbp1 = |
1952 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 0, -1); | 1849 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 0, -1); |
1953 int sbp2 = | 1850 int sbp2 = |
1954 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 1, -1); | 1851 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 1, -1); |
1955 int sbp3 = | 1852 int sbp3 = |
1956 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 5, -1); | 1853 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 5, -1); |
1957 | 1854 |
1958 // Compile the script and get the function. | 1855 compiled->Run(context).ToLocalChecked(); |
1959 break_point_hit_count = 0; | 1856 |
1960 v8::ScriptOrigin origin(v8_str(env->GetIsolate(), "test.html"), | |
1961 v8::Integer::New(env->GetIsolate(), 0)); | |
1962 v8::Script::Compile(context, script, &origin) | |
1963 .ToLocalChecked() | |
1964 ->Run(context) | |
1965 .ToLocalChecked(); | |
1966 f = v8::Local<v8::Function>::Cast( | 1857 f = v8::Local<v8::Function>::Cast( |
1967 env->Global() | 1858 env->Global() |
1968 ->Get(context, v8_str(env->GetIsolate(), "f")) | 1859 ->Get(context, v8_str(env->GetIsolate(), "f")) |
1969 .ToLocalChecked()); | 1860 .ToLocalChecked()); |
1970 g = v8::Local<v8::Function>::Cast( | 1861 g = v8::Local<v8::Function>::Cast( |
1971 env->Global() | 1862 env->Global() |
1972 ->Get(context, v8_str(env->GetIsolate(), "g")) | 1863 ->Get(context, v8_str(env->GetIsolate(), "g")) |
1973 .ToLocalChecked()); | 1864 .ToLocalChecked()); |
1974 | 1865 |
1975 // Check that a break point was hit when the script was run. | 1866 // Check that a break point was hit when the script was run. |
(...skipping 25 matching lines...) Expand all Loading... |
2001 // more. | 1892 // more. |
2002 ClearBreakPointFromJS(env->GetIsolate(), sbp2); | 1893 ClearBreakPointFromJS(env->GetIsolate(), sbp2); |
2003 ClearBreakPointFromJS(env->GetIsolate(), sbp4); | 1894 ClearBreakPointFromJS(env->GetIsolate(), sbp4); |
2004 int sbp5 = | 1895 int sbp5 = |
2005 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 4, -1); | 1896 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 4, -1); |
2006 break_point_hit_count = 0; | 1897 break_point_hit_count = 0; |
2007 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | 1898 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); |
2008 g->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | 1899 g->Call(context, env->Global(), 0, NULL).ToLocalChecked(); |
2009 CHECK_EQ(0, break_point_hit_count); | 1900 CHECK_EQ(0, break_point_hit_count); |
2010 | 1901 |
2011 // Reload the script which should hit two break points. | |
2012 break_point_hit_count = 0; | |
2013 v8::Script::Compile(context, script, &origin) | |
2014 .ToLocalChecked() | |
2015 ->Run(context) | |
2016 .ToLocalChecked(); | |
2017 CHECK_EQ(2, break_point_hit_count); | |
2018 CHECK_EQ(0, StrLength(last_function_hit)); | |
2019 | |
2020 // Set a break point in the code after the last function decleration. | 1902 // Set a break point in the code after the last function decleration. |
2021 int sbp6 = | 1903 int sbp6 = |
2022 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 12, -1); | 1904 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 12, -1); |
2023 | 1905 |
2024 // Reload the script which should hit three break points. | 1906 // Reloading the script should not hit any break points. |
2025 break_point_hit_count = 0; | |
2026 v8::Script::Compile(context, script, &origin) | |
2027 .ToLocalChecked() | |
2028 ->Run(context) | |
2029 .ToLocalChecked(); | |
2030 CHECK_EQ(3, break_point_hit_count); | |
2031 CHECK_EQ(0, StrLength(last_function_hit)); | |
2032 | |
2033 // Clear the last break points, and reload the script which should not hit any | |
2034 // break points. | |
2035 ClearBreakPointFromJS(env->GetIsolate(), sbp1); | |
2036 ClearBreakPointFromJS(env->GetIsolate(), sbp5); | |
2037 ClearBreakPointFromJS(env->GetIsolate(), sbp6); | |
2038 break_point_hit_count = 0; | 1907 break_point_hit_count = 0; |
2039 v8::Script::Compile(context, script, &origin) | 1908 v8::Script::Compile(context, script, &origin) |
2040 .ToLocalChecked() | 1909 .ToLocalChecked() |
2041 ->Run(context) | 1910 ->Run(context) |
2042 .ToLocalChecked(); | 1911 .ToLocalChecked(); |
2043 CHECK_EQ(0, break_point_hit_count); | 1912 CHECK_EQ(0, break_point_hit_count); |
2044 | 1913 |
| 1914 ClearBreakPointFromJS(env->GetIsolate(), sbp1); |
| 1915 ClearBreakPointFromJS(env->GetIsolate(), sbp5); |
| 1916 ClearBreakPointFromJS(env->GetIsolate(), sbp6); |
| 1917 |
2045 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); | 1918 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); |
2046 CheckDebuggerUnloaded(env->GetIsolate()); | 1919 CheckDebuggerUnloaded(env->GetIsolate()); |
2047 } | 1920 } |
2048 | 1921 |
2049 | 1922 |
2050 // Test top level script break points set on lines. | 1923 // Test top level script break points set on lines. |
2051 TEST(ScriptBreakPointLineTopLevel) { | 1924 TEST(ScriptBreakPointLineTopLevel) { |
2052 DebugLocalContext env; | 1925 DebugLocalContext env; |
2053 v8::HandleScope scope(env->GetIsolate()); | 1926 v8::HandleScope scope(env->GetIsolate()); |
2054 env.ExposeDebug(); | 1927 env.ExposeDebug(); |
(...skipping 20 matching lines...) Expand all Loading... |
2075 | 1948 |
2076 CcTest::CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask); | 1949 CcTest::CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask); |
2077 | 1950 |
2078 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 3, -1); | 1951 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 3, -1); |
2079 | 1952 |
2080 // Call f and check that there was no break points. | 1953 // Call f and check that there was no break points. |
2081 break_point_hit_count = 0; | 1954 break_point_hit_count = 0; |
2082 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); | 1955 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); |
2083 CHECK_EQ(0, break_point_hit_count); | 1956 CHECK_EQ(0, break_point_hit_count); |
2084 | 1957 |
2085 // Recompile and run script and check that break point was hit. | 1958 // Recompile and run script and check that break point was not reapplied. |
2086 break_point_hit_count = 0; | 1959 break_point_hit_count = 0; |
2087 CompileRunWithOrigin(script, "test.html"); | 1960 CompileRunWithOrigin(script, "test.html"); |
2088 CHECK_EQ(1, break_point_hit_count); | |
2089 | |
2090 // Call f and check that there are still no break points. | |
2091 break_point_hit_count = 0; | |
2092 f = v8::Local<v8::Function>::Cast( | |
2093 env->Global() | |
2094 ->Get(context, v8_str(env->GetIsolate(), "f")) | |
2095 .ToLocalChecked()); | |
2096 CHECK_EQ(0, break_point_hit_count); | 1961 CHECK_EQ(0, break_point_hit_count); |
2097 | 1962 |
2098 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); | 1963 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); |
2099 CheckDebuggerUnloaded(env->GetIsolate()); | 1964 CheckDebuggerUnloaded(env->GetIsolate()); |
2100 } | 1965 } |
2101 | 1966 |
2102 | 1967 |
2103 // Test that it is possible to add and remove break points in a top level | 1968 // Test that it is possible to add and remove break points in a top level |
2104 // function which has no references but has not been collected yet. | 1969 // function which has no references but has not been collected yet. |
2105 TEST(ScriptBreakPointTopLevelCrash) { | 1970 TEST(ScriptBreakPointTopLevelCrash) { |
2106 DebugLocalContext env; | 1971 DebugLocalContext env; |
2107 v8::HandleScope scope(env->GetIsolate()); | 1972 v8::HandleScope scope(env->GetIsolate()); |
2108 env.ExposeDebug(); | 1973 env.ExposeDebug(); |
2109 | 1974 |
2110 v8::Debug::SetDebugEventListener(env->GetIsolate(), | 1975 v8::Debug::SetDebugEventListener(env->GetIsolate(), |
2111 DebugEventBreakPointHitCount); | 1976 DebugEventBreakPointHitCount); |
2112 | 1977 |
2113 v8::Local<v8::String> script_source = v8_str(env->GetIsolate(), | 1978 CompileRunWithOrigin( |
2114 "function f() {\n" | 1979 "function f() {\n" |
2115 " return 0;\n" | 1980 " return 0;\n" |
2116 "}\n" | 1981 "}\n", |
2117 "f()"); | 1982 "test.html"); |
| 1983 int sbp1 = |
| 1984 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 1, -1); |
| 1985 break_point_hit_count = 0; |
2118 | 1986 |
2119 int sbp1 = | 1987 CompileRun("f();"); |
2120 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 3, -1); | 1988 |
2121 { | 1989 CHECK_EQ(1, break_point_hit_count); |
2122 v8::HandleScope scope(env->GetIsolate()); | |
2123 break_point_hit_count = 0; | |
2124 CompileRunWithOrigin(script_source, "test.html"); | |
2125 CHECK_EQ(1, break_point_hit_count); | |
2126 } | |
2127 | 1990 |
2128 int sbp2 = | 1991 int sbp2 = |
2129 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 3, -1); | 1992 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 3, -1); |
2130 ClearBreakPointFromJS(env->GetIsolate(), sbp1); | 1993 ClearBreakPointFromJS(env->GetIsolate(), sbp1); |
2131 ClearBreakPointFromJS(env->GetIsolate(), sbp2); | 1994 ClearBreakPointFromJS(env->GetIsolate(), sbp2); |
2132 | 1995 |
2133 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); | 1996 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); |
2134 CheckDebuggerUnloaded(env->GetIsolate()); | 1997 CheckDebuggerUnloaded(env->GetIsolate()); |
2135 } | 1998 } |
2136 | 1999 |
(...skipping 1494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3631 env.ExposeDebug(); | 3494 env.ExposeDebug(); |
3632 | 3495 |
3633 // Register a debug event listener which counts. | 3496 // Register a debug event listener which counts. |
3634 v8::Debug::SetDebugEventListener(env->GetIsolate(), DebugEventCounter); | 3497 v8::Debug::SetDebugEventListener(env->GetIsolate(), DebugEventCounter); |
3635 | 3498 |
3636 v8::Local<v8::Context> context = env.context(); | 3499 v8::Local<v8::Context> context = env.context(); |
3637 // Create a script that returns a function. | 3500 // Create a script that returns a function. |
3638 const char* src = "(function (evt) {})"; | 3501 const char* src = "(function (evt) {})"; |
3639 const char* script_name = "StepInHandlerTest"; | 3502 const char* script_name = "StepInHandlerTest"; |
3640 | 3503 |
3641 // Set breakpoint in the script. | |
3642 SetScriptBreakPointByNameFromJS(env->GetIsolate(), script_name, 0, -1); | |
3643 break_point_hit_count = 0; | |
3644 | |
3645 v8::ScriptOrigin origin(v8_str(env->GetIsolate(), script_name), | 3504 v8::ScriptOrigin origin(v8_str(env->GetIsolate(), script_name), |
3646 v8::Integer::New(env->GetIsolate(), 0)); | 3505 v8::Integer::New(env->GetIsolate(), 0)); |
3647 v8::Local<v8::Script> script = | 3506 v8::Local<v8::Script> script = |
3648 v8::Script::Compile(context, v8_str(env->GetIsolate(), src), &origin) | 3507 v8::Script::Compile(context, v8_str(env->GetIsolate(), src), &origin) |
3649 .ToLocalChecked(); | 3508 .ToLocalChecked(); |
| 3509 |
| 3510 // Set breakpoint in the script. |
| 3511 SetScriptBreakPointByNameFromJS(env->GetIsolate(), script_name, 0, -1); |
| 3512 break_point_hit_count = 0; |
| 3513 |
3650 v8::Local<v8::Value> r = script->Run(context).ToLocalChecked(); | 3514 v8::Local<v8::Value> r = script->Run(context).ToLocalChecked(); |
3651 | 3515 |
3652 CHECK(r->IsFunction()); | 3516 CHECK(r->IsFunction()); |
3653 CHECK_EQ(1, break_point_hit_count); | 3517 CHECK_EQ(1, break_point_hit_count); |
3654 | 3518 |
3655 // Get rid of the debug event listener. | 3519 // Get rid of the debug event listener. |
3656 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); | 3520 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); |
3657 CheckDebuggerUnloaded(env->GetIsolate()); | 3521 CheckDebuggerUnloaded(env->GetIsolate()); |
3658 } | 3522 } |
3659 | 3523 |
(...skipping 3134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6794 "function foo() {\n" | 6658 "function foo() {\n" |
6795 " try { throw new Error(); } catch (e) {}\n" | 6659 " try { throw new Error(); } catch (e) {}\n" |
6796 "}\n" | 6660 "}\n" |
6797 "debugger;\n" | 6661 "debugger;\n" |
6798 "foo();\n" | 6662 "foo();\n" |
6799 "foo();\n"); | 6663 "foo();\n"); |
6800 | 6664 |
6801 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); | 6665 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); |
6802 CHECK_EQ(break_point_hit_count, 4); | 6666 CHECK_EQ(break_point_hit_count, 4); |
6803 } | 6667 } |
OLD | NEW |