首页 > 后端开发 > 正文

如何用pdb进行python调试?

2024-01-10 14:08:44 | 我爱编程网

我爱编程网小编给大家带来了如何用pdb进行python调试?相关文章,一起来看一下吧。

本文目录一览:

如何用pdb进行python调试?

如何用pdb进行python调试?

本文章讲述了如何用pdb进行python调试讲解.当手边没有IDE,面对着python调试犯愁时,你就可以参考下本文;(pdb命令调试)和(pdb)help用pdb进行python调试,用法基本和gdb差不多,先看一个简单的例子:epdb1.py.#epdb1.py--experimentwiththePythondebugger,pdba=\"aaa\"b=\"bbb\"c=\"ccc\"final=a+b+cprintfinal比如要对这个程序进行调试:1:在文件前面加上这一句,引入调试的模块。importpdb2:在要开始调试的一行加上pdb.set_trace()文件变成:#epdb1.py--experimentwiththePythondebugger,pdbimportpdba=\"aaa\"pdb.set_trace()b=\"bbb\"c=\"ccc\"final=a+b+cprintfinal可以运行这个程序,到断点出会停下来,和gdb类似,可以执行命令:直接回车是重复前一条命令!p(print)查看一个变量值n(next)下一步s(step)单步,可进入函数c(continue)继续前进l(list)看源代码用pdb调试有多种方式可选:1.命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一行之前python-mpdbmyscript.py2.在Python交互环境中启用调试>>>importpdb>>>importmymodule>>>pdb.run('mymodule.test()')3.比较常用的,就是在程序中间插入一段程序,相对于在一般IDE里面打上断点然后启动debug,不过这种方式是hardcode的if__name__==\"__main__\":a=1importpdbpdb.set_trace()b=2c=a+bprint(c)然后正常运行脚本,到了pdb.set_trace()那就会定下来,就可以看到调试的提示符(Pdb)了常用的调试命令h(elp),会打印当前版本Pdb可用的命令,如果要查询某个命令,可以输入h[command],例如:\"hl\"-查看list命令l(ist),可以列出当前将要运行的代码块(Pdb)l497pdb.set_trace()498base_data={}499new_data={}500try:501execfile(base_file_name,{},base_data)502->execfile(new_file_name,{},new_data)503except:504logger.writeLog(\"error!loadresultlogerror!\")505print\"loadcmplogserror!\"506raiseException,\"loadcmplogserror!\"507>断点设置(Pdb)b10#断点设置在本py的第10行或(Pdb)bots.py:20#断点设置到ots.py第20行删除断点(Pdb)b#查看断点编号(Pdb)cl2#删除第2个断点>运行(Pdb)n#单步运行(Pdb)s#细点运行也就是会下到,方法(Pdb)c#跳到下个断点>查看(Pdb)pparam#查看当前变量值(Pdb)l#查看运行到某处代码(Pdb)a#查看全部栈内变量b(reak),设置断点,例如\"b77″,就是在当前脚本的77行打上断点,还能输入函数名作为参数,断点就打到具体的函数入口,如果只敲b,会显示现有的全部断点(Pdb)b504Breakpoint4at/home/jchen/regression/regressionLogCMP.py:504conditionbpnumber[condition],设置条件断点,下面语句就是对第4个断点加上条件\"a==3\"(Pdb)condition4a==3(Pdb)bNumTypeDispEnbWhere4breakpointkeepyesat/home/jchen/regression/regressionLogCMP.py:504stoponlyifa==3cl(ear),如果后面带有参数,就是清除指定的断点(我在Python2.4上从来没成功过!!!);如果不带参数就是清除所有的断点(Pdb)clClearallbreaks?ydisable/enable,禁用/激活断点(Pdb)disable3(Pdb)bNumTypeDispEnbWhere3breakpointkeepnoat/home/jchen/regression/regressionLogCMP.py:505n(ext),让程序运行下一行,如果当前语句有一个函数调用,用n是不会进入被调用的函数体中的s(tep),跟n相似,但是如果当前有一个函数调用,那么s会进入被调用的函数体中c(ont(inue)),让程序正常运行,直到遇到断点j(ump),让程序跳转到指定的行数(Pdb)j497>/home/jchen/regression/regressionLogCMP.py(497)compareLog()->pdb.set_trace()a(rgs),打印当前函数的参数(Pdb)a_logger=_base=./base/MRM-8137.log_new=./new/MRM-8137.log_caseid=5550001_toStepNum=10_cmpMap={'_bcmpbinarylog':'True','_bcmpLog':'True','_bcmpresp':'True'}p,最有用的命令之一,打印某个变量(Pdb)p_newu'./new/MRM-8137.log'!,感叹号后面跟着语句,可以直接改变某个变量q(uit),退出调试==============================================================================================在python中使用pdb模块可以进行调试importpdbpdb.set_trace()也可以使用python-mpdbmysqcript.py这样的方式(Pdb)会自动停在第一行,等待调试,这时你可以看看帮助(Pdb)h说明下这几个关键命令>断点设置(Pdb)b10#断点设置在本py的第10行或(Pdb)bots.py:20#断点设置到ots.py第20行删除断点(Pdb)b#查看断点编号(Pdb)cl2#删除第2个断点>运行(Pdb)n#单步运行(Pdb)s#细点运行也就是会下到,方法(Pdb)c#跳到下个断点>查看(Pdb)pparam#查看当前变量值(Pdb)l#查看运行到某处代码(Pdb)a#查看全部栈内变量(Pdb)w列出目前callstack中的所在层。(Pdb)d在callstack中往下移一层(Pdb)u在callstack中往上移一层。如果在上移一层之后按下n,则会在上移之后的一层执行下一个叙述,之前的functioncall就自动返回。(Pdb)cl清除指定的断点。如果没有带参数,则清除所有断点。(Pdb)disable取消所有断点的功能,但仍然保留这些断点。(Pdb)enable恢复断点的功能。(Pdb)ignore设定断点的忽略次数。如果没指定count,其初始为0。当count为0时,断点会正常动作。若有指定count,则每次执行到该中断,count就少1,直到count数为0。(Pdb)conditionbpnumber[condition](Pdb)j(ump)lineNo.跳到某行执行。只有在callstack的最底部才能作用。(Pdb)l列出目前所在档案中的位置。连续地l命令会一直列到档案结尾,可以使用指定行数或范围来打印。(Pdb)pp和p命令类似,但是使用pprintmodule(没用过pprint,详情请参考PythonLibraryReference)。(Pdb)alias以一个\"别名\"代替\"一群除错命令\n

