行了,刚才一大堆配置啊,你说配置那些东西要说记住,我一个也没记住, 我也不知道我都配了些啥,对吧?哎,实实际上那些呢?嗯,大家需要用到的时候用到的概率也不高,对吧?因为你一共能配置几次,你就来这文档查,但是实际上查文档啊,其实还不如百度来的快, 听懂吧。哎,就是当你需要有一个设置一个什么小东西的时候,你忘了在哪了,那就百度一下啊,很快的啊,很快,其实你说现在设置完了之后啊,让我下一次再来一来再设置几个地方,其实我也很难找得到, 对吧?因为你一旦设置好了一次啊,他就好久之后可能才会设置下一次,但是你下一次设置的时候就忘了我,我是这样,对吧?我是这样,主要是呢,最主要的是 大家别脱离一个点,就是什么呢?他是方便我们开发的啊,使我们开发更快一点啊,所以说他给我们提供了一些能够帮助我们开发的一些功能啊,比如说现在接下来我们要讲的这个就比较重要了啊,哎,这个叫做 debug 调试, 那这就是人家工具给我们提供的能够更加便于我们开发的一个一个功能,叫做 debug。 debug 是干什么的呢?就是说白了就是找错呗,怎么怎么找错呢? 比如说呀,以前咱们是不是捋过这个循环啊?之前咱们写一个小算法的时候,打印点东西的时候,对吧?打印质数的时候是不是就捋过循环呢?说什么当 i 等于一十,然后经过运算输出的结果是几?当 i 等于二十,输出的结果是几?那时候咱们是不是就是口算然后化 啊?当一挨等于零时,怎么怎么样?然后执行到哪,然后再执行到哪,然后在这输出的时候应该输出几,是不是之前口算去屡我们程序的执行流程, 对吧?哎,通过口算去履程序的执行流程,那么实际上呢?人家现在呢,用了这个工具以后,人家给我们提供了 debug, 它可以自动的去帮我们只履这个执行流程,而且每一步执行到 到了哪,然后你想让程序在哪停,然后呢?当执行程序执行到某一步的时候,这里应该是一个什么样的值啊?变量变成了什么样的值,他都给你有个提示,这就是你爸方便我们调错。因为之前也跟大家说过,咱们讲参数执算地的时候,未来咱们写的项目 庞大的时候,某一个参数我们来来回回传,来来回回传,在这负了个值,在这负了个值,在这负了个值,对吧?那到最后的 时候可能出现了问题,出现问题呢?就是那这在中间哪个环节出现了问题,在中间哪个环节没负上值呢? 那要是我们自己啊,一个一个的往上翻,往上找,那太麻烦了,那怎么办呢?我们可以利用这个 debug 工具干嘛呢?哎,当程序在这复值的时候,哎,我们停一下,看看我那个变量到这值是什么, 然后呢?到这的时候呢?让这个程序停一下,然后看看到这我那个变量值变成了什么,然后最终输出个什么结果, 对吧?哎,就是在哪一步导致问题的发生,在哪一步负值的时候负了个错误的值等等,类似于这样的情况,这就是 debug 干的事,听懂吧?哎,咱们当然现在没有那么庞大的项目,暂时就用一个循环来充当一下,比如 说,哎等于零,哎,等于一百,哎,哎,等于零,哎,小一百,对吧?然后呢,我们在这里啊,随便输出一个就是,呃,这样写吧,就是 int number 等于二, i 减二,对吧?然后 says out 一下这个 number 的值,听懂吗?那么如果我现在程序正常执行的话,我这一执行,他是不是把所有的值给我打印呐,对吧?哎,把所有的这个偶数给我都打印了一遍, 别二一加二有点复杂,就直接挨的值得了,对吧?右键运行,他是不是一一瞬间就把一百个数给我打印了呀,对吧?哎,那假如说呀,有的时候呢,我他这一瞬间就打印了,有的时候我需要在这个过程中啊,这个 i 要参与运算,我需要 知道这个时候打印的时候 i 的值是多少,对吧? i 等于一时,这里经过运算是个什么样的效果? i 等于二时是个什么样的效果啊?那怎么实现这个呢?也就是说让程序运行的过程中啊,他能有停顿, 然后当执行到某个地方的时候呢,值有了什么变化,输出的结果应该是多少?哎,我要做这样一个操作怎么办?那就 debug, 比如说,那在这里他是打印输出的 i, 我要在这里加个断点,你就在他的前面这个位置点一下,这就打成了断点。 那么当程序运行的时候,他会每次执行到这个代码的时候,这句代码的时候,程序会在这停住,让你去好好的看看,挨到这,执行到这的时候挨的值是多少,听懂这意思吧。哎,那么我加了断点以后, 此时我再去右键注意加断点的话,那得用这个叫做 debug, 就不是直接运行了,叫做 debug。 hello, word 点妹啊, debug 啊,或者你点这个小虫子,因为啥 debug? 因为不就是排错的吗? bug 不就是虫子吗?排错, 听懂这意思吧。嗯,大家知道为什么这个,这个,我们说管这个程序的错误叫 bug 吗?你们想听故事吗?你们知道这个故事吗?为什么管这个我们程序中产生的错误呢?我们都统称为 bug, 知道为什么吗?因为好像听过,对吧?哎,学计算机的专业的应该都都听过,因为我们说最老式的计算机,或者说是,呃,全球第一台计算机啊,他实际上超级 极大啊,就是感觉好像是像,据说是房子那么大,那个是一个叫超级计算机,那是第一台计算机, 然后呢,当他这个计算机发生问题的时候呢?那他就去那么庞大的那台计算机中去找这问题是在哪发生的,怎么回事?怎么导致的,结果最终发现实际上导致计算机出现问题的是一个蟑螂,一只蟑螂导致的计算机发生的一个问题 啊,所以说呢,我们现在遗留到遗传到现在呢,就变成了找解决程序的问题,那就是找 bug, 看到吧,哎,找那只蟑螂, 那现在呢,我们要看蟑螂是不是在这发生的,每次程序执行到这的时候挨的值是什么,那么我们就用 debug 的形式运行右键运行,注意看,哎,不一样了,看我程序执行到这一句的时候是不是 行了呀?哎,他与此同时还告诉你,此时,哎,在这的时候值是多少?经过运算,你这里试图输出输出的值,哎,此时是多少? 看懂吧?是不?程序在这停了呀?那接下来这个循环,每次执行的流程以及每次输出的一个结果,每次运算的结果,你是不是就都可以看得到了? 听懂吧。哎,那怎么看呢?这里还有几个小按钮,咱们一个个说一下。第一个按钮呢,那就是执行下一步, 哎,就是正常我现在程序的那个执行流程,我一点他下一步该执行哪了?该执行右大括号,本次循环结束是吧?嗯,执行一下啊,啊,执行挨加加呀,是不执行挨加加啊,直接挨加加啊,到这此时挨还是零,那加加还没预算呢,我再来,完事了之后是不变成一啊,变成一,这里打印, 哎,也是一,然后呢,你就再下一步该哪又挨加加这一步,这不又回去了,循环吗?又回去了,然后挨变二,再回去啊,挨变三打印,再回去,挨变四打印,以此类推,在这里你都能看得到,与此同时,在这你也能看到当前变量的一个变化, 看懂吗?这以前我们说捋这个负循环,我们是不是口算捋啊,那能捋的明白吗?现在步骤少,之前步骤少还好,那当步骤多的时候,我们口算那是捋不明白的,那现在利用这个特别好, 能体会到吧,虽然我这个程序有点简单,因为咱们现在也没有什么复杂的程序,慢慢这个东西用着用着就熟悉了,对吧?哎,那你就执行执行执行执行执行,搞定吧。哎,那这就是下一步,下一步,下一步,下一步就可以了, 然后呢?还有什么呢?大家注意,现在呢,这里有两个向下的箭头,一个是蓝色的箭头,一个是红色的箭头,那么这俩是干嘛的呢?比如说现在我这里是不是调动了一个方法 print like 是方法吧,只不过是人家扎碗给我们内置的一个方法。 那有的时候想看看人家这个方法里边是怎么运行的啊?不想单纯的看这一层,我想一旦调用方法,我想看看方法体内人家是怎么运行的, 听懂吧。那么方法是不是分两种啊?一种是人家扎板给我们内置的方法吧,一种是不是我们也可以自定义方法,比如说我们 public steak white show, 然后在这里,在这里随便来点直吧,嗯,随便说出个一句话吧,对吧?嗯, 这是一个方法,对吧?是不是这方法也可以自定义啊?那么就有两个,如果说你想查看的方法是人家渣碗内置的方法,你就点这个红色向下的箭头, 如果你想查看的是我们自定义的方法,那么你就点蓝色的向下箭头,听到吧。哎,那我们就点点试试呗。现在我想看看这个 printline 方法中人家是 里边的原码是怎么执行的,执行流程是吧?那你就点红色向下的箭头进去啊,这时这时是不刚才把 x 等于十六传进来啊,对吧?所谓的 x, 那就是我把 i 的值是不是 传递给了 print li 方法,那么 print li 接收的这个 x 值就是十六,然后呢?他做了什么事,你又可以,是不是下一步一句一句执行啊?哎,那 一句一句上下执行啊,执行到这,打印个十六,执行到这 new 赖换行,那这个又是一个方法,假如说你还想再看看人家这个方法怎么写的,那你就再进去呗,哎,就点这个红色的再进去 啊,这样写的,然后直行到这,直行到这,直行到这。啊,原来是这样的,对吧?然后呢,那现在你看完了,我想退出这个方法,那就点向上的箭头, 那就出去,哎,回到了这,然后呢?再出去,又回到了否啊?然后呢,我们再看这 i 等于十六,然后再捋下一步,下一步,下一步,这样的进行,以此类推, 看懂吧?哎,那这时我想退出 debug 的模式,那你只需要点这个按钮就可以了啊,退出 debug 模式啊,那就退出了,程序也就结束了, 看懂吧。那么有的时候呢,比如说我再来一个,我是不是在这里又调用了这个自自定义的方法呀,对吧?哎,自定义的方法,那么此时呢, 我们也可以加个断点,然后呢右键再去 debug 来一次,然后呢,你直行,直行,直行,一步一步的执行,一步一步的执行,一步一步的执行,对吧?哎,那这时执行到这,哎,这是一个自定义的方法,那你是不是想看看人家这个方法是怎么生,里边怎么写的呀?那你就蓝色的按钮 进去啊,他是给我说出这样一句话,对吧?啊,下一步,下一步啊,下一步就回到这了,然后呢?哎,我再看一下再进去, 对吧?下一步,下一步,下一步啊,你不进去的话,那当然他就执行当前这个页面的后循环,对吧?你想进去的话,那就进去看,看完了之后啊,下一步,下一步,看懂吧。 哎,然后再这样,下一步,下一步,下一步是不是一直下一步啊?注意看感受这个事啊,然后比如说看到瘦方法,然后进去进去了吧,如果下一步的时候他是不是该给我到爱加加了呀?那比如说我要点这个的话干嘛呢?直接进入下一个断点,或者这个也是一样。 这俩按钮几乎有点类似啊,就是直接进入到下个断点,哎,直行看直接到下一个断点了啊, 我在这个也是到下一个段点,然后下一个段点下一个段点,下一个段点,下一个段点,下一个段点,看能看到效果吧,人家都给你标栏了。下一个段点,下一个段点,以此类推, 好吧。哎,那么比如说现在 i 是不是循环到三十三呢? i 循环到了三十三,那有的时候我就那中间我我就想看看当 i 等于 六十的时候,这个执行的一个效果,他计算的一个结果是什么?那我总不能一直点点到六十吧,哎,那么这时可以怎么办呢?你可以在这里去添加一些你需要的条件啊,你需要的一些条件啊,你在这你也可以加,你在这里在这个红色按钮上点右键, 其实也可以在这里去加条件,看到吗?哎,在这里加条件行,比如说,嗯,在在这加也可以,都是一样的,比如说当 i 等于嗯六十的时候,他是一个什么效果,对吧?那这个时候呢?我们到直行,哎, 没好使,没好使。注意啊,那我这个 debug 得重新开一下我后家的条件,他现在没好使,没好使的话呢?注意看刚 刚才是不是从头来的呀。那现在是吧,来个 debug。 直行,现在是零,然后呢?直行,直行。哎。 i 等于六十,那啊,加这是不是不好使啊? i 等于六十的时候等于 force, 我在这加 i 等于六十,完成,然后执行 九 i 等于六十, i 的值等于六十。 哎,我想想啊,他刚才断点是在这停了啊,注意啊,他没有问题啊,注意看我现在再来啊。直行 现在是不是就 i 等于六十了?我刚才在这打断点,他是发生什么了呢?我在这加个断点,他没好使。 哦,我明白了,没有啥意思呢,就是我在这里加个断点呢,他这个条件没满足,对吧?哎,条件没满足,所以说他不好使, 看到吧。哎,条件没满足,没满足,因为你在这里加了个条件,在这里绕入,在什么情况下才能停到这一句呢?是不是猜 i 等于六十的情况下才能停到这一句啊? 但是这个有条件,这个时候没条件呢,所以说现在他一直在这执行呢,看到吧,你看八十四,他现在没有到六十的几率了,所以说在这停不了了,听懂那意思吧。哎,重来一次啊, 注意现在是不是两个都有断点呢?都有断点,那右键啊,我们来个运行啊,那此时是啥呢?现在我整个程序运行的过程当中,对吧?现在 i 等于零,这是他没有等于六十,但是这句我也加了断点, 他并没有加条件,听懂吧。哎,那这时呢?刚才忽略了啊,那如果他要是再加一个等于六十,那么再看效果,我执行是不他六十了,因为他加条件是不等于六十执行啊,我到下个段点啊,那这也是等于六十执行,到这,那这时现在两个断点 是不是都有条件呢?那接下来就没有等于六十的机会了吧?那再完事的话就结束了,听懂吧。哎,那就是只看某一步的时候加一些条件也是可以的。 行了,那么以上呢,就是这个断点的调试啊,然后呢,至于每个按键呢,在这上边啊,他其实都有说明,对吧?哎,都有说明的啊,在这里每个按键都是干什么用的啊?这里都有说明啊,比如说这里是查看你已经设置的所有断点, 然后呢,取消使断点失效等等啊,然后呢,你在断点的过程中,你也可以添加一些啊,你需要的条件,然后去捋你的执行流程,还有一些设置,比如是否显示一些静态变量啊,常量啊,是否显示数组集合中的呃,什么某些 元素啊等等。当然这些咱们是不是还没学呢呀?后来这个,后面这个断点啊,知道这些的时候,断点大家用着用着就可以,当你发生 bug 的时候就来调一调即可,行了。
粉丝3890获赞2.1万

