1
loadingimg 2020-11-15 21:43:07 +08:00
我
|
2
anjianshi 2020-11-15 22:07:43 +08:00
我
|
3
loading 2020-11-15 22:30:35 +08:00 via Android 25
我
后端 print 前端 console.log |
4
hendyzone 2020-11-15 22:31:11 +08:00
我
|
5
zqx 2020-11-15 22:40:05 +08:00 via Android
新手喜欢用 log,运行完了看输出。
高手单步调试 |
6
levelworm 2020-11-15 22:51:50 +08:00 via Android
一开始 print,解决不了的单步。
|
7
Jirajine 2020-11-15 22:58:20 +08:00 via Android
解释型语言的调试器都可以 eval 任意表达式,编译型语言很多就不行,那就还是需要 print 。
|
8
ConradG 2020-11-15 23:05:45 +08:00
我
IDE 再强大,也没法在测试环境用 |
9
ciaoly 2020-11-15 23:12:17 +08:00 via Android
打日志找 bug 不是很正常吗?🧐
|
10
laminux29 2020-11-15 23:19:17 +08:00
开发环境、临时测试环境、正式环境,这三种环境,测试使用的工具与方法,肯定会有不同。
但无论如何,用 print 之类的来 debug,是有点不专业。 |
11
opensail 2020-11-15 23:23:09 +08:00 via Android
用啊,fprintf,qdebug()啥的
|
12
unixeno 2020-11-15 23:34:32 +08:00 via Android
生产环境你也打不上断点
微服务下,一个请求调 100 个服务的那种,不靠 print 你也没法调 |
13
jdhao 2020-11-15 23:38:46 +08:00 via Android 1
高手用几个 print 大概就能找到问题所在,然后尽力复现就行了。。。
|
14
heiheidewo 2020-11-15 23:42:20 +08:00 1
多线程时你去单步试下?
|
15
salife 2020-11-15 23:44:50 +08:00
用 log 替换 print 吧,编程规范里面不知道有没有准用 print
|
16
lkhao1231 2020-11-16 00:50:42 +08:00
dev 直接 remote debug
非 dev 的测试环境 查 log |
17
wty 2020-11-16 01:00:43 +08:00 via Android
最近搞 nrf52832,协议栈不允许暂停,敢打断点程序就直接崩给你看,,,,快搞吐了。
|
19
est 2020-11-16 01:31:04 +08:00 via Android 50
IDE 就能重现的 bug 也好意思叫 bug ?
|
20
DoctorCat 2020-11-16 01:57:51 +08:00 5
print 一堆 fuck,分分钟迅速解决掉问题
|
22
msg7086 2020-11-16 04:14:50 +08:00
生产环境上没办法单步 debug,除了打 log 没别的办法。
本机一般用不上单步,打打 log,甚至有时候写个 test case 就能调通了。 |
23
yh6788 2020-11-16 05:25:40 +08:00
我,很灵活啊。
|
24
ysmood 2020-11-16 06:01:30 +08:00 via Android 2
成长阶段一般都是 print 到 break point 再到 print,不过高阶的 print 已经和最开始时的很不一样了。比如某个断点一次运行会被调用几百次且难以写条件断点时 log 很可能是更效率的 debug 方式,再比联调分布式布式系统也难以用断点, 典型的项目可以看 open tracing 。
我个人感觉只有调试非常简单的东西断点才会用断点。栈深点的算法用断点对普通人来说心智负担都很大,可能都会用动画级别的 log 来辅助大脑理解了。 |
25
Mutoo 2020-11-16 06:25:10 +08:00
现在前端调试器除了有 breakpoing 还有 conditional breakpoint 和 logpoint,后者是 print+breakpoint 的杂交。还可以直接在代码里加 debugger; 进行断点。
|
26
raaaaaar 2020-11-16 07:15:42 +08:00 via Android
都部署到环境上去后,楼上是怎么 print 的? log 设计好,不比 print 好多了
|
27
waruqi 2020-11-16 07:39:45 +08:00 via Android
一直都是 print,已经快 10 年没用 ide 调过了
|
28
Mithril 2020-11-16 07:48:11 +08:00
条件断点有多卡你试过么。。。分分钟给你把 bug 卡没了。。。。
多线程来回跑的时候全靠 print 多条关键路径来还原场景,这种情况下要么 print,要么写好 if 再往里面写点垃圾代码打断点,本质上还是 print |
30
Nich0la5 2020-11-16 08:05:41 +08:00 via Android
这么多人用 print ?按规范不应该用 logger 吗
|
31
Mithril 2020-11-16 08:12:01 +08:00
|
32
Nich0la5 2020-11-16 08:20:10 +08:00 via Android
@Mithril 使用 logger 可以把线程信息写进去,一次封装好后面就不愁了,debug 完把日志级别一改就完事。
而且大型项目都有统一的 logger 定向位置,用 print 是拿不到日志的 |
33
IgniteWhite 2020-11-16 08:20:45 +08:00
我……主要是菜
|
34
Mithril 2020-11-16 08:34:12 +08:00
@Nich0la5 说的不是同一个事。debug 用的 log 肯定是有的,我们说的是你在发现 bug 以后,本机调试过程中使用 print 而不是 IDE 本身的 debuger 。
而且当你想要看到多个线程的代码在某一段时间的执行是如何互相影响时,光是记录线程 ID 是没什么用的。你还要保证这些线程的 logger 共用缓冲,然后 logger 没准就在里面加了个锁,到时候你的线程状态和出 bug 的时候就不一样了。 当然你可以靠时间去排个序,不过这么折腾为啥不直接加个 print ? |
35
Hconk 2020-11-16 09:02:54 +08:00 via iPhone
一般来讲能用 IDE 调试的 bug 就尽量用 IDE 的 breakpoint, condition breakpoint, 包括尽可能用 vsc 的 remote ssh 调试, 但是在分布式集群上的程序 bug,没办法直接上 IDE 去调试,最后还是先 log 一些日志,如果能定位到问题就直接解决,如果遇到比较麻烦的 bug 还是会想办法在 IDE 下复现调试。
|
36
MOETAN0 2020-11-16 09:12:22 +08:00
我,在循环中观察变化,print/日志是最顺手的
|
37
RickyC 2020-11-16 09:12:34 +08:00
php 用 print_r()
|
38
phpxiaowangzi 2020-11-16 09:13:33 +08:00
前端 console.log 后端 var_dump
|
39
bear2000 2020-11-16 09:27:33 +08:00
没有断点调试的情况下就用 print
|
40
radiocontroller 2020-11-16 09:30:06 +08:00
没有人比我更懂 print !
|
41
edk24 2020-11-16 09:30:13 +08:00
后端 trace(),js 偶尔 trace
|
42
annielong 2020-11-16 09:33:43 +08:00
log 有时候记录太多了,不好查,还是 print 简单明了
|
43
weyou 2020-11-16 09:34:00 +08:00 via Android
同样经历 print->断点调试->print 的阶段,前两个阶段在学校完成的,工作以后就没再用过断点调试。另外 log 和 print,对于我来说这两者没有本质区别,没啥好争论的。
|
44
Molita 2020-11-16 09:36:05 +08:00
用 python 话 用 pdb trace,挺好用的
|
45
czdpzc 2020-11-16 09:41:28 +08:00
|
46
dcty 2020-11-16 09:44:42 +08:00
有时候一断点,bug 它就不出现了。
|
47
onice 2020-11-16 09:48:22 +08:00
我就是啊。
|
48
wlfeng 2020-11-16 09:48:50 +08:00
一般本地开发用 debug,部署到服务器上就看 log,所以写代码的时候怎么打 log 也是很讲究的
|
49
S0on 2020-11-16 09:50:43 +08:00
我
|
50
northisland 2020-11-16 09:53:36 +08:00
不得已情况下,会这么干。。。
经常是接手一块老功能,大概是 java 或 python 调 c++的动态库。。。 写个类似的测试用例(输入正反序列化一下)的时间,可能改动都实现 8 回了。 但是有条件还是 ide 香。 |
51
Winrey 2020-11-16 09:55:51 +08:00
我我我! [举手
可以试试 Sentry 其实 |
52
northisland 2020-11-16 09:56:35 +08:00
都是实现需求,print + LOG 硬莽,还是 ide 见招拆招,都差不多。
|
53
sidegem 2020-11-16 09:57:36 +08:00
比起 ide 的调试功能,我觉得 print 更好用点
|
54
hikkikuma1991 2020-11-16 10:06:09 +08:00
我。。。我都是写分布式程序的,几千台机器上调试除了看 log 没有别的好办法= =
|
56
Lawskiy 2020-11-16 10:10:55 +08:00
debug ros node ? 我觉得还是 print 简单点🤦
|
57
clf 2020-11-16 10:12:40 +08:00
怎么方便怎么来。
|
58
itskingname 2020-11-16 10:29:45 +08:00
给你讲,我老师,在 macOS 上面安装 Windows,然后在 Windows 里面跑 Visual Studio 运行 VB,他调试的时候,用 dialogbox,用报警对话框来显示变量的值。比 print 可牛逼多了。[狗头]
|
59
xloger 2020-11-16 10:40:53 +08:00
我我我,Android 开发,用 Debug 跑一次增量大概第一次三四分钟,之后一分钟吧,直接运行十秒不到,换你你选哪个...
|
60
Deepseafish 2020-11-16 10:48:33 +08:00 4
|
61
Rekkles 2020-11-16 10:49:41 +08:00
|
62
wangyzj 2020-11-16 10:53:16 +08:00
我!
|
63
redtea 2020-11-16 11:07:59 +08:00
java 用 print 有性能问题,不知道 python 有没有。
|
64
THESDZ 2020-11-16 11:08:51 +08:00
手段而已
|
65
aneostart173 2020-11-16 11:09:05 +08:00
print 调试不可替代。
|
66
faceRollingKB 2020-11-16 11:11:07 +08:00
不如调查一下,有多少人完全不用 print 或者 console.log ,不知道一只手能不能数的过来
|
67
est 2020-11-16 11:19:30 +08:00
|
68
est 2020-11-16 11:20:54 +08:00
好像贴错了。反正记得有个问题是 python 的 print 带了 buffer,java 的没带。然后每次调用就很浪费。
|
69
nuk 2020-11-16 11:27:35 +08:00
一般在 gdb 里 print,加 print 重新编译要太久太久,而且太多比较难复现。
比如。。在很偶然的情况下。。我们自己实现的 map 的 hash 值居然会算错。 |
70
vipppppp 2020-11-16 11:28:33 +08:00 1
代码有很多异步或者回调的时候,打断点也不一定比 print 来的有效
|
71
goodboy95 2020-11-16 11:31:34 +08:00
单步调试用起来爽,但正式环境下还是要 print,不要问为什么不搞远程调试,问就是正式服要求高安全性。
|
72
reus 2020-11-16 11:42:26 +08:00 via Android
所有涉及超时的程序都不能打断点,只能靠打印信息,这是本质问题,工具再强大,也改变不了客观规律
|
73
yolee599 2020-11-16 11:45:43 +08:00
用自己写的 log 工具,可以自定义 level,可以用一句宏定义关闭
|
74
crclz 2020-11-16 12:21:34 +08:00
我觉得两种都得会。
|
75
crclz 2020-11-16 12:23:51 +08:00
Don't underestimate the value of printf().
---- stanford cs140 课程 http://web.stanford.edu/~ouster/cgi-bin/cs140-spring20/pintos/pintos_10.html |
77
iFollow 2020-11-16 13:20:52 +08:00 via Android
本人调驱动只会 printk ……
|
78
paoqi2048 2020-11-16 13:30:23 +08:00
我用 print 还有 log
|
79
dbow 2020-11-16 13:34:48 +08:00
现在遇到的 bug, 都很奇特, 时有时无, 复现困难, 只能用 print
|
80
killeder 2020-11-16 13:41:54 +08:00
嵌入式,printf 是最常用的调试手段
|
81
DoUSeeMe 2020-11-16 13:48:25 +08:00
🙋
|
82
across 2020-11-16 13:50:28 +08:00
看到这种问题,我只觉得论坛平均技术水平断崖式下跌····
你能想象电子行业的人出来问:还在人拿锤子修理机械么? |
83
Felldeadbird 2020-11-16 13:52:37 +08:00
一直用 print 啊。虽然知道有更好的工具。但是习惯了,很难改。
其次,生产环境我一样 print 。 不过我会上一些参数来调试。不影响正常业务运作。 |
84
iSecret 2020-11-16 13:53:07 +08:00 1
不,我写的程序没有 BUG 。(狗
|
85
cholerae 2020-11-16 13:53:55 +08:00
内核和驱动调试不用 printk 怎么整,很麻烦的
|
86
walsh 2020-11-16 14:19:28 +08:00
高手都是徒手看 dump(狗头)
|
87
shpkng 2020-11-16 14:22:51 +08:00
我
|
88
acmore 2020-11-16 14:26:12 +08:00
Print 和 Debugger 都是工具和手段,怎么快怎么来,通过二分迭代 + Print 就能迅速定位的还要走单步调试就略显迂腐了,一般在 Context 比较庞大的情况下用 Debugger 效果才会更加显著。
|
89
sr0miao 2020-11-16 14:46:45 +08:00
me
|
90
lzyliangzheyu 2020-11-16 15:13:39 +08:00
上仿真器(逃
|
91
sockpuppet9527 2020-11-16 15:38:08 +08:00
我,除非没有 printf/dump 只能用 gdb :)
|
92
SomeoneElseChild 2020-11-16 15:40:01 +08:00
单纯不想按 F9
|
93
paloalto 2020-11-16 15:45:27 +08:00 3
昨天,有俩个年轻同事来找我,说:马老师,线上网页打不开,发生甚末事了?
我一看!哦,原来是线上环境有 bug 。 传统 debug 讲究的是接化发,我“啪”就发出一串 print,很快啊!我全部防出去,防出去了啊。防出去以后,自然是,传统 debug,点到为止。 这个 bug 不讲码德,来,骗,来,偷袭,我 30 多岁的,老码农。这好吗?这不好! 我劝,这个 bug,耗子尾汁,好好反思。以后不要再犯这样的聪明,小聪明。 编程开发,要以和为贵,要讲码德,不要搞,窝里斗。谢谢朋友们! |
94
lhx6538665 2020-11-16 15:45:32 +08:00
递归 循环 这种断点已经很难用了
鼠标移动事件 断点根本不能用 一切需要精确时间的操作,使用断点就是错误的做法 |
95
sampeng 2020-11-16 15:48:34 +08:00
只有无奈的情况才单点。。。print 是最好的调试方式。。。。你单点调试一轮,我已经解三 bug 了
|
96
Macv1994 2020-11-16 15:49:42 +08:00
前端 console.log()
后端 print 手动滑稽 |
97
richzhu 2020-11-16 15:58:42 +08:00
我
|
98
VeryCB 2020-11-16 16:01:09 +08:00
我
|
99
tu9oh0st 2020-11-16 16:01:44 +08:00
我
|
100
ezleeinfo 2020-11-16 16:23:46 +08:00
你提这个问题有没有想过,用什么是解决什么问题的吗?解决问题就行了,没必要把程序员似的优越感弄出来。
|