你初学编程的时候是怎么提高自己的Debug能力的?
你初学编程的时候是怎么提高自己的Debug能力的?
-----
网友解答:
-----
作为一名IT行业的从业人员,也是一名老程序员。现在主要在从事产品研发及项目管理工作,所以我来探讨一下这个问题。
什么是Bug
Bug一词的英文翻译为“臭虫子”或“虫子”。但是现在,我们认为是在电脑系统或者程序中,隐藏着一些未被发现的缺陷或漏洞问题,称之为Bug。
什么是Debug
Debug是排除故障、排除问题的意思。
怎么提高自己的Debug能力的?
首先,良好的编码习惯和逻辑思维能力,对Bug有预见判断的能力。
作为程序员,应该有一个良好的编程习惯,不仅需要有良好的编码格式、命名规范,更为需要的是对于业务逻辑,实现时有良好的架构结构、数据结构、业务结构、程序安全等等方面的考虑。
其次,问题错误定位能力。
对于已发生的问题或bug进行分析、日志分析、业务逻辑分析、数据分析等等,对问题或bug进行初步定位。问题初步定位之后,在相关的程序节点进行输出或日志处理,不断的对问题进行跟踪和处理。
最后,对发生的Bug有感知能力。
当一个Bug出现的时候,优秀的程序员能根据Bug发生的前提和Bug发生的时间点、程序中的位置,很好的感知到Bug可能发生在哪一个函数或者哪几个函数中。
这些方法做着做着就习惯了或“不断能成功解决出现的问题或bug”,谈不上坚持,最终成了喜欢的自己。
-----
网友解答:
-----
Debug的十八重境界:
第一重:Debug应用程序,需要源代码,依赖集成开发环境(IDE)下断点来调试。
第二重:Debug应用程序,需要源代码,只需要调试器下断点,即可调试。
第三重:Debug应用程序,需要源代码,不需要调试器,打Trace来调试。
第四重:Debug应用程序,只用肉眼浏览源代码,便可定位Bug、并做修复。
第五重:Debug应用程序,不需要源代码,但是需要崩溃转储文件,依赖调试器来调试。
第六重:Debug应用程序,不需要源代码,不需要转储文件,不需要调试器,只通过问题症状,便可定位Bug。
第七重:在第六重的基础上,开发热补丁。
第八重:Debug内核态程序,需要源代码,打Trace来调试。
第九重:Debug内核态程序,需要源代码,使用调试器来调试。
第十重:Debug内核态程序,用肉眼浏览源代码,便可定位Bug、并做修复。
第十一重:Debug内核态程序,不需要源代码,但是需要崩溃转储文件,依赖调试器来调试。
第十二重:Debug内核态程序,不需要源代码,不需要转储文件,不需要调试器,只通过问题症状,便可定位Bug。
第十三重:Debug BIOSBootload程序,需要源代码,利用超级终端来打Trace调试。
第十四重:Debug BIOSBootload程序,需要源代码,使用JTAG+超级终端或者MultiICE来调试。
第十五重:Debug BIOSBootload程序,需要源代码,只用肉眼浏览源代码,便可定位Bug、并做修复。
第十六重:Debug BIOSBootload程序,不需要源代码,使用JTAG+超级终端或者MultiICE来调试。
第十七重:使用逆向分析工具,进行逆向工程,定位Bug,并作补丁修复
第十八重:自行开发逆向分析工具,定位Bug,并作补丁修复
自行对照,看看达到第几重境界。
此外在前七重,根据鄙视链,还分成好几级:
COM+DCOM组件调试 > COM组件调试 > EJB调试 > 云原生调试 > DLL.a调试 > 桌面可执行程序调试 > Web调试 ……
-----
网友解答:
-----
1.尽量写更细粒度的函数,按照功能划分,对每个函数进行debug,如果逻辑复杂就需要通过单元测试来定位问题,列举出所有边界情况,进行一一测试
2.如果想知道运行时各变量变化情况,则需要使用断点调试功能,一般用idea自带的断点调试或者使用gdb
3.肉眼debug也是相当需要的,能肉眼看出的问题就不要浪费时间去做1.2步骤
-----
网友解答:
-----
良好的编码格式规范和逻辑实现结构
善于打印log或者使用相关工具
敢于猜测,多打断点
-----
网友解答:
-----
首先理解代码的逻辑,具体这块是为了做什么?有什么目的。
灵活使用优秀的开发工具,通过开发工具可以让你更好地掌控代码,毕竟运行起来,具体哪里出错了,为什么没有按照自己的逻辑走,前一行还是a,怎么运行了这一行变成了b,都可以用过开发工具的debug,来梳理。
单步执行,跳步执行,这些debug的技巧一定要掌握。
只要脑子不乱,配合开发工具的debug,写代码没那么难。
-----
网友解答:
-----
设置断点 每个语义排查
-----
网友解答:
-----
我做的是编程底层,写单片机程序。在调试功能或者查找Bug的时候,Debug功能简直就是神器,可以让你看到单片机是如何一步步执行程序的,变量值和当前的寄存器值都可以通过窗口看到。配合断点的使用,调试起来非常方便,很容易找到代码的问题所在。
对于比较主流的单片机,如ST、NXP、Microchip、MSP等,都有专用的IDE,如KEIL和IAR等。这两款软件都易上手、直观、人性化。以IAR为例,和大家分享一下Debug方法。
1.编译并Download程序
程序编译没有问题后,可以通过Projcet-->DownLoad and Debug下载运行或者通过快捷键Ctrl+D。如下图。
2.设置断点
程序在全速执行时,碰到断点就会停下来,所以在需要调试的地方设置一个断点可以让程序停下来方便观察变量或者寄存器的状态。只需要在代码编辑区左侧鼠标左键点击一下就可以。如下图。
程序运行到断点的位置后,可以进行单步调试,程序就可以一步步的执行,我们可以很方便的观察到程序的执行顺序。
3.观察窗
将鼠标停留在变量上,可以观察此时的变量值,但是不直观。IDE一般都有Watch Window,还是实时观察窗。
可以将全局变量添加到观察窗里观察变量值。普通的观察窗只有在程序停止时才能刷新变量值;而实时观察窗可以实时的显示变量值。
4.观察Memory存储区
Debug时,还可以查看单片机的存储区,在调试Flash和Bootloader时非常实用,如下图所示。
Debug可以让我们看到单片机是如何执行的,可以帮助我们检查逻辑的严谨性,调试代码非常好用。
想要获得更多关于单片机、电子电路的知识,关注我吧。
-----
网友解答:
-----
1.找到适合开发的工具 java推荐idea
2.在合适的地方设置断点,以便于你单步执行代码。观察变量,输出值等
需要明白:
step into:step into会跟进函数里面,如果你调用了库函数,一般就别跟进了,自己写的函数最好step into看一看,包括参数传递等整个过程就在眼前——如果传址搞成了传值
step out:会执行完当前函数的剩余部分、在返回后的第一条指令处停下。确认一个函数没问题时,你就可以step out然后检查下一个了
step over:step over和setp into相反,它不会跟到某个函数里面,而是直接取得当前行的执行结果、在下一行停住。
3.熟能生巧,多做多调试。
-----
网友解答:
-----
对我来说,debug很像破案,需要去思考结果或报错,然后通过结果去判断,是哪出的问题。
最开始我就是一步一步的打System.out.print去看每一行代码处理的问题是不是对的。
后来我就选择性的在关键位置打System.out.print。
后来我才用的开发工具的debug。
提高自己的Debug能力方式:
1.我认为提高首先的要读懂关键的错误信息。
2.对业务要很清楚,通过数据去判断关键点,然后通过数据对比或校验去排除。
3.比如说一个数据,多数据库到后端处理在到前端,首先要确保的是数据库读出来的时候sql是不是没有问题,这个时候可以拿出sql语句在工具中查询对比,然后在后端到前端的最后一层看下数据给前端了,是不是有问题的,然后是前端处理是不是有问题,一步一步去把范围确定了。
4.多改bug,多写代码,自然就可以提高了,因为有些问题是常识性问题导致的bug,需要有经验,一眼就可以看出来 了。
-----
网友解答:
-----
初学的语言是php,进行代码debug也是逐步提升的
1.打开php的erorr_report配置,log_errors = On
2.使用echo、var_dump 、print_r等方法在需要调试地方进行打印输出,通过输出特定变量的值可以判断程序执行是否正确。
3.再后来利用框架自身的debug功能,
4.然后是IDE自带的debug模块结合xdebug;
5.日志分析log4php,php慢日志等
6.最后是对进程,抓包等处理
-----
网友解答:
-----
怀疑假设,测试直觉,在自以为是的地方下断点,看看数据流是否与颅内模拟一致。
------------------
推荐阅读:
上一篇:闺蜜俩儿子8岁4岁,喜欢带来我家玩儿,太闹腾了该怎么拒绝?
下一篇: 金陵十二钗正册都有谁?