我们如何去快速玩转 idea 当中的远程及 bug 调试这个功能呢?实际上非常有意思啊,想必你肯定遇到过一种情况,那就是咱们在线上或者说在测试环境 我们遇到了一些问题,但是我们在本地测呢,又没有发现,那可能两份代码呢都是一样的,但是数据呢,可能有些差异,所以说在本地呢是发现不了,但这个时候咱们怎么去调试呢?这个功能想必就能够帮助你啊。 在这呢,我们先来看一下,我在这边是创建好了一个测试工程,为了本视频的文档,我已经整理好了,并且与往期内容一起汇总成了二零二三年最新加法面试文档,放在了视频的最后面,坚持看完一定对你有帮助。我在这呢是创建好了一个 spin 部的的工程啊,非常简单,里边呢是有一个接口叫做 hello, 然后呢是有三行打印语句,那最后呢是有一个 return, 非常简单, 因为视频时长的一个问题啊。我在这呢就不为大家去演示打包和放了服气了,我在这边呢已经提前准备好了一个架包,那如果咱们要去配置 idea 的原 简称第八个,他肯定逃脱不了,要对 idl 当中去进行一些配置,对吧?可以看到现在呢,我用的是一个新版的 idlui, 可能大家对这个 ui 呢有些陌生,但是基本的操作呢是一样的,那如果大家想用这个新版 ui 的话,可以去选择 idl 这个位置有一个配置, 然后呢咱们就可以在外观这个部分选择 cui, 然后呢点击启用,然后重新打开掉了就 ok 了。好, ok, 那如果大家想要了解这个新版的 ui 的话,可以给我去点一个赞啊,那如果点赞过三百的话,我可以专门出一期视频来给大家去进行一个介绍。好,那回到主题啊,咱们要去配置的话,首先选择这一块区域,然后呢点击编辑配置, 在这呢,我们可以看到左上角有一个加号,对吧?点击这个加号,然后呢咱们去找到往下滑,找到这个远程 jbm 调试,那选择它。当我们加进来的时候是,首先第一块是名称,对吧?那名称呢,实际上也不太重要啊,大家可以随便取,那第二块呢也不用改,那最关键的是一个主机地 配置,这个地址呢非常重要。那对于网络的要求呢,也是比较严格的,因为我们的生产环境当中,可能环境和我们开发环境是隔离的,我们无法访问到,但测试环境呢,基本上都是可以的,所以咱们呢要视情况而定啊,可能在线上呢是没办法用这个功能,但是在开发测试环境呢,都是可以的。 ok, 那咱们呢就改一下这个主机地址,我呢已经提前准备好了, ip 啊,咱们直接粘过来就可以了。好,那第二个呢是端口,这个端口呢是专门用于本地的 idr 和远程的服务端去进行通信的,这个端口地址呢你随意配置,你想怎么配就怎么配,只要不冲突就可以了 啊。看到下面这一款,这一款也比较重要啊,大家要记一下,因为在不同的 idr 版本,那这一款呢,咱们要去选择,如果你是八,那要选择这个,因为这一段命令行呢,是它自动生成的,所以说会有一些变化,那大家对这一款呢要谨慎一点,我这边呢是用的十七,所以说我选择这个加二九以上就可以了。那最后一个就是使用模块类路径, 这个呢他自己给我选上了,因为本身我这边是一个很简单的 speak 的视力工程,所以说他只找到一个,这个也没有问题啊,但现在咱们很多的环境里面都是用 speakcloud, 对吧?那可能会有很多很多不同的服务,所以说我们要去调试不同的服务的话,我们要在这一块呢去做一个选择啊。 ok, 那最后呢点击应用,再点击确定就 ok 了, 对于 idr 的配置呢,就已经完成了,那咱们呢再打开它去把这一段呢给它去复制出来,这一段待会呢咱们要用到, 好吧,好,那点击取消,那来到了 idr 界面,那接下来呢咱们就去启动他,那我相信大家用过 nix 去启动过交卡项目的话,也大概都能知道啊,非常的简单 啊。第一步如果说我们需要去保留日志的话,我们要输这个 ahof, 对吧?然后第二个是 java, 那第三个呢是刚刚咱们复制的这个职业类目的参数。好, ok 啊,端口呢,咱们就不变了,那然后呢就是杠架,那后面呢就是把咱们架包的这个 名称给它拿过来。好,那最后呢咱们要不要后台启动,如果需要的话,那么就选择后台启动。好,然后呢回车,那咱们呢就看一下日志,好,可以看到这边已经在慢慢的启动了,对吧? 好,可以看到已经基本启动完成了, ok, 那接下来呢,咱们就去演示一下, ok, 那咱们呢就把本地的这个启动,那怎么启动呢?可以看到这个 bug 的图标,那点击调试就 ok 了, 如果这边输出已连接到目标的 vm, 那就说明咱们和远程呢已经连接上了,那对这个端口呢,大家也要注意一下,因为有一些服务的话,你可能没有开防火墙, 只允许了咱们这个程序的端口可以访问,但是你这个配置远程连接端口你没有开启的话,那实际上也连不上啊,这一块大家也要注意一下, ok, 那这一块启动之后呢,咱们就来到这边的演示界面,这个演示界面呢地址我已经提前准备好了,咱们就回车。好,可以看到现在已经能够访问了,对吧?啊?咱们呢就到 咱们刚刚演示的这个 hello 这个接口去,在 return 这一块,咱们打个断点去试一下, ok, 再回车可以看到这边断点已经进了,对吧?那咱们的远程第八个调试呢,就已经成功了,那接下来呢再跟大家去讲几个注意事项,也讲几个大家比较关心的问题啊。首先第一个 我停在本地的断点,那我关闭程序之后,他会不会继续的执行,这个大家肯定比较好奇,对吧?我们来为大家演示一下,那先看一下日志吧, 可以看到这边是打印的,点赞关注,投币点赞关注,对吧?啊?咱们呢就把咱们先把它去进行一个放行啊, ok, 可以看到三个都已经打印出来了啊,那咱们呢就把这个断点改到第一行来验证咱们的一个问题啊,我们就重新启动一下, ok, ok, 咱们来就再访问一遍,可以看到断点已经打在了第一行,对吧?此时咱们呢就把这个 idea 给它 停掉,好,可以看到已经停满了,再来看一下这边的点赞关注投币,这个日志是不是还是出来了,对吧?所以说他的一个结论是,尽管我们停掉了本地断点,但他还是会执行的,因为本地呢,只是做到了一个 debug 的功能,但是他并不能够去干预我们远程的一个执行啊, 所以说尽管我们关闭了我们的远程,但他还是会运行的,这个呢是第一个。那第二个,如果咱们驾包中的代码和本地的代码不一致,那会发生什么样的情况呢?这边第十九行是打印的点赞二十,关注二十一行投币,对吧?咱们就把点赞和投币给他删掉,把断点呢切到第十九行,那咱们再启动一下, 再请求一遍,断点已经进来了,第十九行,我们再来看一下日志,我们会发现他现在一行都没有打印,对吧?那这个问题是什么呢?因为咱们刚刚第十九行是点赞,所以他断点是打在第十九行, 并不是大家关注这一行,这个呢,是为什么三行都没有打印的一个原因啊?所以对于这一点的结论是,我们要尽量的去保证线上和本地的代码是一致的,如果不一致,他会根据行号来断点,他并不是根据我们本地的代码来断点,这个大家要注意,那咱们呢就把那两行恢复回来啊。那再跟大家聊第三个, 咱们的日志打印在哪里呢?我们刚刚已经看到了,在服务端有打印,对吧?那本地有没有打印呢?这跟大家讲啊,谁上本地是不会打印日志的,所有的日志他都是在远程打印的,这个刚刚已经看到结论的就不讲了,再带大家去讲。第四个,先启动他。这个点呢非常有意思啊,就是咱们调试的时候,其他人会不会卡住呢?我们实践出真知啊,来演示一下。 好,第一个已经卡住,对吧?来第二个,好,可以看到并没有返回啊,那对于这一点呢,大家要注意一下,就是如果你遇到了类似的场景,你要去用到这个 idea 远程 debug, 那大家千万注意,如果你 debug 是设 线上环境,你很有可能会造成这一个结构,其他所有线上的用户都防不了了。那这个功能尽量的在测试环境用,尽量不要在生产上使用啊。 好,那关于几点细节呢?包括整个配置呢,都跟大家去讲完了,可能大家会感觉这个远程调试的用处也不是特别大,对吧? 也不能作为一个长期的调试工具,那只能临时的用一下。那对于这一点呢,大家可以就是把这个留个印象,可能在以后某个业务场景,在某个环境里面,你想去做一个远程的 d bug, 那他呢,也可以做你的选择之一啊。那关于今天的内容呢,咱们聊到这就结束了。

