1.idea debug进入HashMap源码时传参不正确?
2.如何使用 pdb 来性感 debug 你的 Python 代码?
idea debug进入HashMap源码时传参不正确?
我测试了下面的代码:分别在这四个位置打了断点以监控程序的运行情况,debug后,进入第一次断点的位置为:
与题主说的情况一致,而没有进入我的第一个断点进行输出,而后F9:
发现还是在put文件,经多次F9之后,跌停板k线源码可以看出来,其实java的jvm在启动的时候,在底层也自行调用的put方法,将jvm所需要的一些动态库、jar包put到某个map之中,具体是哪个map看不出来。要等到jvm底层将所有东西准备好后,fioaio源码解析才进行main函数。
jvm准备需要put多少次我就不数了,现在我先把put的断点取消,让程序debug到我的第一个断点处:
这个时候将put方法打上断点,F9发现:
奇怪的key值增加了,它将我的classes编译目录丢进去了,继续F9,和上一步差不多,再再次F9,终于来了:
继续F9,终于到达了我的第二个断点:
继续F9,这次没有put奇怪的智能车闸源码东西了:
继续:
最后:
然后程序退出:
综上,jvm在启动的时候会在程序背后隐式地将一些配置啊什么的通过put方法放到某些地方,不用关心,你遇到的情况是正常的也是正确的
如何使用 pdb 来性感 debug 你的 Python 代码?
在编程世界里,我们总能遇到那些令人头疼的bug,它们时而出现,时而消失,就像是隐藏在迷雾中的幽灵,让人捉摸不透。今天,我们将深入探讨如何使用Python的内置调试工具pdb,让你的代码调试之旅更加性感,让你能够清晰地洞察代码的python爆破源码执行流程,理解变量的赋值和数据的变化,甚至在学习新库或新代码特性时,通过调试,更容易理解代码的逻辑。
让我们从一个简单的例子开始。设想一个方法,接收一个参数`name`并返回一个字符串。
在定义这个方法时,我们加入了一行代码来设置断点,这是Python内置的`breakpoint()`函数,你只需调用即可。接着执行这个代码文件。如何买卖源码
此时,你将看到程序的执行状态如下:
第一行:`>`后跟随断点位置,提示程序在此处暂停。
第二行:`->`表示当前执行到的位置,即断点处。
第三行:`(pdb)`,说明你可以使用pdb工具的调试命令。
如果对pdb命令不熟悉,可以通过`help()`命令获取帮助。常用的pdb命令包括:
1、`p + 参数`:查看参数的值。
2、`n`:单步跳过。
3、`s`:单步进入。
4、`c`:继续执行。
5、`w`:显示上下文信息。
6、`a`:查看函数的参数列表。
7、`ll`:列出当前的源码。
8、`b`:设置断点。
9、`q`:退出debug。
比如想知道参数`name`的值,只需使用`p name`命令即可。
使用`w`命令查看上下文信息。
执行命令`n`进行单步跳过。
`c`命令继续执行。
在调试过程中,你还可以修改参数的值,比如将`name`改为`sb`。
使用`ll`命令列出当前源码。
在Python3.8及以上版本中,可以使用`breakpoint()`函数设置断点。但在Python3.7以下版本,需要自行导入pdb模块,并使用`pdb.set_trace()`来设置断点。
此外,使用pdb命令执行代码时,可以不设置断点,直接从第一行开始执行。在使用vim编辑器时,结合repl插件和ipdb插件,可以实现更高效的调试体验。
总之,pdb是Python程序员的利器,它不仅帮助你定位并解决bug,还能加深对代码逻辑的理解。通过熟练掌握这些技巧,你的代码调试之旅将变得更加高效和愉快。记住,debug不只是找到问题,更是提升理解代码、优化逻辑的过程。希望这些信息能帮助你在Python编程的道路上走得更远,我们下次再见,记得要持续学习和实践哦!