为什么写这篇博客? 因为我刚买了新键盘,迫不及待想体验下打字6的飞起的感觉,嗯,新键盘还不错。前几天看到在知乎上看到一个问题:
我的答案也附属在下面;
估计你我都有这种感觉:做业务似乎不需要太多的debug,简单的增删改查为啥需要debug呢? 不是信手拈来。简单是显而易见的,不过长此以往往往会觉得做的东西没什么挑战性,每天的工作就是简单重复,循环经验,码码砖,所以外界都讲我们是码农。打住,真的是这样吗?
程序员的关键词应该是创造,而且是高质量、高速创造、时间不等人啊,这一切的基石即是debug 我的回答当中侧重3个方面:
个人认为主要有3点:
会 debug 会 level up 面试手写代码着重考察的能力 工作中提升工作产出的必备能力
如下图所示:
接下来以pycharm为主,演示下如何习得debug能力:
选择一个好的ide,会事半功倍,推荐使用 jetbeans 全家桶
打断点是个技术活,有没有感觉复杂程序的断点其实比较难确定打点的位置(打点位置的设定方法我在思维导图中有提及,得多 debug 各种难易程度的程序,找找感觉):
程序很简单,即遍历输出arr,断点打在function test_0() 调用的位置
1 and 2 方式均可
控制程序运行流程在 pycharm 中也有利好的工具可以用,如下图所示:
从左至右:
step over:
当前代码行的执行过程不必细究,直接运行完成后跳到下一行
使用场景:
当前代码行对debug过程没有任何影响,可以直接运行,且直接跳到下一行
step into:
即压栈的过程,进入函数调用内部,并且如果遇到系统库或第三方库调用也会进入到第三方库函数调用内部;
使用场景:
进入函数内部,包括自己def
以及 call 第三方的函数;
step into
my code:
也是压栈的过程,但是不同于step into,step into
my code 只能进入到自己def
的function
中,属于阉割的step into
step out:
即函数调用出栈的操作,
使用场景:
如果step into
到函数调用较长的函数中,不想一行一行看完所有的函数调用,那么可以直接 step out
,完成当前函数的调用,然后继续调用step over 继续运行程序
官网上没有对当前按钮的官方说明,官网文档:https://www.jetbrains.com/help/pycharm/debugging-your-first-python-application.html
如果你有多个断点,只想看断点处的运行结果,则可以直接多次按压 go next breakpoint,
观察变量的输出情况
debug 过程当中,所有变量的变更情况(动态的过程)
可以通过 varibales 变更面板查看
多练习,可以找到debug的乐趣,这是一种习得能力;
假如有现在一种场景,你新接了一个项目,这个项目没有做好项目传承-即没有文档 ,日志也惨不忍睹,毫无规范可言,(不考虑办公网络的复杂性,如代码在本地不能调试)你会怎么做?
先骂娘->看代码(要么睡着,要么怒火中烧) 结果是两三天过去了代码还没看明白? (简单代码可以走查,复杂代码需要debug,跑起来你才知道发生了什么)
如果是我,我会怎么做?
如果有更好的方式,请留言沟通哦。