bilibili hi, 大家好,我是玉峰,欢迎大家收看本期 tiktok。 那么今天这个视频呢,我们将一起来介绍一下如何在 ida 当中进行远程的断点调试。 ok, 首先呢,我们一起来看一下远程断点调试它的一个流程大概是什么样的?我这个地方简单画了一个图啊, 首先呢,我们只关注啊右边的这一部分啊,这个是我们正常访问服务器它的一个流程,比如说这个地方,是啊,用户的一个电脑,对吧?这个是我们远程的一个服务器, 正常情况下用户访问啊,幺九二点幺六八三幺点二二四八零八零啊,给这个服务器了,服务器呢应该是返回一个结果给他,比如说这个 hello world, 对不对?但是现在呢,我们要加上左边的这个本地的 i d a 的啊,这个远程断点调试我们怎么做呢?它其实是这样,首先用户访问服务 服务器得到了这个具体运行的这一行,比如说是三十七行啊,三十七行的某某某某代码段,对不对?然后呢他就会去问一下本地跟他连接的这个 ida, 哥们,你这边有没有三十七行的断点啊? 然后 ida 他就自己检查了一下,哦,我的断点列表当中有一个什么什么类的三十七行啊,用户打了一个断点,然后呢就 开发人员开始调试,对不对?得到的这个参数啊,访问的这个结果呀,中间运行的一个流程,一副 x 判断呢,是不是这个开发人员他想要的一个结果? ok, 开发人员说,啊,是我想要的这个结果,那么这个 断点调试的过程就结束了,接下来呢他就会把放行断点结束调试的这样一个信息返回给我们的这个服务器啊,服务器就收到了,服务器就啊返回正常的这个运行结果 给我们的这个用户了啊,这个就是我们整个的一个啊,断点调试它的一个过程。那么接下来呢,我们就一起来演示一下如何在 ida 当中配置远程断点调试。首先我们需要去来到的是这个 run and debug configurations 啊,就是运行和调试的这样一个配置面板,我们点击一下这个加号 啊,你可以发现我们这个 ida 它支持的这个各种各样的运行方式很多啊,我们直接来输入这个 remote 啊,然后找到这个 remote jvm debug 啊,就是远程的这个 jvm 的这个断点调试,对不对啊?这个非常的见明知义啊,然后这个地方我们给它取一个名字叫做这个 remote debug demo 啊,这个地方我们需要去设置几个东西啊,首先是这个断点调试的一个模式啊,你到底是 attach to 还是这个 listen to 啊?通常我们选择的是这个 attach, 什么意思呢?就是你可想而知啊,你远程运行的那个服务器啊,他是线上的环境啊,通常来讲他的一个启停是很少的啊,一般来讲都会一直在运行,对吧? 如果说你是非常重要的这个业务的话,所以说不存在什么一直荡机啊,来回启动之类的,所以说我们只需要去本地启动了,然后我们 衣服上远程的那个端口就可以了,对吧?啊,那么可想而知,这个地方我们就要需要去填写的是远程的这个端口啊,远程的端口是幺九二幺六八三幺二二四啊,幺九二点幺 六八点三幺点二二四,没有任何问题。然后呢,就是你要指定一个端口啊,这个端口是远程的服务器和我们本地的这个 ida, 他们两个进行 socket 链接啊,远程断点调试链接的这样一个端口, 五零零五啊,这个是默认的,你可以自己去改啊,当然了,如果说你的这个远程服务器,他是阿里云或者是华为云啊,或者说其他的那种拥有防火墙或者说网络进出口这个安全控制的这样的一个 啊,这一层的话呢,你可能需要去打开五零零五的这样的一个放行规则,才可以实现这个远程锻炼调试啊。那么当你把这些东西都输入完毕了以后呢, ida 会帮我们生成一个命令行 这个参数啊,大概就是这样的一个东西啊,我们把它 ctrl c 复制一下,然后 apply, 然后 ok, 接下来呢,我们就来到远程运行的这个服务器啊,然后我们看一下他当前项目运行的这个文件夹啊,这个地方有一个 demo, 什么什么点架啊, 正常的情况下呢,我们如果说要去运行一个 spring boot 架包的话,是这样的啊,架把钢架,然后这个 demo 就完事了,对不对? 但是现在呢,我们需要去给他稍微做一下修改啊,首先我们要给他来一个大写的 x, 然后给他一个 debug 命令啊,接下来我们要做的是 debug 的操作,对不对?然后呢就需要去把刚才 ida 那边 啊,给我们生成的这一段参数复制过来啊,然后呢我们给他来一个杠架,然后是这个就可以了,对吧?但是你会发现他这个地方 报错了,对吧?啊?这个是为什么报错呢?因为这个地方我们有一个新号啊,这个新号应该是要给他做一个转移啊,这个命令行才会接收到一个完整的运行的参数啊,你这样直接写的话呢,他是会报错的,无法识别,所以说我们这个地方给他加一个反斜杠就可以了, 转移字符吗?然后运行啊,没有任何问题,对不对?现在呢他给我们输出了这样一段话啊,就是我们通过 过这个 dt socket, 然后监听的一个端口是五零零五,然后我们的项目运行是在八零八零啊,然后接下来呢,我们就来到浏览器幺九二点 幺六八三幺八零八零啊,这个地方他要加一个名字,比如说,然后这个地方他就给你打印出来了这个 hello, eric。 然后接下来呢,我们就需要去运行我们的这个本地的程序了啊, 我们这个地方啊,打开这个 configurations 这个面板,然后选择刚才我们配置的那个 remote 第八 demo, 然后这个地方只有小虫子没有小三角啊,也就是说你只能是断点调试的方式来运行它,我们运行它 ok, 没有任何问题。他这个地方显示的是我们已经和远程的那个机器连接了啊,端口是五零零五,然后是 socket, 对不对?然后接下来呢我们就 可以去打断点了啊,我们在这个地方给他打一个断点,然后看一下程序是否可以停止啊?我们再运行一下,嘿嘿,你可以发现这个地方程序已经停止了,对不对?然后我们得到了传入的这个参数啊,然后我们就去运行我们的程序,让他走完 啊,没有任何问题,现在他就返回了,对不对?比如说现在我们把这个地方给他改一下,叫做加吧, ok, 然后这个地方过来的就是加吧啊, 没有任何问题,我们把它走完。可能到了这个时候呢,有的同学就会有一个疑问啊,就是比如说我们把本地的代码给他改一下啊,会不会返回给用户的这个信息就变了呢? 我们可以来做一个简单的测试,然后呢我们把这个重新启动一下啊,重新给它启动一下,然后现在呢,我们还是这个地方调用这个 eric 啊,然后这个地方过来了,对不对?然后这个名字也是 eric, 然后我们让这个程序往下走, 接下来我们就是见证奇迹的时刻,对吧?哎,你会发现啊,这个地方虽然说我们本地把代码改了,但是我们本地的一个修改没有部署到线上去啊,没有和线上做一个同步。所以说呢,我们程序运行的逻辑还是按照线上的那个来走的啊。 那么同样的一个原理啊,比如说你这个地方又添加了很多其他的行,对吧?但是呢,我们的这个程序本来他只有两段话,对不对啊?就是第一个是这个输出,第二个是这个返回啊?原来呢,你是可以打断点在二十行和二十一行, 本来二十一行是这个返回吗?对不对?这两个地方断点你是可以打的,这些地方你打了断点以后呢,他是没有任何作用的啊,你在本地运行他其实也没有任何作用啊, 就好比是刚才我们这个地方把那个 hello world 改成了这个 hello 啊,他对于远程的这个结果是没有任何一点点改变的啊,所以说这个在我们实际运用的过程当中呢,是需要去注意一下的啊。 好的,那么以上呢,就是本期视频的一个全部内容了,如果大家觉得这个视频做的还不错的话呢,请帮忙点赞,投币分享,一键三连支持我一下。那么如果你还没有关注我的这个频道的话呢,也请你点一下关注啊,我的这个频道是专注于程序员干货,视频教程分享,关爱程序员身心健康这样一个频道。 ok, 我们下个视频再见吧, peace。

