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