如何用pdb进行python调试?

Python中怎么调用C代码?Python中调用C代码方法

Python是一门较为简单的编程语言,如今很多小学都已经开始教授python了,可见它的热度之高。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。而如果你是零基础想要自学Python的话,那么就建议你进行专业系统的视频课程学习!为帮助广大Python学习爱好者提升,精选到了几套专业优质的Python自学视频课程,学习就可以掌握Python编程技巧以及第三方库使用方法~

Python中调用C代码方法:

1.这节课学习在Python里面如何去调用C的代码,这种需求实际上是有很多的,Python的代码它的运行效率不是很高,有的时候要去用Python去实现一个功能的时候,可能会把这个功能里面的某一部分拿出来,我爱编程网

用C语言去实现,这样就会提高效率,然后在Python里面去调用这段代码。

2.调用C的程序的方法有几种,今天要给大家去讲的是其中一种比较简单的方法,假如有一个C的程序叫做add.c,这是一个C的代码,写【add函数】,这个函数它接受两个int的参数,

然后它会有return返回x+y的值,

3.如果要去在Python里面去调用C,不可能直接去调用这个C的文件,需要把这个C的文件去进行编译,把它给编译成动态链接库。

4.如果是在Linux的环境下,可以通过gcc去做,通过gcc-c然后-fpic,后面跟上源文件,就通过这个gcc-shared,然后-o去编译成libadd.so,有了这个文件以后,就可以在Python里面去调用它。

5.怎么去调用,要去【importctypes】,这个库可以去做跟和C有关的交互,通过ctypes里面的这个CDLL,这个CDLL就是C语言的动态链接库link的ibrary,去指定这个动态链接库的文件的位置,

有了这样的一个动态链接库以后,就可以直接去调用这个库里面的add函数。

6.如果通过add_lib.add,它就会返回Func,一个函数,就可以去把这个add当成一个函数去用,在这个Python里面直接add(1,2),就会打印出来这个3。

以上就是关于“Python中怎么调用C代码?Python中调用C代码方法”的相关内容分享了,希望对于你的Python学习有所帮助!很多小伙伴问:Python怎么学?其实Python掌握是需要阶段性的学习的,学习Python零基础功能-Python编程技巧-Python核心原理分析循序渐进方可学会!所以,想学Python,但是无从下手,就来羽兔,点击链接:

如何用pdb进行python调试?

在c++里面嵌入python应该怎么调试

Python容易扩展和嵌入。Python提供的许多标准模块支持C或者C++接口。Python和C可以一起工作,它可以嵌入到C或者C++的应用程序当中,因此可用Python语言为应用程序提供脚本接口,由于支持跨语言开发。

可用Python设计概念化应用程序,并逐步移植到C,使用前不必用C重写应用程序。(Jython使Python可以和Java一起工作,使开发者可以在Python里面调Java的包,也可以在Java里面使用Python的对象。还有更妙的,由于Jython的解释器完全用Java编写,因此可以在支持Java的任何平台上部署Python程序,甚至WEB浏览器也可以直接运行Python脚本。)

提出问题在某个C++应用程序中,我们用一组插件来实现一些具有统一接口的功能,我们使用Python来代替动态链接库形式的插件,这样可以方便地根据需求的变化改写脚本代码,而不是必须重新编译链接二进制的动态链接库。Python强大的功能足以胜任,但是有一些操作系统特定的功能需要用C++来实现,再由Python调用。所以,最基础地,我们需要做到:

1. 把Python嵌入到C++应用程序中,在C++程序中调用Python函数和获得变量的值;

2. 用C++为Python编写扩展模块(动态链接库),在Python程序中调用C++开发的扩展功能函数。

以上就是我爱编程网小编给大家带来的如何用pdb进行python调试?,希望能对大家有所帮助。
与“如何用pdb进行python调试?”相关推荐