
1 lichao 2013-08-20 17:34:58 +08:00 [想看看它每一步都是怎么执行的] ,Ruby 命令行下也可以啊,没 GUI 方便就是了 |
2 typing 2013-08-20 17:35:25 +08:00 log 有时候异步的东西, debugger会不能重现. |
3 sethverlo OP |
4 peizh2006 2013-08-20 17:50:46 +08:00 REPL+log |
5 luikore 2013-08-20 17:53:30 +08:00 代码中插一行 binding.pry, 想看什么都可以, 还能 edit-method 直接打开方法的源代码编辑 |
6 yuelang85 2013-08-20 17:55:42 +08:00 print |
7 bluntblade 2013-08-20 18:04:59 +08:00 printf + 二分法。 |
8 Livid MOD PRO Sentry |
10 Mutoo 2013-08-20 18:28:07 +08:00 果断TDD吧 |
11 ipconfiger 2013-08-20 19:00:58 +08:00 import logging |
12 sethverlo OP @yuelang85 @bluntblade @ipconfiger print 或者 logging 也很麻烦,我说的场景是在你觉得这个代码的走向完全超出你的想象,想跟踪一下看看到底每一步走了哪里这样的。。。 |
13 jtacm 2013-08-20 21:41:54 +08:00 python八荣八耻: 以动手实践为荣 , 以只看不练为耻; 以打印日志为荣 , 以单步跟踪为耻; 以空格缩进为荣 , 以制表缩进为耻; 以单元测试为荣 , 以人工测试为耻; 以模块复用为荣 , 以复制粘贴为耻; 多态应用为荣 , 以分支判断为耻; 以Pythonic为荣 , 以冗余拖沓为耻; 以总结分享为荣 , 以gui求其解为耻; |
14 davepkxxx 2013-08-20 21:43:05 +08:00 python可以打断点吗? |
16 shoumu 2013-08-20 22:01:43 +08:00 我用pycharm可以设置断点,其它的就不知道了 |
17 xunyu 2013-08-20 22:42:48 +08:00 pdb。。。 |
19 xunyu 2013-08-20 22:44:38 +08:00 |
20 cj1324 2013-08-20 22:57:11 +08:00 strace /lsof |
21 miaoever 2013-08-20 23:04:00 +08:00 |
22 9hills 2013-08-21 00:15:31 +08:00 Python完全可以打断点debug,但实话说没啥大用 print和log是两码事,详细清晰的log不亚于任何debug方法 还有其他各种debug方法,比如留后门 |
24 luikore 2013-08-21 00:52:58 +08:00 开发环境查虫用 print, 线上产品查虫用 log... 不过 print/log 就能搞定的问题往往都是超简单的. 疑难问题还是 debug 和 repl 比较有效率, 这些往往都是上下文依赖关系比较强的地方, 看到第一步的结果你才会去想或者试探下一步, 一个交互能力比较强的环境比预设的日志省事多了. 顺便, 写测试你只多花一倍时间, 没写测试去查问题, 要多花十倍时间... |
25 thedevil5032 2013-08-21 07:12:11 +08:00 via iPad 以前 log(临时),最近 TDD(一劳永逸)。 测试的好处在于不仅可以保证现在你的代码正确性,以后的也可以保证。 |
26 sethverlo OP |
27 shierji 2013-08-21 08:10:59 +08:00 其实我想吐糟一下大家有没有注意旁边的推荐书目是百年孤独…… |
28 edgar 2013-08-21 08:22:17 +08:00 @sethverlo 通常log类的库,比如Ruby自带的logger,输出log时都有info,debug等不同的输出级别,然后通过调整输出等级(level)来控制,比如正式上线之后可以只输出info级别的log,所以一般都不需要特别的去删除代码中的输出log部分,同时也可以控制log是输出到标准输出还是文件。有时通过分析log可以看出出错的原因,比如记录在log中的异常、数据库操作没有正常执行等。 |
30 MayLava 2013-08-21 10:08:13 +08:00 一直是print…… 我也该学学更科学的debug方法了( ̄ ̄") |
31 fanzeyi 2013-08-21 11:25:36 +08:00 import pdb pdb.set_trace() 放在任何想 break 的地方。 |
32 lane128 2013-08-21 11:54:23 +08:00 多用用print 会发现很多有意思的问题 |
33 lycheng 2013-08-21 12:00:38 +08:00 from IPython import embed; embed() 之前别人告诉我这个东西,然后弄到代码去之后,就好像断点一样,能直接通过ipython 查看变量信息 |
35 luikore 2013-08-21 12:53:34 +08:00 @sethverlo print 是为了知道运行时发生了什么事情, 没法 print 才用 log, 不知道是否正常才看 log, 这是不得已而为之... 滥用 log 就是连锁反应: 搞 rolling, 压缩, 合并, 日志分析... 本来简单的事情都变得很复杂了. map-reduce 查出一个 bug 还不如当初写个测试... |
36 lixm 2013-08-21 16:25:31 +08:00 log |
37 qdcanyun 2013-08-21 16:37:35 +08:00 看代码 然后print 找不到log 还不行就pdb.... |
38 sun1991 2013-08-22 00:03:43 +08:00 via iPhone 推荐一下python tools for visual studio, 集成了强大的debug功能。支持visual studio shell,也就是说完全免费 |
39 davepkxxx 2013-08-22 00:06:15 +08:00 买个pycharm吧,支持debug。 |
41 yuelang85 2013-09-17 17:20:12 +08:00 @sethverlo 我有一次,程序抛异常,抛出的异常里面含中文,还是个编码错误的中文,于是异常处理代码异常了,所以,我找不到第一个异常的任何信息。 于是我在相关模块的相关代码里,每行都写了个print。。。。 一般情况下,如果代码是你写的,或者你非常熟悉这个代码,再诡异的问题都不会难住你。 如果是非熟悉代码,只要掌握些技巧,比如 @bluntblade 说的二分法,一般也难不到。 遇到问题了,单元测试(我是说测试代码)很有用,极大提高效率,如果说各种困难(比如需要线上环境)导致无法写单元测试,完全可以自己写些工具搞定。 |
42 guangwong 2013-09-18 01:48:24 +08:00 扯淡吧,任何言不打,都蛋疼。 |