V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wangkangluo1
V2EX  ›  程序员

来来来 调试重于开发 摆摆大家常用的的调试技巧

  •  
  •   wangkangluo1 · 2012-07-18 17:36:38 +08:00 · 4799 次点击
    这是一个创建于 4506 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一直认为调试技术nb了 开发业自然就变得很顺畅
    自己是做linux c/c++开发的 把一些用到的调试技巧什么的分享一下 望高手们跟帖指教
    http://www.cnblogs.com/wangkangluo1/archive/2012/07/16/2593172.html
    23 条回复    1970-01-01 08:00:00 +08:00
    guotie
        1
    guotie  
       2012-07-18 17:38:21 +08:00
    gdb
    jamiesun
        2
    jamiesun  
       2012-07-24 20:40:22 +08:00
    print
    yelusiku
        3
    yelusiku  
       2012-07-24 22:05:53 +08:00
    楼主的博客要密码?
    sampeng
        4
    sampeng  
       2012-07-24 22:46:05 +08:00
    print解决99%的问题。debug日志位来解决运行时的潜在bug。。
    sampeng
        5
    sampeng  
       2012-07-24 22:46:32 +08:00
    @guotie 原来也喜欢用gdb。。感觉太大了。。一个print就搓搓有余
    sampeng
        6
    sampeng  
       2012-07-24 22:46:49 +08:00   ❤️ 1
    楼主丢个要密码的博客。。让我们情何以堪。。。
    xuwenhao
        7
    xuwenhao  
       2012-07-24 22:57:32 +08:00
    基本不调试,靠test case和log解决问题
    fly2never
        8
    fly2never  
       2012-07-24 23:09:04 +08:00
    @xuwenhao 佩服
    loading
        9
    loading  
       2012-07-25 09:33:50 +08:00
    print
    soulhacker
        10
    soulhacker  
       2012-07-25 10:53:20 +08:00
    调试重于开发是个什么理论呀……
    aa88kk
        11
    aa88kk  
       2012-07-25 12:00:24 +08:00
    很多年前国内有这么一说,程序是调试出来的。因为那时候软件开发还很落后,基本没有写测试用例的习惯,所以调试要比现在重要。看过一篇国外的一篇技术文章,作者采访了几位知名的技术大牛,发现他们找错通常也是print先。
    wangkangluo1
        12
    wangkangluo1  
    OP
       2012-07-25 15:52:05 +08:00
    @sampeng 由于涉及到sony内部一些资料,暂时只能加密,有时间修改后再放出
    wangkangluo1
        13
    wangkangluo1  
    OP
       2012-07-25 16:04:52 +08:00
    @guotie 项目一大 ,性能要求高,gdb就派不上用场了
    wangkangluo1
        14
    wangkangluo1  
    OP
       2012-07-25 16:05:30 +08:00
    @jamiesun 你都不知道逻辑,原始代码都没有printf输出,如何加printf?
    fly2never
        15
    fly2never  
       2012-07-25 17:07:24 +08:00
    @wangkangluo1 那就把链接删掉吧,每个看帖子的人点击一遍结果看不了,这不是浪费大家时间么
    bananaPig
        16
    bananaPig  
       2012-07-25 17:10:54 +08:00
    幼稚
    xuwenhao
        17
    xuwenhao  
       2012-07-26 12:02:06 +08:00
    @fly2never 不太会调试,而且如果是分布式程序的话也没办法调试,现在唯一调试类的工作是用Profiler定位性能问题和Memory Leak,功能性问题没有什么调试的必要了
    jamiesun
        18
    jamiesun  
       2012-07-26 21:13:05 +08:00
    对于有异常处理支持的语言,尽可能的利用异常是比较好的,举个python的例子吧,比如string.index 找不到就抛异常,比如大多数时候字典 dict[key]就比dict.get(key)更有用,让异常更早的把问题暴露出来,而不是隐藏掉,使用断言 assert 这些远比GDB有用,gdb会造成强迫症,一点小小的东西就gdb。

    print,logging,assert使用多了,你甚至直接猜到问题所在了。

    c比较特殊,缺少一些流行高级语言的特性,比较痛苦。

    尽可能的做到更严谨,减少不必要的调试。
    darklowly
        19
    darklowly  
       2012-07-26 21:53:12 +08:00
    @wangkangluo1 你都不知道逻辑,原始代码都没有printf输出,如何加printf?------>这种工作,在开发中,一般不会发生,有点类似于逆向的工作。
    darklowly
        20
    darklowly  
       2012-07-26 22:00:57 +08:00
    @aa88kk
    @jamiesun
    正解

    好的coder可以在开发的时候直接避免很多bug,开发完以后一般只会出现少量的一些容易被忽略的bug,还有一个重点就是调试不能太多的提高代码质量, 还是在编码阶段,好好的编码才能提高。

    一直都反对软件是调试出来的这一说法,个人感觉那是不负责任的程序员.或者是技艺不够的程序员或者是自我感觉良好,但是不是好的coder的人,堆出代码出问题了,找错的理由.代码出问题是正常的,出太多问题了,就不太正常了.
    myrual
        21
    myrual  
       2012-07-27 10:00:45 +08:00
    直白的说,这仅仅表明设计和实现能力很差。
    以我过去10年与单片机和各种嵌入式设备打交道的经验来说,最忌讳写1000行代码,然后写到设备上看效果,发现有问题再debug。
    合理的方案是多次迭代,写50行代码,验证一下,再50行,再验证。 随着越来越多的代码得到验证,对于进度的预期也越来越准确。
    dreampuf
        22
    dreampuf  
       2012-07-27 11:10:45 +08:00
    1. 单步调试没法复用,不保值
    2. 单步调试比设置Log的要求更低,更容易发生在不理解的情况下的修改
    3. 非本机错误,很难(带价很高)调试
    uniy
        23
    uniy  
       2012-07-27 12:29:46 +08:00
    调试真的很重要
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1407 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:48 · PVG 07:48 · LAX 15:48 · JFK 18:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.