使用断点调试代码

简单地说,断点调试是指自己在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。

在web开发中,打断点是经常使用的调试代码的方法,现在在这里简略的翻译一下官方对此功能的讲解,并插入一些自己的说明。

文章翻译自:https://developers.google.com...

何时使用何种类型的断点:

Line-of-code: 知道在DevTools代码里要打点的具体区域;

Conditional line-of-code: 知道在DevTools代码里要打点的具体区域且设置条件,只有为真才执行断点操作;

DOM: 在 body 中添加,检测节点或其子节点的增删和属性变化;

XHR: 在 xhr url 包含特定内容的时候打点;

Event listener: 在触发特定事件的时候打点;

Exception: 在抛出异常的时候打点;

Function: 在特定函数被调用的时候打点;

debugger: 在书写的代码里希望打点的时候手动打点;


断点方法

Line-of-code breakpoints

浏览器会执行解析操作到打点的那行代码之前(不包含那行代码)。

操作: f12 -> Sources Tab -> 双击打开需要打点的文件 -> 找到需要打点的那行代码 -> 在行数上单击,出现一个蓝色标记,打点完成。

在标记上再次单击,会删除当前断点。

在代码中输入 debugger 同样能在指定位置暂停,除了不是在 DevTools UI 里设置以外和 line-of-code breakpoints 是相等的。

console.log(‘a‘);

console.log(‘b‘);

debugger;  //在此暂停

console.log(‘c‘);


Conditional line-of-code breakpoints

在你希望有条件地打点的时候使用 conditional line-of-code 方法。

操作: f12 -> Sources Tab -> 双击打开需要打点的文件 -> 找到需要打点的那行代码 -> 右键行数,选择 Add conditional breakpoint -> 在出现的对话框中输入条件 -> 点击 enter,出现橙色标志,打点完成。


管理断点

可以在 BreakPoints 面板上统一管理所有的断点。

上面的图片显示页面共有两个断点,一个在 get-started.js 第15行,一个在第32行。

●  checkbox 选择启用禁用断点

●   在条目上右键,可以选择移除当前断点、停用当前断点、禁用所有断点、移除所有断点、移除其他断点。

      禁用所有断点相当于把所有 checkbox 的勾都去掉;

      停用当前断点会让浏览器忽略掉此断点,但是断点位置和图标仍然保留,以便再次激活使用;

      移除断点会直接去掉此断点;


DOM change breakpoints

在文档节点发生变化的时候暂停。

操作: f12 -> Elements Tab -> 点击希望监测的节点 -> 右击节点 -> 在出现的菜单上选择 Break on -> 按需要选择 Subtree modifications,Attribute modifications, Node removal。

dom 改变断点类型:

●    subtree modifications , 在当前节点的子节点发生增加、移除、内容改变、交换顺序的情况的时候生效。其他情况例如当前节点发生了变化,或者子节点的属性发生了变化都不会触发。

●    attributes modifications , 在当前节点的属性发生变化,例如增加属性、移除属性、属性值改变 的时候触发。

●    node removal, 在当前节点被移除的时候触发。


XHR breakpoints

在你希望监听特定的 xhr 请求的时候,使用 xhr breakpoints 。 指定特定的字符串,当有包含此字符串的 xhr url 出现时触发,DevTools 会在 xhr.send() 方法被调用的地方暂停。

xhr breakpoints 对 fetch 请求也有效。

对于一些被封装好了的 xhr 请求例如 JQuery 的 ajax 方法,浏览器无法定位到被调用的地方。

操作: f12 -> Source Tab -> XHR Breakpoints 面板 -> 点击 + 号 -> 在出现的对话框里输入指定的字符串,浏览器会在出现包含此字符串的 xhr 请求时暂停(无论字符串在 url 的哪个位置) -> enter , 完成断点。


Event listener breakpoints

监测事件,在事件发生后暂停,断点到事件绑定的位置。支持单独的事件例如 click , 也支持一整个类别的事件,例如所有的鼠标事件。

操作: f12 -> Source Tab -> 展开 Event Listener Breakpoints 面板,会列出所有能监听的事件 -> 全选或展开之后单独选事件,完成断点。

上图是在移动设备的手持装置方向事件(横竖屏转换)上打点。


Exception breakpoints

在你希望捕捉到报异常的代码的时候,使用 exception breakpoints。

操作: f12 -> Source Tab -> 点击 Pause on exceptions 暂停图标 -> 图标变成蓝色,表明启用了在未捕获到的异常出现的时候断点的功能。

可选操作: 勾选 Pause On Caught Exceptions , 能够在捕获到异常的情况下也断点。

try{

    throw ‘a exception‘;

}catch(e){

    console.log(e);

}

上面 try 里面的代码会遇到异常,但是后面的 catch 代码能够捕获该异常。如果是所有异常都中断(勾选了 Pause On Caught Exceptions),那么代码执行到会产生异常的 throw 语句时就会自动中断;而如果是仅遇到未捕获异常才中断,那么这里就不会中断。一般我们会更关心遇到未捕获异常的情况。


Function breakpoints

在你希望 debug 一个具体的函数时使用。功能与在此函数的第一行代码出打断点是一样的。

操作: 在代码里插入 debug(functionName) 或者在浏览器控制台调用。

代码里插入:

function sum(a,b){

    let result = a+b;  // 浏览器在这里暂停

    return result;

};

debug  (sum);  // 参数是一个函数,不是字符串

sum();

控制台调用:

控制台输入debug(sum),点击 enter,再触发一次 sum 操作,就进入断点页面。

要注意确保目标函数与 debug 函数在同一个作用域里面,否则会报 ReferenceError:

原文地址:https://www.cnblogs.com/baimeishaoxia/p/12187609.html

时间: 2024-10-11 12:45:06

使用断点调试代码的相关文章

Eclipse debug断点调试代码时出现source not found问题

偶尔调试代码的时候会出现这种事情,之前并没有特别注意,今天稍微搜集一下相关资料: 1.跳转到的代码的确没有源码,下载源码后选择源码位置后便会正常显示源码. 2.源码和class文件不一致.即便勾选了auto build选项,eclipse依然存在class没有实时编译的情况,致使我们当前的代码和编译的class文件不统一,导致debug断点时定位源码失败.此时只要重新build或是重新clean package一下就好了.

ios 使用xcode调试代码的时候进入断点显示变量全是nil,但NSLog输出那个变量却是有值的

解决办法:把1删掉 2选择debug模式 ios 使用xcode调试代码的时候进入断点显示变量全是nil,但NSLog输出那个变量却是有值的,布布扣,bubuko.com

NX二次开发-NX+VS写代码设断点调试技巧

在做NX二次开发的时候写完代码,编译可以通过,但是执行的时候却没有反应,或者得到的结果不对,说明肯定有地方传值出错了.我在查找代码错误的时候有几种方法:1.uc1601打印函数输入和输出的值看对不对.2.VS设断点-添加进程调试,来看输入输出值对不对3.UF_CALL也就是UF_get_fail_message这个函数,来看函数自己用的对不对.4.查看NX-Help-LogFile(日志),拖到最后看提示了哪些错误. 我一般用的比较多的是设断点调试,这里先说设断点调试.其他方法改天再写. 写举一

phpstorm+xdebug helper对PHP代码进行断点调试

1.svn:安装SVN的Command Lines Tools.在phpStorm的SVN属性中File->Setting->Version Control->Subversion->Use Command Line Client填入:C:\Program Files\TortoiseSVN\bin\svn.exe注:svn.exe路经要修改成你自己的. 2.与google浏览器设置关联进行断点调试Run->Edit Configurations->Add New Co

js断点调试心得

虽然网上已经有多的数不清的调试教程了,但仍然没有发现哪篇文章写的通俗易懂,索性自己尝试写写自己的一些使用习惯或者说是心得,希望对那些还不是很懂得使用断点调试的孩子有一些帮助(大神请无视~). 1.断点调试是啥?难不难? 断点调试其实并不是多么复杂的一件事,简单的理解无外呼就是打开浏览器,打开sources找到js文件,在行号上点一下罢了.操作起来似乎很简单,其实很多人纠结的是,是在哪里打断点?(我们先看一个断点截图,以chrome浏览器的断点为例) 步骤记住没? 用chrome浏览器打开页面 →

.NET C#微信公众号开发远程断点调试(本地远程调试生产环境)

最近在做微信公众号开发,由于之前没有接触过,突然发现调试不方便,不方便进行断点跟踪调试.因为微信那边绑定的服务器地址必须是公网地址,但是还是想进行断点调试(毕竟这样太方便了) 因此上网搜了一下,发现好多是使用软件之类的进行请求转发从生产环境转发请求到开发环境上,发现有的太麻烦了. 突然想到Vs有一个附加到进程的远程调试.于是玩了一把.我们直接开始(服务器上就不要使用发布版本代码了,代码和本地开发一样,不然是不能调试的) 本篇是以开发环境的Visual Studio2013旗舰版以及生产环境里阿里

iOS开发断点调试高级技巧

关于LLDB调试,很多iOS开发者可能就是停留在会下简单的断点,使用最多命令也就是po.无可厚非,这些简单的调试对于简单的问题来说应该是游刃有余.但是如果稍微复杂一些的问题,比如我之前遇到过友盟SDK里面的一个问题.我很想往里面下一个断点,可是对于.a的静态库来说,这根本不可能,最终还是我们组大牛使用命令的方式下了断点解决了这个问题.感觉这些知识很有必要,我于是把LLDB的基本调试命令都学习了一下,并在此与大家分享. 虽然博客很长,不过耐心看完,然后动手实践,一定会有很大帮助. breakpoi

学习笔记之二(断点调试的基础知识)

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>调试</title> <script type="text/javascript"> function writeTimesTable(timesTable){ var counter1; var writeString; for (counter1=1;count

断点调试

js断点调试心得 虽然网上已经有多的数不清的调试教程了,但仍然没有发现哪篇文章写的通俗易懂,索性自己尝试写写自己的一些使用习惯或者说是心得,希望对那些还不是很懂得使用断点调试的孩子有一些帮助(大神请无视~). 1.断点调试是啥?难不难? 断点调试其实并不是多么复杂的一件事,简单的理解无外呼就是打开浏览器,打开sources找到js文件,在行号上点一下罢了.操作起来似乎很简单,其实很多人纠结的是,是在哪里打断点?(我们先看一个断点截图,以chrome浏览器的断点为例) 步骤记住没? 用chrome