‫我们将在这段视频和接下来的几段视频中回来, 我将向您展示如何使用调试和Visual Studio｡
‫调试背后的想法是消除bug｡
‫这些bug有时候很容易被发现, 因为一旦你运行程序, 它开始崩溃,
‫你就知道, 好吧,
‫你有一个bug, 但有时候它是一个逻辑bug, 这意味着它不会真正被你的ID看到, 但它必须被你或你的用户发现, 这希望会告诉你,
‫你需要改进它或需要摆脱这个bug｡
‫为了向您展示或演示Visual Studio中的调试功能, 我在这里创建了一个小程序｡
‫我准备了一个小工具, 我们将使用这个工具, 这个工具将是一个聚会朋友的邀请工具｡
‫我女儿刚满三岁, 我们为她开了一个小派对,
‫她可以邀请一些朋友, 当然, 她也很想邀请整个幼儿园的人, 但我们只允许她邀请三个朋友｡
‫所以现在她必须决定邀请哪些朋友｡
‫当然, 这是一个容易的, 因为有一些朋友,
‫她喜欢比别人, 但最终我不知道谁是她最喜欢的朋友｡
‫所以如果我必须决定她可以邀请谁, 我会写一个小程序, 上面写着, 好的,
‫每个人都有一个简短的名字, 最多一个完整的名字｡
‫是的, 最多有几个在这种情况下, 三个可以被邀请参加聚会｡
‫所以她说出了我们所有朋友的名字｡
‫然后我会说, 好吧, 名字最短的人, 三个名字最短的人会被邀请｡
‫这就是工具｡
‫我所写的, 正是它所做的｡
‫我们有这张名单弗兰克, 乔, 米歇尔, 安迪, 玛丽亚, 卡洛斯和安吉丽娜｡
‫我们有一个获取聚会好友的方法, 它需要一个列表, 以及从列表中选择的人数｡
‫然后我们有一个for each循环, 它只会在控制台上写下那些人或孩子的名字｡
‫好吧, 我会的
‫不要太花哨｡
‫决定谁被邀请谁不被邀请的算法是这个方法, 在这里我们邀请一个派对朋友或者我们找出谁是派对朋友｡
‫当然, 我们需要一份可以核对的人员名单｡
‫然后我们检查最短的名字, 我们总是比较｡
‫所以我们会检查名单上的所有人, 然后进行比较｡
‫名字是要比特定的长度短还是要比其他人的名字短？
‫所以最后它只会给予我最短的名字｡
‫但我在这里内部有一个bug｡
‫好吧, 我会的
‫所以我将比较大于最短名字长度
‫在这个例子中, 我只需要得到所有最长的名字, 即使我想得到所有的短名字｡
‫这只是我实现的一个意图错误, 因为现在你可以看到, 这是你可能没有注意到的东西｡
‫当然, 这是一个逻辑错误, 如果我们运行代码, 它仍然会运行｡
‫不会有错误或错误｡
‫它不会崩溃, 它只给予我们错误的名字｡
‫但现在对我们来说, 这很容易, 因为我们看到, 好吧, 米歇尔, 安吉丽娜和卡洛斯是一个很长的名字,
‫我们知道名单｡
‫所以我们知道有乔和安妮, 玛丽亚, 甚至弗兰克｡
‫我们有较短的名字, 但由于某种原因, 他们没有在名单上, 即使我们希望有最短的｡
‫是的, 我知道
‫人或名字最短的人｡
‫我不知道他们有多高多矮, 但在这里这不重要｡
‫重要的是, 这是一个简单的列表, 因为我们在这里可以看到作为一个开发人员的列表｡
‫但如果我们从其他地方得到名单呢？
‫假设我们从一个XML文件中获取列表, 这个文件非常庞大, 包含数千个名字, 或者我们从互联网上获取一个列表,
‫但在我们的软件实际处理之前, 我们无法看到该列表｡
‫这样我们就不会发现, 那些给我们的名字实际上不是最短的名字,
‫但是我们的软件有一个小bug, 这就是get part different方法所做的｡
‫它将只返回最短的名称｡
‫然后我们有这个get party friends
‫plural, 它只返回所有短名字的人的列表, 达到一定的数量, 我们可以在这里支付通行证｡
‫所以我们通过了数字3, 这意味着我们只会得到三个朋友｡
‫如果我们通过数字4, 我们将得到四个朋友, 以此类推｡
‫好吧, 我会的
‫这基本上就是我们的软件现在所做的｡
‫我们有弗兰克的商业原始卡片, 所以我们只有这个空的聚会朋友名单｡
‫而只要这个派对好友名单是有一个较低的计数, 那么被传递的数字, 我们｡
‫只需查看下一个派对朋友｡
‫然后我们继续, 我们把它添加到党的朋友名单｡
‫我们要做的是从传递给我们的列表中删除｡
‫这是非常危险的,
‫但我们这么做是因为我们是一个初级开发者, 我们只是做了一个小技巧, 我们想, 现在我们要去掉列表中的一个变量或元素｡
‫我们通过编程来实现｡
‫然后一步一步地, 我们有一个简短的名单, 我们只剩下的人比较, 这是不已经在我们的名单｡
‫好吧, 我会的
‫这就是我们对这个列表的处理｡
‫移除｡
‫即使这不是干净的编程, 我们也会在后面看到如何修复它｡
‫但现在, 我们有软件, 它的工作｡
‫它工作得很好｡
‫但是我们如何解决这个问题呢？
‫因为我们现在知道我们有一个bug, 当然, 我们可以检查我们的代码｡
‫在这个例子中, 它很简单, 因为它只有43行代码｡
‫但是, 想象一下, 它是数千行代码, 许多不同的文件和许多不同的人已经工作了,
‫你不能找出错误是什么｡
‫现在, 您可以使用Visual Studio的调试功能, 为此,
‫您可以添加一个断点｡
‫现在, 让我们从断点开始｡
‫我们有这个｡
‫左手有个小红点｡
‫一般来说, 您可以在这个灰色栏中添加断点｡
‫你也可以通过按F9来添加一个断点, 我不打算这么做, 因为F9正在暂停我的视频录制软件｡
‫所以我需要用我的鼠标来做｡
‫因此, 我进入调试, 然后可以按toggle breakpoint｡
‫它将为我创建一个断点｡
‫当然, 您也可以按f 9｡
‫所以快捷键是9, 在调试时使用快捷键要比调试时一直点击要容易得多｡
‫好吧, 我会的
‫因此, 要习惯使用键盘上的按钮｡
‫好吧, 我会的
‫那么, 让我们开始调试｡
‫好的, 我进入调试, 然后开始调试, 或者我可以直接按F5开始调试｡
‫现在, 我们有一个黄色的小箭头, 它指示这是我们的软件目前卡住的地方｡
‫我们让它停留在那里, 因为我们在这里创建了一个断点｡
‫所以软件在这一点上是崩溃的, 现在我们可以按照自己的步伐向前推进软件, 这样我们就可以一行一行地前进,
‫甚至可以更深入地挖掘｡
‫那就这么办吧｡
‫让我们跳过, 按F10或按顶部的此按钮跳过并进入下一步｡
‫顺便说一下, 所有这些按钮, 它们只有在调试模式下才可用, 对吗？
‫所以我开始运行我的软件, 你也可以看到, 这里也可以使用step into､ step over和step out｡
‫所以你有多种不同的方法｡
‫是的, 走过去, 走进去, 走出来, 或者按那些按钮｡
‫好吧, 我会的
‫所以我现在要做的是进入下一行｡
‫于是我走到下一行｡
‫你现在可以看到朋友是一个有七个值的值｡
‫这是一个七个字符串的列表Frank, Joe, Michelle等等.
‫在索引0, 我们有弗兰克在索引1和乔, 等等｡
‫现在, party friends本身仍然是一个空列表, 即使我们给它赋值｡
‫但那是因为当你在第11行的时候, 第10行已经执行了, 但是第11行还没有执行｡
‫这意味着我们需要再次跳过, 这样你就可以再次按f10键, 进入下一行｡
‫还有我们的13号线｡
‫所以第12行被跳过了, 因为那里什么都没有, 没有代码｡
‫每次循环都是这样的｡
‫但现在如果你想深入挖掘呢？
‫那么, 如果您想知道调用这个get party friends方法时发生了什么呢？
‫你可以把这个箭头往上拖, 回到原来的位置.
‫所以我把它拖回来, 现在我回到了第11行, 现在我可以了｡
‫我可以不按F10, 而是按F11, 这样我就可以按F11, 然后进入get
‫party friends方法, 这意味着我们现在在第18行, 这意味着我们现在在Get Party
‫Friends方法调用中.
‫我们也可以走了｡
‫一步一步来｡
‫我们可以查一下什么是派对朋友｡
‫我们可以看看派对朋友的价值｡
‫您可以看到计数为零｡
‫所以它是一个空列表, 这意味着列表中没有条目｡
‫然后我们有一个疯狂的循环, 我们比较东西, 这样我们就可以到下一行, 我们可以看到聚会朋友计数是零,
‫我们比较0和4, 零小于四｡
‫所以要么疯狂循环要么疯狂是真的｡
‫我们可以转到下一行, 这里我们调用Get Party Friend, 这样我们就可以更深入一些, 进入get
‫Party Friend.
‫你可以看到我们现在用的是这个方法｡
‫所以单步执行意味着进入一个方法单步执行, 也就是移位f11是跳出一个方法｡
‫但是现在让我们来看看这个方法调用｡
‫我们可以看到我们有最短的名字, 在这一点上是乔｡
‫然后我们有了for循环, 现在我们开始, 一步一步的循环.
‫首先我们设置变量, 然后我们进行比较｡
‫一旦比较结果为真, 我们就进入for循环或for循环内部｡
‫然后我们再比较一下if语句, 我们可以看到,
‫长度3并不大于长度或最短长度3｡
‫所以三个人都不爽｡
‫这个if语句不是真的, 所以它进入了for循环的下一次迭代｡
‫所以现在它要一次又一次地运行for循环｡
‫现在你可以退出了, 它将退出这个方法的执行, 然后你就可以从那里开始了.
‫但是你这样做的目的是你不像通常那样执行for循环｡
‫所以如果我再一次退出, 我会得到一个参数超出范围的异常｡
‫因此, 您必须小心, 不要总是进入和退出,
‫但您必须担心地使用这些工具, 当然, 您可以从那里运行, 也可以停止调试, 您可以重新启动整个调试过程,
‫因为现在我们有一个小错误, 可能您不知道如何修复它｡
‫所以我们可以重新运行整个过程, 当然, 我们现在可以再一次, 一步一步地运行｡
‫我们也可以｡
‫往前走, 往前走, 往前走, 直到我们到达它给我们名字的地方｡
‫现在你可以看到我们在米歇尔｡
‫现在转到列表中的下一个名字安吉丽娜转到列表中的下一个名字是卡洛斯.
‫所以你可以看到你可以检查每一个变量和每一个变量在每一个时刻的状态, 这是非常重要的, 如果你想弄清楚事情｡
‫好吧, 我会的
‫这就是如何使用断点以及如何开始调试过程的一般思路｡
‫在下一个视频中, 我们将了解如何通过更好地查看变量及其状态来修复此逻辑错误｡
‫因为现在我可以, 当然, 将鼠标悬停在变量上, 查看它们在特定点的值｡
‫但是我想同时比较多个变量, 或者同时看到多个变量的状态｡
‫这就是我们在下一个视频中要看到的｡
‫那到时见｡