哈喽,分享一下在爱钓中如何去第八个调试我们的加号程序,也就是说这一排按钮的使用。第一个按钮表示可以回到断点处,我这里随便进入某一个地方, 点一下这个按钮,可以看到回到断点处。第二个按钮 staypool 表示一行一行代码去调试,点击一下 staple 音据表示可以进入方法里面点击一下 pose staple 音据强制进入,可以进入原码,比如说这里尺寸有一个判空的方法,我们先点一下这个,走到这一行代码,然后点击一下 佛使 staple 进去,进入圆码中, staple 表示跳出方法,这里点击下做普 frame 回退断点,比如说我这里没调试到,然后点一下这里 可以重新回到这个地方,然后我们再点击下这里进入我们的方法,这里可以重新去调试这个按钮,表示可以让断点移到光标处,比如说我鼠标放在这里,然后点击下 这个按钮,可以看到现在第八个到了这个方面数,然后这个是表达,是计算,在这里我们可以去写一些小的逻辑,然后去运行查看结果。这个按钮是针对于史君们的挑食,我们点击下第一个是历史的中的初始值菲塔过滤判断是否能被二整出, 这里可以看到剩下的是二十六八,然后 max 可以看到在这些偶数中最大值十八,这样的话就能方便我们去查看时间目中每一个步骤的一个结果。然后我们右击下这个断点,可以看到这里有一个表达,是 在这里有一个循环,如果说我们想要 i 等于五的时候才第八个,我们可以在这里写一个 i 等于五的条件,然后我们点击下这个按钮去运行,这里可以看到 i 等于五的时候第八个进来了,这样的话就很方便我们在循环中去第八个指定的条件。以上的这些操作便是爱调中第八个的常用小技巧,你学会了吗?

