- Objective:
- Breadcrumb:
# 概念阐释
在编程中遇到的错误是非常正常的,越有经验的程序员遇到的错误越多,说明代码写得越来越复杂。错误能够促进成长。

### 调试错误步骤 debugging
1. 利用堆栈错误跟踪(如果不显示错误着用`console.log()`)
- 定位:找到错误发生的行
- 找到错误类型
- 找到错误原因
2. 根据提醒找到bug
3. 调试bug
4. 重复123
# 实例
### 错误堆栈跟踪 error stack trace

#### 错误类型
- Syntax Error:检查代码中的标点符号是否都写对?
- ReferenceError:宣称的变量不存在,查看变量名是否写错?
- TypeError:用错错误类型的值,例如将数字的方法用在了字符串中。或变量const被重新赋值。
### 用`console.log()`找出不显示错误的错误
- 第一步:从头开始使用console.log()打印出所有的起始变量、现有值和参数。如果值与预期相符,则继续执行代码中下一段逻辑。如果不符,则已经找到了 bug,应跳至第三步。
- 第二步:如果值与预期相符,则继续执行代码中下一段逻辑。如果不符,则已经找到了 bug,应跳至第三步。
- 第三步:修复已识别的 bug 并再次运行代码。如果现在按预期工作,则完成了调试!如果没有,则继续使用第二步。
# 相关内容
### 寻找错误和调试的方法
**1. 查看报错信息**

- 第一行是错误原因
- 21:26 指错误发生在第21行26个字符处

- ⌃ 虽然指出了错误,但真正错的地方不是`)`而是`,` ,所以还是需要经验来判断
**2. 寻求网络帮助**
- 🤖️ 问GPT:最快得到解决方案,但答案需要确认和判断
- 🔍 网络搜索:比较低效
- 📃 [MDN Error 参考](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Errors): 可以对错误提示的关键词进行搜索
- ❓[Stack Overflow](https://stackoverflow.com/): 任何设计的程序代码都可以在这里搜索看看
- ❓❓向开发者社区Stack Overflow提交提问
# 问题
- [问题1](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-building-interactive-websites/tracks/fscp-22-javascript-syntax-part-ii-c8ddbace-1463-4797-ae12-503c7b0f9552/modules/wdcp-22-learn-javascript-syntax-errors-and-debugging-021f67dd-fa36-4e74-a9b7-470e46f8c913/lessons/debugging-code/exercises/error-stack-traces-ii):写出错误调试步骤
```
/home/ccuser/workspace/learn-javascript-debugging-code/script.js:5
if (numberSum > total;) {
^
SyntaxError: Unexpected token ;
```
- [问题2](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-building-interactive-websites/tracks/fscp-22-javascript-syntax-part-ii-c8ddbace-1463-4797-ae12-503c7b0f9552/modules/wdcp-22-learn-javascript-syntax-errors-and-debugging-021f67dd-fa36-4e74-a9b7-470e46f8c913/lessons/debugging-code/exercises/error-types):写出错误类型
```
myVariable++;
//错误类型:
const myString = 42;
myString.substring(0);
//错误类型:
const myRandomNumber; = Math.random();
//错误类型:
```
- [问题3](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-building-interactive-websites/tracks/fscp-22-javascript-syntax-part-ii-c8ddbace-1463-4797-ae12-503c7b0f9552/modules/wdcp-22-learn-javascript-syntax-errors-and-debugging-021f67dd-fa36-4e74-a9b7-470e46f8c913/lessons/debugging-code/exercises/console-log-debugging-i):**为什么在函数中console参数可以得到调用函数中的值?**
# 问题答案
- 问题1:找到文档位置和错误的行数,判断错误类型和错误原因
- 问题2:ReferenceError 没有宣称变量;TypeError方法用错,应该是数字方法; syntaxError标点有错误;
- **问题3回答:因为调用函数是全局值?**
# 参考资料
- [MDN Error 参考](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Errors): 可以对错误提示的关键词进行搜索
- [Stack Overflow](https://stackoverflow.com/)