想知道现在还有多少人用 print 调试 debug?

2020-11-15 21:06:48 +08:00
 keepwalk2020
在 IDE 功能日益强大的今天,还有多少人在用 print 调试程序?
14094 次点击
所在节点    Python
118 条回复
binux
2020-11-16 04:13:30 +08:00
@zqx 真正的高手都用 print,因为他们知道在哪打 log
msg7086
2020-11-16 04:14:50 +08:00
生产环境上没办法单步 debug,除了打 log 没别的办法。
本机一般用不上单步,打打 log,甚至有时候写个 test case 就能调通了。
yh6788
2020-11-16 05:25:40 +08:00
我,很灵活啊。
ysmood
2020-11-16 06:01:30 +08:00
成长阶段一般都是 print 到 break point 再到 print,不过高阶的 print 已经和最开始时的很不一样了。比如某个断点一次运行会被调用几百次且难以写条件断点时 log 很可能是更效率的 debug 方式,再比联调分布式布式系统也难以用断点, 典型的项目可以看 open tracing 。

我个人感觉只有调试非常简单的东西断点才会用断点。栈深点的算法用断点对普通人来说心智负担都很大,可能都会用动画级别的 log 来辅助大脑理解了。
Mutoo
2020-11-16 06:25:10 +08:00
现在前端调试器除了有 breakpoing 还有 conditional breakpoint 和 logpoint,后者是 print+breakpoint 的杂交。还可以直接在代码里加 debugger; 进行断点。
raaaaaar
2020-11-16 07:15:42 +08:00
都部署到环境上去后,楼上是怎么 print 的? log 设计好,不比 print 好多了
waruqi
2020-11-16 07:39:45 +08:00
一直都是 print,已经快 10 年没用 ide 调过了
Mithril
2020-11-16 07:48:11 +08:00
条件断点有多卡你试过么。。。分分钟给你把 bug 卡没了。。。。
多线程来回跑的时候全靠 print 多条关键路径来还原场景,这种情况下要么 print,要么写好 if 再往里面写点垃圾代码打断点,本质上还是 print
yjxjn
2020-11-16 08:01:42 +08:00
@salife 肯定不能用啊,sonarlint 以及 spotbugs 写了 print 都要警告的。
Nich0la5
2020-11-16 08:05:41 +08:00
这么多人用 print ?按规范不应该用 logger 吗
Mithril
2020-11-16 08:12:01 +08:00
@yjxjn 用来 debug 的代码又不会提交上去,跟 lint 有啥关系。
@Nich0la5 debug 用的,又不是在产品上挂 print 。而且有的 logger 会有缓存,多线程情况下并不一定能保证输出的 log 顺序是正确的。
Nich0la5
2020-11-16 08:20:10 +08:00
@Mithril 使用 logger 可以把线程信息写进去,一次封装好后面就不愁了,debug 完把日志级别一改就完事。
而且大型项目都有统一的 logger 定向位置,用 print 是拿不到日志的
IgniteWhite
2020-11-16 08:20:45 +08:00
我……主要是菜
Mithril
2020-11-16 08:34:12 +08:00
@Nich0la5 说的不是同一个事。debug 用的 log 肯定是有的,我们说的是你在发现 bug 以后,本机调试过程中使用 print 而不是 IDE 本身的 debuger 。
而且当你想要看到多个线程的代码在某一段时间的执行是如何互相影响时,光是记录线程 ID 是没什么用的。你还要保证这些线程的 logger 共用缓冲,然后 logger 没准就在里面加了个锁,到时候你的线程状态和出 bug 的时候就不一样了。
当然你可以靠时间去排个序,不过这么折腾为啥不直接加个 print ?
Hconk
2020-11-16 09:02:54 +08:00
一般来讲能用 IDE 调试的 bug 就尽量用 IDE 的 breakpoint, condition breakpoint, 包括尽可能用 vsc 的 remote ssh 调试, 但是在分布式集群上的程序 bug,没办法直接上 IDE 去调试,最后还是先 log 一些日志,如果能定位到问题就直接解决,如果遇到比较麻烦的 bug 还是会想办法在 IDE 下复现调试。
MOETAN0
2020-11-16 09:12:22 +08:00
我,在循环中观察变化,print/日志是最顺手的
RickyC
2020-11-16 09:12:34 +08:00
php 用 print_r()
phpxiaowangzi
2020-11-16 09:13:33 +08:00
前端 console.log 后端 var_dump
bear2000
2020-11-16 09:27:33 +08:00
没有断点调试的情况下就用 print
radiocontroller
2020-11-16 09:30:06 +08:00
没有人比我更懂 print !

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/725529

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX