推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
keepwalk2020
V2EX  ›  Python

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

  •  1
     
  •   keepwalk2020 · Nov 15, 2020 · 17149 views
    This topic created in 2181 days ago, the information mentioned may be changed or developed.
    在 IDE 功能日益强大的今天,还有多少人在用 print 调试程序?
    118 replies  •  2020-11-24 12:01:50 +08:00
    1  2  
    ❮ ❯
    loadingimg
    loadingimg
    Nov 15, 2020
    1
    我
    anjianshi
    anjianshi
    Nov 15, 2020
    2
    我
    loading
    loading
    Nov 15, 2020 via Android❤️25
    3
    我
    后端 print
    前端 console.log
    hendyzone
    hendyzone
    Nov 15, 2020
    4
    我
    zqx
    zqx
    Nov 15, 2020 via Android
    5
    新手喜欢用 log,运行完了看输出。
    高手单步调试
    levelworm
    levelworm
    Nov 15, 2020 via Android
    6
    一开始 print,解决不了的单步。
    Jirajine
    Jirajine
    Nov 15, 2020 via Android
    7
    解释型语言的调试器都可以 eval 任意表达式,编译型语言很多就不行,那就还是需要 print 。
    ConradG
    ConradG
    Nov 15, 2020
    8
    我
    IDE 再强大,也没法在测试环境用
    ciaoly
    ciaoly
    Nov 15, 2020 via Android
    9
    打日志找 bug 不是很正常吗?🧐
    laminux29
    laminux29
    Nov 15, 2020
    10
    开发环境、临时测试环境、正式环境,这三种环境,测试使用的工具与方法,肯定会有不同。

    但无论如何,用 print 之类的来 debug,是有点不专业。
    opensail
    opensail
    Nov 15, 2020 via Android
    11
    用啊,fprintf,qdebug()啥的
    unixeno
    unixeno
    Nov 15, 2020 via Android
    12
    生产环境你也打不上断点
    微服务下,一个请求调 100 个服务的那种,不靠 print 你也没法调
    jdhao
    jdhao
    Nov 15, 2020 via Android❤️1
    13
    高手用几个 print 大概就能找到问题所在,然后尽力复现就行了。。。
    heiheidewo
    heiheidewo
    Nov 15, 2020❤️1
    14
    多线程时你去单步试下?
    salife
    salife
    Nov 15, 2020
    15
    用 log 替换 print 吧,编程规范里面不知道有没有准用 print
    lkhao1231
    lkhao1231
    Nov 16, 2020
    16
    dev 直接 remote debug
    非 dev 的测试环境 查 log
    wty
    wty
    Nov 16, 2020 via Android
    17
    最近搞 nrf52832,协议栈不允许暂停,敢打断点程序就直接崩给你看,,,,快搞吐了。
    anguiao
    anguiao
    Nov 16, 2020 via Android
    18
    @salife 编程规范也只能管提交上去的代码,自己本地怎么调试,还真管不着。
    est
    est
    Nov 16, 2020 via Android❤️51
    19
    IDE 就能重现的 bug 也好意思叫 bug ?
    DoctorCat
    DoctorCat
    Nov 16, 2020❤️5
    20
    print 一堆 fuck,分分钟迅速解决掉问题
    binux
    binux
    Nov 16, 2020 via Android
    21
    @zqx 真正的高手都用 print,因为他们知道在哪打 log
    msg7086
    msg7086
    Nov 16, 2020
    22
    生产环境上没办法单步 debug,除了打 log 没别的办法。
    本机一般用不上单步,打打 log,甚至有时候写个 test case 就能调通了。
    yh6788
    yh6788
    Nov 16, 2020
    23
    我,很灵活啊。
    ysmood
    ysmood
    Nov 16, 2020 via Android❤️2
    24
    成长阶段一般都是 print 到 break point 再到 print,不过高阶的 print 已经和最开始时的很不一样了。比如某个断点一次运行会被调用几百次且难以写条件断点时 log 很可能是更效率的 debug 方式,再比联调分布式布式系统也难以用断点, 典型的项目可以看 open tracing 。

    我个人感觉只有调试非常简单的东西断点才会用断点。栈深点的算法用断点对普通人来说心智负担都很大,可能都会用动画级别的 log 来辅助大脑理解了。
    Mutoo
    Mutoo
    Nov 16, 2020
    25
    现在前端调试器除了有 breakpoing 还有 conditional breakpoint 和 logpoint,后者是 print+breakpoint 的杂交。还可以直接在代码里加 debugger; 进行断点。
    raaaaaar
    raaaaaar
    Nov 16, 2020 via Android
    26
    都部署到环境上去后,楼上是怎么 print 的? log 设计好,不比 print 好多了
    waruqi
    waruqi
    Nov 16, 2020 via Android
    27
    一直都是 print,已经快 10 年没用 ide 调过了
    Mithril
    Mithril
    Nov 16, 2020
    28
    条件断点有多卡你试过么。。。分分钟给你把 bug 卡没了。。。。
    多线程来回跑的时候全靠 print 多条关键路径来还原场景,这种情况下要么 print,要么写好 if 再往里面写点垃圾代码打断点,本质上还是 print
    yjxjn
    yjxjn
    Nov 16, 2020
    29
    @salife 肯定不能用啊,sonarlint 以及 spotbugs 写了 print 都要警告的。
    Nich0la5
    Nich0la5
    Nov 16, 2020 via Android
    30
    这么多人用 print ?按规范不应该用 logger 吗
    Mithril
    Mithril
    Nov 16, 2020
    31
    @yjxjn 用来 debug 的代码又不会提交上去,跟 lint 有啥关系。
    @Nich0la5 debug 用的,又不是在产品上挂 print 。而且有的 logger 会有缓存,多线程情况下并不一定能保证输出的 log 顺序是正确的。
    Nich0la5
    Nich0la5
    Nov 16, 2020 via Android
    32
    @Mithril 使用 logger 可以把线程信息写进去,一次封装好后面就不愁了,debug 完把日志级别一改就完事。
    而且大型项目都有统一的 logger 定向位置,用 print 是拿不到日志的
    FurN1
    FurN1
    Nov 16, 2020
    33
    我……主要是菜
    Mithril
    Mithril
    Nov 16, 2020
    34
    @Nich0la5 说的不是同一个事。debug 用的 log 肯定是有的,我们说的是你在发现 bug 以后,本机调试过程中使用 print 而不是 IDE 本身的 debuger 。
    而且当你想要看到多个线程的代码在某一段时间的执行是如何互相影响时,光是记录线程 ID 是没什么用的。你还要保证这些线程的 logger 共用缓冲,然后 logger 没准就在里面加了个锁,到时候你的线程状态和出 bug 的时候就不一样了。
    当然你可以靠时间去排个序,不过这么折腾为啥不直接加个 print ?
    Hconk
    Hconk
    Nov 16, 2020 via iPhone
    35
    一般来讲能用 IDE 调试的 bug 就尽量用 IDE 的 breakpoint, condition breakpoint, 包括尽可能用 vsc 的 remote ssh 调试, 但是在分布式集群上的程序 bug,没办法直接上 IDE 去调试,最后还是先 log 一些日志,如果能定位到问题就直接解决,如果遇到比较麻烦的 bug 还是会想办法在 IDE 下复现调试。
    MOETAN0
    MOETAN0
    Nov 16, 2020
    36
    我,在循环中观察变化,print/日志是最顺手的
    RickyC
    RickyC
    Nov 16, 2020
    37
    php 用 print_r()
    phpxiaowangzi
    phpxiaowangzi
    Nov 16, 2020
    38
    前端 console.log 后端 var_dump
    birdkyle79
    birdkyle79
    Nov 16, 2020
    39
    没有断点调试的情况下就用 print
    NotFounder
    NotFounder
    Nov 16, 2020
    40
    没有人比我更懂 print !
    edk24
    edk24
    Nov 16, 2020
    41
    后端 trace(),js 偶尔 trace
    annielong
    annielong
    Nov 16, 2020
    42
    log 有时候记录太多了,不好查,还是 print 简单明了
    weyou
    weyou
    Nov 16, 2020 via Android
    43
    同样经历 print->断点调试->print 的阶段,前两个阶段在学校完成的,工作以后就没再用过断点调试。另外 log 和 print,对于我来说这两者没有本质区别,没啥好争论的。
    Molita
    Molita
    Nov 16, 2020
    44
    用 python 话 用 pdb trace,挺好用的
    czdpzc
    czdpzc
    Nov 16, 2020
    45
    dcty
    dcty
    Nov 16, 2020
    46
    有时候一断点,bug 它就不出现了。
    onice
    onice
    Nov 16, 2020
    47
    我就是啊。
    wlfeng
    wlfeng
    Nov 16, 2020
    48
    一般本地开发用 debug,部署到服务器上就看 log,所以写代码的时候怎么打 log 也是很讲究的
    S0on
    S0on
    Nov 16, 2020
    49
    我
    northisland
    northisland
    Nov 16, 2020
    50
    不得已情况下,会这么干。。。

    经常是接手一块老功能,大概是 java 或 python 调 c++的动态库。。。

    写个类似的测试用例(输入正反序列化一下)的时间,可能改动都实现 8 回了。


    但是有条件还是 ide 香。
    Winrey
    Winrey
    Nov 16, 2020
    51
    我我我! [举手

    可以试试 Sentry 其实
    northisland
    northisland
    Nov 16, 2020
    52
    都是实现需求,print + LOG 硬莽,还是 ide 见招拆招,都差不多。
    sidegem
    sidegem
    Nov 16, 2020
    53
    比起 ide 的调试功能,我觉得 print 更好用点
    hikkikuma1991
    hikkikuma1991
    Nov 16, 2020
    54
    我。。。我都是写分布式程序的,几千台机器上调试除了看 log 没有别的好办法= =
    newmlp
    newmlp
    Nov 16, 2020
    55
    @Nich0la5 不都是一回事么
    Lawskiy
    Lawskiy
    Nov 16, 2020
    56
    debug ros node ? 我觉得还是 print 简单点🤦‍
    clf
    clf
    Nov 16, 2020
    57
    怎么方便怎么来。
    itskingname
    itskingname
    Nov 16, 2020
    58
    给你讲,我老师,在 macOS 上面安装 Windows,然后在 Windows 里面跑 Visual Studio 运行 VB,他调试的时候,用 dialogbox,用报警对话框来显示变量的值。比 print 可牛逼多了。[狗头]
    xloger
    xloger
    Nov 16, 2020
    59
    我我我,Android 开发,用 Debug 跑一次增量大概第一次三四分钟,之后一分钟吧,直接运行十秒不到,换你你选哪个...
    Deepseafish
    Deepseafish
    Nov 16, 2020❤️4
    60
    是时候祭出这张图了
    Rekkles
    Rekkles
    Nov 16, 2020
    61
    连 debug 都能区分优越感
    wangyzj
    wangyzj
    Nov 16, 2020
    62
    我!
    redtea
    redtea
    Nov 16, 2020
    63
    java 用 print 有性能问题,不知道 python 有没有。
    THESDZ
    THESDZ
    Nov 16, 2020
    64
    手段而已
    aneostart173
    aneostart173
    Nov 16, 2020
    65
    print 调试不可替代。
    faceRollingKB
    faceRollingKB
    Nov 16, 2020
    66
    不如调查一下,有多少人完全不用 print 或者 console.log ,不知道一只手能不能数的过来
    est
    est
    Nov 16, 2020
    68
    好像贴错了。反正记得有个问题是 python 的 print 带了 buffer,java 的没带。然后每次调用就很浪费。
    nuk
    nuk
    Nov 16, 2020
    69
    一般在 gdb 里 print,加 print 重新编译要太久太久,而且太多比较难复现。
    比如。。在很偶然的情况下。。我们自己实现的 map 的 hash 值居然会算错。
    vipppppp
    vipppppp
    Nov 16, 2020❤️1
    70
    代码有很多异步或者回调的时候,打断点也不一定比 print 来的有效
    goodboy95
    goodboy95
    Nov 16, 2020
    71
    单步调试用起来爽,但正式环境下还是要 print,不要问为什么不搞远程调试,问就是正式服要求高安全性。
    reus
    reus
    Nov 16, 2020 via Android
    72
    所有涉及超时的程序都不能打断点,只能靠打印信息,这是本质问题,工具再强大,也改变不了客观规律
    yolee599
    yolee599
    Nov 16, 2020
    73
    用自己写的 log 工具,可以自定义 level,可以用一句宏定义关闭
    crclz
    crclz
    Nov 16, 2020
    74
    我觉得两种都得会。
    crclz
    crclz
    Nov 16, 2020
    75
    Don't underestimate the value of printf().
    ---- stanford cs140 课程

    http://web.stanford.edu/~ouster/cgi-bin/cs140-spring20/pintos/pintos_10.html
    darknoll
    darknoll
    Nov 16, 2020❤️1
    76
    @zqx 说反了
    iFollow
    iFollow
    Nov 16, 2020 via Android
    77
    本人调驱动只会 printk ……
    paoqi2048
    paoqi2048
    Nov 16, 2020
    78
    我用 print 还有 log
    dbow
    dbow
    Nov 16, 2020
    79
    现在遇到的 bug, 都很奇特, 时有时无, 复现困难, 只能用 print
    killeder
    killeder
    Nov 16, 2020
    80
    嵌入式,printf 是最常用的调试手段
    DoUSeeMe
    DoUSeeMe
    Nov 16, 2020
    81
    🙋‍
    across
    across
    Nov 16, 2020
    82
    看到这种问题,我只觉得论坛平均技术水平断崖式下跌····

    你能想象电子行业的人出来问:还在人拿锤子修理机械么?
    Felldeadbird
    Felldeadbird
    Nov 16, 2020
    83
    一直用 print 啊。虽然知道有更好的工具。但是习惯了,很难改。

    其次,生产环境我一样 print 。 不过我会上一些参数来调试。不影响正常业务运作。
    iSecret
    iSecret
    Nov 16, 2020❤️1
    84
    不,我写的程序没有 BUG 。(狗
    6ufq0VLZn0DDkL80
    6ufq0VLZn0DDkL80
    Nov 16, 2020
    85
    内核和驱动调试不用 printk 怎么整,很麻烦的
    walsh
    walsh
    Nov 16, 2020
    86
    高手都是徒手看 dump(狗头)
    shpkng
    shpkng
    Nov 16, 2020
    87
    我
    acmore
    acmore
    Nov 16, 2020
    88
    Print 和 Debugger 都是工具和手段,怎么快怎么来,通过二分迭代 + Print 就能迅速定位的还要走单步调试就略显迂腐了,一般在 Context 比较庞大的情况下用 Debugger 效果才会更加显著。
    sr0miao
    sr0miao
    Nov 16, 2020
    89
    me
    lzyliangzheyu
    lzyliangzheyu
    Nov 16, 2020
    90
    上仿真器(逃
    sockpuppet9527
    sockpuppet9527
    Nov 16, 2020
    91
    我,除非没有 printf/dump 只能用 gdb :)
    SomeoneElseChild
    SomeoneElseChild
    Nov 16, 2020
    92
    单纯不想按 F9
    paloalto
    paloalto
    Nov 16, 2020❤️3
    93
    昨天,有俩个年轻同事来找我,说:马老师,线上网页打不开,发生甚末事了?
    我一看!哦,原来是线上环境有 bug 。
    传统 debug 讲究的是接化发,我“啪”就发出一串 print,很快啊!我全部防出去,防出去了啊。防出去以后,自然是,传统 debug,点到为止。
    这个 bug 不讲码德,来,骗,来,偷袭,我 30 多岁的,老码农。这好吗?这不好!
    我劝,这个 bug,耗子尾汁,好好反思。以后不要再犯这样的聪明,小聪明。
    编程开发,要以和为贵,要讲码德,不要搞,窝里斗。谢谢朋友们!
    lhx6538665
    lhx6538665
    Nov 16, 2020
    94
    递归 循环 这种断点已经很难用了
    鼠标移动事件 断点根本不能用
    一切需要精确时间的操作,使用断点就是错误的做法
    sampeng
    sampeng
    Nov 16, 2020
    95
    只有无奈的情况才单点。。。print 是最好的调试方式。。。。你单点调试一轮,我已经解三 bug 了
    Macv1994
    Macv1994
    Nov 16, 2020
    96
    前端 console.log()
    后端 print
    手动滑稽
    richzhu
    richzhu
    Nov 16, 2020
    97
    我
    VeryCB
    VeryCB
    Nov 16, 2020
    98
    我
    tu9oh0st
    tu9oh0st
    Nov 16, 2020
    99
    我
    ezleeinfo
    ezleeinfo
    Nov 16, 2020
    100
    你提这个问题有没有想过,用什么是解决什么问题的吗?解决问题就行了,没必要把程序员似的优越感弄出来。
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1295 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 169ms · UTC 20:08 · PVG 04:08 · LAX 12:08 · JFK 15:08
    ♥ Do have faith in what you're doing.