在 idea 中进行程序调试的几个小技巧,看一下代码实例,这个代码比较简单,这个方法是用来进行计算的,我在第五行加了一个断点,咱们来执行一下, 现在想断点调试第七行,一般来说我们可以在第七行加入断点,然后直接往下走即可。这里咱们有个更好的办法,可以将光标移到第七行,通过 outf 九 就可以直接到断点我们光标的所在位置,现在想查看按的的方法加和是多少。咱们在这里可以输入表达式,然后敲击回车,可以看到他的返回结果。同样咱们也可以通过快捷键 outf 八唤醒双口, 然后同样输入表达是敲击回车,也可以看到他的返回结果。并且这里可以动态对参数进行复制,比如这边的 a 我复制为四,敲击回车 后,咱们在这边会发现他的 a 值已经变化了。同样如果咱们再用这个表达式,发现他的返回结果已经变成了六。最后再看一下在循环中调试指定条件,看一下代码视力,这是一个放循环, 我只想在 i 等于四的时候进行调试。这里咱们可以打入一个断点,然后鼠标右键在这个地方输入咱们的条件,比如说这里就是 i 等于四,点击完成,咱们在 debug 运行一下,会发现只有 i 等于四的时候进入了断点。小伙伴们还有什么实用的调试方法吗?评论区分享一下。

