Python3调试实现
一、说明
在上家公司第一次听说”交叉编译“,但开发机环境配置一直没成功,后来也就不了了之了,所以一直不太懂”交叉编译“具体实现上是怎么个形式。
Python在Windows上和Linux上是有些差别的,在Windows上运行得好的程序在Linux上不一定没有问题,而在Windows开发好代码再传到Linux上运行、配合print()函数进行调试是一件很麻烦的事。
这次就来研究一下Python远程调试如何实现,顺便理解gdb等远程调试的形式。为了方便索性将其他一些调试形式全记录在这里。
二、Windows图形界面IDE调试
当使用PyCharm等IDE进行调试时,直接使用在文件上右键,然后选择Debug ‘xxx’即可。这就不多说了。
可以看到PyCharm使用的是pydevd
三、Linux命令行调试实现
在命令行模式下,我们可以在程序中使用pdb.set_trace()实现类似下断点的操作,然后使用pdb运行程序在其交互shell中使用命令实现单步步过等调试操作。
(其实就观察来看,直接使用"python test.py"运行,当发现文件中有pdb.set_trace()时一样会以调试模式运行;这两者有一些感觉有一些还不是很确定的小差别,反正一种用着有毛病就换另一种。)
可在交互shell中使用“help”查看pdb支持的所有命令,可以使用“help command”进一下查看具体命令的作用。还可以直接查看官方文档。几个常用的命令如下:
s(tep)--单步步入
n(ext)--单步步过
c(ont(inue))--执行到下一断点处
l(ist)--打印当前语句上下文
p expression--打印变量值
q(uit)--退出
exit--退出
四、Windows+Linux远程开发调试实现
我们首先要明确,远程开发一定是将本地项目、传到远程机器、使用远程上的解析器执行。
所以我们要做的事,一是要实现将本地项目上传到远程机器,二是将远程机器上的解析器信息(如安装了哪些库)和程序执行输出等下载回本地。
一方面这些工作通过sftp等统一的一个协议就可以实现,另一方面在配置远程解析器时必需要设置远程解析器,所以整个工作在操作上就可归结为配置一个远程解析器一件事情。
前置条件:本地机器IDE需要是商业版本社区版不提供远程开发支持;远程机器开启ssh服务、确认用户可ssh、安装好python等。
第一步:打开要在远程机器上调试的项目。或者新建一个项目先随便选一个本地的解析器作为项目解析器。
第二步:通过菜单--setting,或者Ctrl+Alt+s快捷键呼出项目配置面板。
第三步:切换到Project--Project Interpreter,按如下操作添加远程解析器。
左侧切换到SSH Interpreter选项卡,右侧填好自己远程机器的ssh信息。
设置好ssh凭证,可以是密码和密钥两种形式。我这里为了简便直接使用密码形式。
Interpreter----要使用的远程机器python解析器所在路径。默认是/usr/bin/python,可以改成自己安装的。
Execute code using .. sudo----使用sudo执行python命令。如果远程机器sudo需要输入密码那这种方式不好使。
Sync folders----项目上传到的文件夹。
Automatically upload ... ----每次运行程序前,如果文件有变更,则自动将文件同步到远程机器。强烈建议勾选。
执行结果如下,本地项目成功上传到远程机器上,并能正常运行、调试。
参考: