JavaScript调试全攻略
立即解锁
发布时间: 2025-08-20 01:26:59 阅读量: 1 订阅数: 5 


JavaScript入门与实践指南
### JavaScript 调试全攻略
#### 1. 调试基础
在 JavaScript 开发中,错误难以避免。调试是解决代码问题的关键手段。传统上,由于缺乏合适的开发工具,JavaScript 被认为是一种难以编写和调试的语言。不过现在,开发者有了很多可用的工具,如 Internet Explorer、Firefox、Safari 和 Opera 等浏览器都提供了调试工具。
调试的通用概念如下:
- **断点(Breakpoints)**:让调试器在特定点暂停代码执行。可以在 JavaScript 代码的任何位置设置断点,当执行到该断点时,调试器会停止代码执行。
- **观察(Watches)**:指定在断点处要检查的变量。
- **调用栈(Call Stack)**:记录执行到断点时调用的函数和方法。
- **控制台(Console)**:在页面上下文中和断点范围内执行 JavaScript 命令,同时记录页面中发现的所有 JavaScript 错误。
- **单步执行(Stepping)**:一次执行一行代码,有三种方式:
- **Step Into**:执行下一行代码,如果是函数调用,则进入函数并停在函数的第一行。
- **Step Over**:执行下一行代码,如果是函数,会执行整个函数并停在函数外的第一行。
- **Step Out**:从被调用的函数返回调用函数,继续执行代码直到函数返回,然后在函数返回点停止。
#### 2. 创建调试页面
以下是一个包含故意错误的示例代码,将其保存为 `debug_timestable.htm`:
```html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Debug: Times Table</title>
<script type="text/javascript">
function writeTimesTable(timesTable)
{
var counter;
var writeString;
for (counter = 1; counter < 12; counter++)
{
writeString = counter + " * " + timesTable + " = ";
writeString = writeString + (timesTable * counter);
writeString = writeString + "<br />";
documents.write(writeString);
}
}
</script>
</head>
<body>
<script type="text/javascript">
writeTimesTable(2);
</script>
</body>
</html>
```
#### 3. 使用 Firebug 在 Firefox 中调试
Firebug 是 Firefox 的默认 JavaScript 调试器。它并非 Firefox 自带,需要手动安装。可以从以下网址下载最新版本:
- http://www.getfirebug.com
- http://www.joehewitt.com/software/firebug/
- https://addons.mozilla.org/en-US/firefox/addon/1843
安装步骤如下:
1. 打开 Firefox,访问上述任意一个网址。
2. 点击网页上的“Install”按钮,然后按照提示操作。
3. 安装完成后,重启 Firefox。
访问 Firebug 的方式有:
- 点击 Firefox 窗口右下角状态栏中的 Firebug 图标。
- 如果状态栏不可见,可以从 Firefox 的“Tools”菜单中选择“Firebug ➪ Open Firebug”。
打开 `debug_timestable.htm`,如果状态栏可见,会看到右下角有红色文本显示“1 Error”。点击该消息或通过“Tools”菜单打开 Firebug,它会打开到控制台。控制台列出 JavaScript 错误,并允许实时执行 JavaScript 代码。
JavaScript 调试器在“Script”选项卡中,由左右两个面板组成。左面板显示源代码,右面板有三个视图:
- **Breakpoints**:列出为当前页面代码创建的所有断点。
- **Watch**:列出断点处作用域内的变量及其值,也可以添加其他变量进行观察。
- **Stack**:显示调用栈。
左面板的源代码是只读的,如果需要修改,需要在文本编辑器中编辑文件。将第 16 行的 `documents` 改为 `document`,保存并重新加载网页,即可看到乘法表。
##### 3.1 设置断点
在 Firebug 中设置断点很简单,只需在源代码行号左侧的灰色区域( gutter)左键单击,断点会用红色圆圈表示。也可以在编写代码时使用 `debugger` 关键字设置断点。
例如,在修正后的 `debug_timestable.htm` 中,在第 14 行设置断点:
```javascript
writeString = writeString + (timesTable * counter);
```
重新加载页面,Firebug 会在断点处停止代码执行,当前行用浅黄色高亮显示,并在 gutter 中显示黄色箭头。
点击右面板的“Breakpoints”选项卡,可以看到断点列表。每个条目包含一个复选框用于启用/禁用断点、包含该断点的函数名、源文件的文件名和行号、断点的源代码文本以及一个删除按钮。
##### 3.2 观察变量
点击“Watch”选项卡,会显示当前行作用域内的变量及其值。可以添加自己的变量进行观察,点击“New watch expression...”,输入要观察的变量名,然后按回车键。添加的观察项有灰色背景,鼠标悬停时会显示红色删除按钮。
如果变量在作用域内,会显示其值;如果不在作用域内,会显示 `ReferenceError`。
##### 3.3 单步执行代码
代码单步执行由窗口右上角、源代码搜索框旁边的四个按钮控制:
| 按钮 | 快捷键 | 功能 |
| ---- | ---- | ---- |
| Continue | F8 | 继续执行代码,直到下一个断点或代码结束 |
| Step Into | F11 | 执行当前行代码并移动到下一条语句,如果当前行是函数,则进入函数的第一行 |
| Step Over | F10 | 执行当前行代码并移动到下一条语句,如果是函数,执行整个函数并停在函数外的第一行 |
| Step Out | 无 | 从被调用的函数返回调用函数 |
单步执行示例步骤如下:
1. 点击“Step Into”图标或按 F11,调试器执行当前高亮显示的代码行并移动到下一行。
2. 查看“Watch”选项卡中 `writeString` 的值,此时为“1 * 2 = 2”。
3. 再次点击“Step Into”两次,可以看到页面随着代码执行而更新。
如果进入的函数不是问题所在,想执行函数的剩余代码并从调用点继续单步执行,可以点击“Step Out”图标。如果知道某些函数没有问题,可以使用“Step Over”直接执行函数,而不是逐行执行。
修改 `debug_timestable.htm` 代码如下,保存为 `debug_timestable2.htm`:
```html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Debug: Times Table 2</title>
<script type="text/javascript">
function writeTimesTable(timesTable)
{
var counter;
var writeString;
for (counter = 1; counter < 12; counter++)
{
writeString = counter + " * " + timesTable + " = ";
writeString = writeString + (timesTable * counter);
```
0
0
复制全文
相关推荐