大家好,欢迎来到小弟课堂,今天我们讲新的一课,我们看一下我们的学习笔记,我们这堂课的话讲一下咱们在公司中开发必备的技能, ida 六点八基础调试技能。 ok 啊,这个讲这个东西的话,首先大家掌握一个调试技巧,那咱们先看一下程序运行的有两个模式,一个是乱模式,是运行模式,一个是调试模式,咱们叫第八个模式。 ok, 那咱们讲一下什么是程序调试第八个呢? 程序调色是将编制的程序投入射击运行前用手工或者编翼程序方法进行调试,修正语法错误或者逻辑错误的一个过程,目的就是为了发现问题,然后你运行期间是否 符合预期,就好比你现在做了一个房子对不对?那每做的时候你是不是要先检查一下房子做的是否 ok, 或者你去做某看观察某个人健康程度,比如这个一星期内他有哪些健康变化,他运行的,比如每天的 那个心跳啊,心率啊,包括吃饭量啊,睡眠时间呢,就通过很多详细信息去看,判断他的最终结果是否跟你原先想的是一样。 好比咱们写一个计算机程序对不对?比如一个加减乘除于程序,那你是不是看一下四乘四是不是等于十六,二乘二是不是等于八二,二乘二是不是等于四,对不对?你要去判断他是否符合这个预期,咱们就叫程序的调试。 那咱们现在代码,比如几十万行对不对?或几千行一个功能,那你是不是,你怎么去判断他是否成能成功呢?万一出问题的时候,你怎么知道 是哪行代码出问题了?那你就要去调试,你才可以在几千几万行代码里面发现是问题。 ok, 那咱们就知道这一点,什么是调试?这很重要的,咱们先是个基础的调试功能,我们不会讲太多,你要把这个掌握,咱们可以才可以学后面的课程。 然后我们讲就正式调试之前,咱们需要明白一个点,什么叫断点呢?断点就是在咱们代码里面打一个标识位,比如咱们代码里面有五十行代码对不对?然后咱们在第三十行代码里面打个断点,他就会详细运行到这第三十行代码的时候,他就停留在那里, 在那个时候你就可以看他的运行的一个情况,比如他当前这个变量的值是啥?这当前有输出什么信息对不对?包括他的一些逻辑判断是否正确,咱们都可以在乱的地方先看出来。 所以断点就这个意思,大家要先明白这断点什么意思,然后下面就就有几个一些 stople stylen、 two、 stele 这几个作用, sty, oppo 就向下执行,一行 sty 引兔就跳进这个方法里面,然后 ctrl 就跳出方法。你现在这个可能看不懂,不影响,你先知道就行了。咱们上面这几点的话,你需要先掌握,那咱们看咱们先上堂课的代码,比如咱们上堂课代码这边, 我们在这个定一个用户对象的悠着对象对不对?悠着一个类,咱们定义这个悠着的这个类,然后咱们还有有两个方法,一个识别方法,然后说出一段话,我要睡觉了,对不对?那咱们拷贝一下,让他在那个 我 睡不着。 ok, 那输出两段话,那这个意思就是他会,他会,他可会在空气台里面输出两段话, 那咱们就进行调试,然后呢?一样吗?启动这程序之后,他就会进入这个魅函数,魅函数的话就创建这个对象,六这个悠则对象,然后这个声明对不对?这个引用,然后调他对应的方法,这用对象调他方法,然后就会进到这里来, 那咱们在这里打断点,比如咱们想在哪里,想判断他是否真的经常自己来,对不对?那咱们就可以打断点,在这里断点怎么打呢?在这里啊,这个小框这里点一个点,他 点就这个圆圈,这红色,红色的圆圈,他就是个断点,你可以打多几个都行的,然后你想取消掉他,怎么取? 取消呢?再点一下,他取消了,点一下开启,点一下就没了,这个断联就打就很容易。 ok, 那咱们在这一家断联的对不对?那咱们怎么去开启调试模式呢?咱们也说了吗?两个模式,一个是运行模式,咱们原先跑的是运行模式,还有调试模式的 bug, 那咱们怎么开启调试模式呢? 运行模式这个就是运行模式乱了,对不对?然后右边这个的话,这个跟小虫子一样啊,咱们就叫调试模式第八个模式,那咱们点击他,点他,看他会干嘛? 咱们点击底部进行编译, beautiful 编译,然后运行,开启调调试模式,咱们等他跑完这个进度条 允许访问 他,现在他现在又进到这里了,看到没有?这个就调试模式脸部这里出口的变化,连线的时候,咱们是一个乱,对不对? 就很多个可以切换不同的太本这个乱。咱们现在启动调试模式,他就进到第八个这里,这个窗口新增新加了一个窗口,进来这里的话,咱们看到他一些说明, 这两个控制台,这是控制台,这调试窗口调到窗口的话,咱们看到一些基本信息,那这个按多按钮,你可以先不用管,因为这比较复杂。先不用管,咱们要看这里 点开啃收,这里就是一个空置台,就在类似咱们这个 cmd 窗口这里的话,这次他默认其中的时候信息,咱们这个有个垃圾桶的,这里有个垃圾桶啊,可令哦,就清除了,清除空气台的信息,然后咱们先锻炼进到这里来,对不对? 这个点勾这个咱们原先打断的地方,还有勾就证明程序运行到这里,他这里就自动变蓝了,对不对?然后咱们就刚刚有说的几个按钮,咱们怎么让他继续往下走呢?那就是有这一个 clober 跳过往下走,还有个 style, 看到没有?还有个 style 的好,其他几个你可以先不用管, 这就先不用管,咱们现在知道这个 style 的和 stylen two, 然后这个 style 这几个的作用就行了。那咱们看一下怎么让他继续往下走呢? 那咱们点这个 style 吧,看到没有?我要睡觉了,他一输出上面这一堆代码了,他就停留到这里来,然后你再点 style, 他就跳过这跳再执行,往下执行一行他就会输出,我睡不着,对不对?那这样就是咱 那个调试是不是很容易?咱们想代码停在在哪里就停在哪里,想他干嘛就干嘛,就是很容易了。 ok, 然后咱们想让他结束这个调试模式,怎么点结束呢?点这一个点他就放心了,就是他继续往下串起来,走下去,跳到下一个断点里面去 看,就这个蛋糕连接就是完成了,这很容易。然后现在咱们想把这个清空料,就是先空查里面内容,清空料去点这一个清空就行了。然后比如你想再加多几行调试多几次吗?对不对?容易啊?这里 睡不着,一 一二三四就输出以上内容进来。 ok, 然后咱们一样的,比如咱们现在选 自己不加断点, 咱们这里加这段点进去,那重新运行的时候他就跳这里来,对不对?那咱们再点运行一下, 他现在跑完之后,他就会打开自己爆窗口,看到没有?他跳自己来了,对不对?自动变蓝。然后你现在这个的这里的话,咱们打开工程来这里啊,把星空。如果你现在点击这个 vivo 的话,你看他会干嘛?他会他,他会 继续进这里来吗?是不会的,咱们看一下他解把全部输出了。那这个时候咱们应该用什么按钮呢?咱们应该用 style, 就这里跳进方法里面,他这是一个方法,那咱们就跳进去,那咱们就 style。 所以就是咱们这里说的 f 进入自定义方法 sl, 我是跳过向下执行一行 ctrl 进入指定的哪个方法?那咱们让他再结束,再重新运行一下, 点这个小虫子,点他,他进行重新运行,再他也进入这里,对不对?那咱们就让他跳到这里面去,那怎么做呢?就选这一个 style, 看到没有?他进来这里了,那咱们看空起来这里啊,把它清空掉。那咱们进到这方法之的时候,咱们先就是可以让他一步步往下直行,而不再利用这个 style 跳进的方法。 咱们先点他下一步输出需要了,再点下一步又执行一行,又点执行一行,点他又执行一行,就这样是不是很容易?然后现在不想他不想让他一行一行执行,我想让他一遍马上执行完成, 那就点这一个点,他就全部执行完成了,那这个就是咱们程序的一个调试模式了,是不是很容易?当然你可能有些同学没掌握的话,你最后再再看一遍这个这个视频,因为基础课程的话,咱们基础技能是很重要的,所以大家务必要把这个学会。 要网上的话,你学习可以不可以不单看视频,你可以看一下网上那些教程,比如你可以搜索一下网上有很多教程的,这都不是问题的,你可打开百度,然后搜索一些教程,比如咱们打开百度,然后你搜索 id a 教程或者 ida 功能介绍,有很多的一些说明的,你可以边根据视频边个去百度去学习。咱们所做 ip 这行 的话,百度就很重要的一个技能, 看到很多一个说明,你就可以参考一下这些文章。 ok, 那就是一个点跟大家说明一下,然后咱们就把这个咱们这三个主要内容进行讲完了。咱们 id 的第八个基础调试技能,咱们回顾一下,程序有两个启动模式,一个输浪,一个是第八个。什么是第八个呢?就是为了验证咱们代码是否符合预期, 然后断点的话,就是咱们需要在哪个代码的停留地方打个标识,程序运行到这个地方就会暂停。 那什么是 dow 本呢?就是咱们程序有很多行,咱们需要一行一行往下执行的时候,咱们就需要 stople, 一行一行点他刚刚这个按钮啊,就这一个是 stople, 记住这个 style 啊,然后咱们现在不是调试模式,所以他这个是智慧的, 然后 ctrboys 类印图进入指令的方法,就这里还有 cl 跳出对应的方法,其实咱们用最多就上面这两个,所以大家知道就行。 ok, 那这个就是咱们这两个主要内容了,大家回去的时候记得好好的学习测试一下,只有这个步骤 是全英文的,但是咱们 id a 一般都是全英文的,记住不要用什么汉话版,一用这个很重要,不然在 id 这两个很难往下走的,这基本的单词大家肯定要会的。比如这个乱吗的 bug 啊,你把鼠标放进去的话,他就对了一个英文的一个说明, ok, 包括在下面这几个太保安也知道什么意思了,对不对?乱码的 bug 啊,咱们一步步每集的时候,咱们我们都会心赠一些知识点,大家注意把这个吸收好就可以了。 ok, 那咱们这堂课就先到这里,谢谢大家。

哈喽,今天来给大家分享一下我们 id 如何本地调试远程服务器上的代码。那我这边呢画了一张简图啊,如果说想要我们的 id 去本地点 bug 我们远程服务器上的代码, 那我们首先我们服务器上肯定要暴露一个远程调试的一个端口,让我们 ida 去监听,然后呢他还要暴露一个服务端口给我们浏览器去访问,然后最终呢才能触发 ida 的本地的 bug。 好,我们来看一下怎么操作啊?首先我们监听远程的调试端口,我们可以这样做,我们去 ida 呢点开这个, 然后点这个加号,这个加号里面有一个有一个 remote。 好,然后我给它起个名字啊,叫蜗牛。然后这边有一个 host 跟 port 呢,就是要填写远程服务器的一个调试端口。呃,那比如说我们远程服务器是一九二点幺六八, 二点五六点幺零,然后这边我们的调试端口呢?比如我给他指定一个端口叫八八八九。好, 然后这边呢我们要选上我们的 model, 然后点个 pad 应用一下,然后呢我们要把这一个项目啊给他打一个包,我们到这来,这边有一个 demo 后,这边有一个架包,我们要把它放到我们的这样的一个服务器上, 然后呢我们就可以启动我们这样的一个加包,但是启动的时候呢,我们要用这样的一个指令加吧杠叉 bug, 这边后面要填写一个地址啊,就是这边我们配置的这个,然后他这边呢有一个这样的一个指令, 我们复制一下,然后把它复制粘贴到这边好,然后杠架 demo 后再启动,那这边呢就有一个监听端口,这个监听端口呢就是给我们本地的一个 idea 去 debug 用的,那我们先去访问一下服务器上的项目,比如说我们像这样, 好,这边是有一个显示的蜗牛,对吧?我们直接在 id 这边打个断点,再去访问一下啊,这边呢是没有办法进入的,目前,对吧?那如果我把这个启动一下,那启动之后呢,我们这边就监听他远程服务器的一个调试端口, 好,然后我们再去 debug 一下。好,很明显啊,这边的 bug 就已经进来了,是吧?我们下一步, 然后我们再放开,然后我们这边就依然有这样的一个数据,那这样呢,就可以 debug 到我们远程服务器上的一个代码了,是不是很方便呢?那如果说大家想要我之前的一些 m 的话呢,可以到这边来这个,然后给他去发一个消息,像这样就可以拿到我们的一个 demo。 好,今天的一个分享呢,就到这。

今天来讲一下这个 idea 调试的时候怎么查看这个回特这个返回值主要有两个步骤,第一个步骤点这里,这里点这个设置,这里勾选这个就是返回值,显示这个方法的返回值。接下来这是第二步, 这里打个断点,执行到这个断点这里来之后,第三步点这个 step alt 就是执行这个方法, 执行完了之后,我们可以看到这里就是已经显示出了这个方法的这个返回值了,就可以看到这个返回数据,可以看到这个返回数据是有两条数据,反正就是其实这个就是方法的这个返回数据,这里就是这个返回结果。

idea 如何调试 java 程序呢? shift 加 f 九启动调试模式按 out 加五调出第八个窗口,选中第八个,便可查看调试中的变量及变量值。窗口中的按钮分别执行, step over step into force step into step out drop frame run to cursor。

如何第八个调试加法程序,那我们下面看一下,我这里写了一个类,然后里面写了一个进的方法,然后问方法开始运行,进行的时候,首先我们创建一个县城,这个县城里边呢执行我们上面这个方法,然后下面我们紧接着又掉入上面这个方法。那么在这个成语中,我们有两个县城,一个是梦这个县城,一个是十万的这个县城, 那我们怎么进行调试呢?我们这个定个断点,这里定个断点,然后我们底盘要去调试。好,那么这个时候我们就往下走,往下走,往下走,往下走。好,这个程序就执行完了,那我们这个啊,县城里边的代码我们看不到他的执行过程,我们可以再跑一遍, 我们发现在这个县城站中只看到一个闷县城站,看不到那个死拽的那个县城站,所以我们调试运行的时候,他就直接走完了。好,那么这个时候呢,我们怎么办呢?我们可以啊把这个断点这里 选择现成模式时代的确定,这个呢也选择现成模式确定。好,现在我们在第八个运行, 那么这个时候我们可以看到在这个里边呢,有一个梦县城,有一个史帅的雷这个县城,史帅的雷这个县城就是我们这个县城,梦县城就是我们梦县城,所以有两个县城, 两个县城站,那么这样的话我们调试,首先调试闷县城,往下走,往下走,往下走,往下走,闷县城直行结束,接下来我们在这里选择使出来的零线城点一下,好,这个时候进入使出来的零线城。好, 那么往下运行,哎,往下运行。好,这样我们程序全部执行结束。这就是我们在店中啊进行多线诊,抵到了调试。

哈喽,之前跟大家分享过了一个关于 stream 流和拉姆达表达式以及函数值接口的视频,然后呢有的小伙伴就在评论区留言说用 stream 流的这种形式啊,就是编码一时爽,然后调试火葬场, 那真的是这样吗?那我今天呢就跟大家分享一个代码的调试神器啊,比如说我们来看这样的一个代码,我们先把这样的一串数字啊,放到 off 这样的一个啊参数里面,然后呢我们去过滤,过滤出大于十的一个数,然后呢我们再把它映射成乘幺,就是映射成一个两倍 啊,然后呢我们再给他去除,再排序,再转换成数组,那如果说你用平时复循环的一种写法呢,他可能就会有很多层的一个欠套,对吧?那如果是用流的一种写法呢,一行简单的这样的一个代码我们就可以实现,那我们来调试一下,那那些说调试火葬场的一个小伙伴啊,就是意思 就是说我们用 skin 流的这种写法呢,我们没有办法看到他每一步的一个变化是什么样子的,那真的是这样吗?我们来点 bug 一下,点 bug 之后呢,我们会看到这边有一个这个按钮, 这个,然后呢我们点击一下,那我们来看一下啊,那这边呢就是我们的一个原数字,那我们点一下 future, 那他这边呢就会自动的给我们筛选出大于十的一个数字,我们再来点一下 map, 他就会自动的给我们那个数,呃,那些数字呢给他乘以二,然后我们再去重,然后我们再去排序, 排序之后呢他就会给我们按照一个顺序排列,最终呢我们转成数组,那其实我们这样每一步的一个执行过程我们都能够去啊,看的非常的清楚,是不是很方便呢?那所以呢,我并不是很赞同他们的一些说法, 工作很多年的一些程序员呢,他们都不愿意用一些 string 流的一些写法去写,那其实我觉得作为一个程序员,我们就应该不断的去拥抱变化,对吧?然后呢不断的去提升自己,不断的学习。大家如果说想要我之前的一些 demo 的话呢,可以到这边来 这边,然后呢给他去发一个消息,像这样就可以拿到我们的一个 demo。 好,今天的一个分享就到这。

今天我们来讲一下怎么在 id 里面直接调试这个 gs 文件,不需要启动项目,不需要在浏览器里面调试, 直接右键这个建设文件,然后这里可以找到这个第八个建设文件,然后这里打到断点,直接就是跑到这个断点这里来了, 然后我们可以看到这个调试这个整个界面,这个是跟那个加微大码都差不多的。这里然后这里是变量,我们直接就是单步 执行一下,这里是一个边量,然后可以看到手表放上去,也可以看到这个对象,然后这里也可以看到这个边量,这个是节省支付券,节省格式支付券,这个是支付券 这个对象,这这个时候还没有定义,然后我们再执行一下就这个对象,然后执行完了之后就是把这个节省格子支付证,然后搅合 这个接受对象了,然后这里可以看到是一个对象,然后这里就包含了这个对象,这个自带围罩的自带抗的自带。然后我们就是在单部执行,这个是打印这个日字, 可以在空气台这里可以看到这里打的这个日字,这样的话就是调试这个 gs 这个单码片段,就是非常方便,不用启动项目呀。然后又要打开浏览器啊,直接就是在 id 里面就是完成所有的这个调试工作。好,谢谢。


今天讲一下怎么调试代码,其实我们就是平时调试的话,第一个是每天工作当中都会用到,第二个就是用到了几个调试的那个步骤,或者是说技巧,其实是最讨厌的就那么一两个,就那么几个。 然后今天就是来讲一下怎么调试这个简单的应用程序,因为这个复杂的应用程序也是就那么几个小技巧。首先是怎么调试呢?我们首先就是这个是这个是入口的类,然后包含了这个魅方法,然后打一个断点, 打断你的话直接点这里打断点就可以了,他会出来一个这个红色的,然后我们直接以调试模式去启动这个应用程序,直接第八个,然后就是直接就是一下子就是直行到这个断点这个地方来了,这里 是高亮的,那下面的话就是这个出现这个第八个这个小杨卡可以实时的查看这个当时当时的当前的这个变量信息。然后最常用的第一个就是这个就是这个 f 八,这个这个单不调试,然后这个也是单不调试,这两个区别是这 个 f 七的话会进入到方法里面,这个的话是执行一行代码,基本上平时最常用的就是这两个。然后如果要执行到下一个断点的话是点这里,比如说我这里 再加一个断点,然后如果是点这里的话,他会执行到下一个断点,如果下一个就是没有断点的话,他直接把程序就全部执行完成,基本上采用的就是这个操作。 单部执行银行代码,然后这个会进入到方法,也是单部,也是就是执行银行代码单位,他他会进入这个方法, 这个是执行到下一个断点,如果下一个是没有断点,那么就是直接把这个程序执行完,然后我们来看一下就是但是平时这上面虽然有这个菜单按钮,但是我们 平时就是为了方便快捷的话,基本上都有那个对应的这个快捷键的,不管是那个 windows 还是这个苹果的。所以我们直接点一下这个单步直行,现在就可以在这里可以看到变量,变量 s 一,然后再单步直行, 可以看到这个 b 十二,然后如果这一行的话,如果是没有那个方法,比如这比如说这个就是没有方法的话,点这个点这个其实效果是一样的,就这个 f 七和 f 八就一个是进入的方法,如果有方法就进入到方法,如果 没有,那么也就是也是跟这个一样就进入到,就执行下一行代码,我们来试一下, 直接执行到下一行贷款,然后再继续执行,现在执行到这里来了,因为这是一个方法,你如果要进去的话,就要点这个 f 七,然后就是进去,然后继续再点这个弹步调试。 我们现在就不直接就是点这个单步去执行了,就直接点这个,因为后面已经没有断点了,直接点这个就是把这个程序执行完, 然后最终的执行结果在这控制的可以看到就是打印的两个三,大概就是这么一个流程,平时的话就是常用的,也也就这么就是几个操作,然后这里就观察一下这个临时的这个变量, 也就这么一些东西,然后再执行。再比如说这里直接打个单点, 这打了两个断点,刚才说就是这个按钮的话,是直接就是直行的下一个断点,如果后面有断点的话,没有的话就是全部自行完成,点一下直接就直行到这里来了。然后刚才说这里就是 他会跳过方法吗?啊?他是这样的,他是有方法里面有断点的话,他会就是直行进去,如果没有断点的话,他是直接就会跳过来。我们再来试一下, 直接执行了下一个断点,然后方法里面没有断点,然后再执行这个执行单部,他就没有进到方法里面去了,直接执行完成。好,谢谢。