Python和Pycharm、Vscode使用技巧

前言

前两天在调试一个巨大的程序,跑起来都要几个小时,经过把训练集替换成测试集之后才快了一些,但是仍然有中途崩溃的问题。期间想了各种办法,并总结了这篇文章。

Debug是一门非常使用的技巧,一旦学会终身受益,而且这方面也很少有人去教我们。本文主要记录一些调试技巧

Pycharm Debug

hook 函数

my_hook_target_function_name = 'fun_to_hook'
hook_function_tmp_storage = eval(my_hook_target_function_name)
def _hook_target_function_replacement(*args):
    hook_function_tmp_storage(*args)
    # do your things
    print('hook method [' + my_hook_target_function_name + ']...')
exec(my_hook_target_function_name + '=_hook_target_function_replacement')

修改fun_to_hook并在_hook_target_function_replacement函数体内写hook之前或者之后的代码即可。在某些监视函数执行前的时机,例如查看当时的变量环境等可能会用到。

debug console

这个console使得我们可以在调试的时候和断点调试结合起来,debug栏有两个子栏,debugger可以查看变量,console可以输入一些动态执行的python代码,可以把上述的python hook代码输入其中,或者在输入程序报错之前的代码处打断点,不段调试函数的参数,从而无需重新运行整个程序,这对特大的python程序非常有意义。断点用于查看错误位置、console调试用于查看参数、函数错误。
在这里插入图片描述

console已知的问题
在debug console 里面输入的代码回车后跑起来如果时间过长,会出现下面的绿色>>>箭头,并且不再继续控制台输出,此时不是代表运行中途结束了,而是pycharm以为它结束了,实际上从未终止,按下回车后会继续执行的并输出所有刚刚隐藏起来的结果。
在这里插入图片描述

基于支持正则的文本编辑器批量修改

写代码的过程中我们常常需要把一部分代码迁移或者批量替换,虽然只是些文本,但是为了这个重新写一个py文件with open('file') as fre.findallre.subreplace实在太过冗余。其实直接在编辑器上修改就行了
在正则支持这一点和sublime、vscode是一样的
比如以下几个案例

把文本中的偶数和奇数分离

例如有以下文本 匹配[02468]

032154654132154612230125445310321546541321546122315465413012544531
0246424622024402464246224640244
31551315131553131551315131551315531
进阶,把奇数偶数交换

在这里插入图片描述
首先将偶数选中,拷贝保存到文件t_file里,并替换成t

tt3155135511tttttttt151315ttttt313155131ttttttttt315513ttttttt

然后正则选中想要替换的奇数,拷贝并替换成x

选中t,并粘贴x得内容

复制t_file里得内容,并将它粘贴到x上

应用场景:
适用于重复简单的修改类工作,例如将以下代码修改为GetX代码(散落分布在文件中的每一行)

// Navigator.pushNamed(context, "/image_preview", arguments: message);
// Navigator.pushNamed(context, "/video_play", arguments: message);
// Navigator.pushNamed(context, "/file_preview", arguments: message);
// Navigator.pushNamed(context, "/webview", arguments: param);
// Navigator.pushNamed(context, "/webview", arguments: param);
// Navigator.pushNamed(context, "/image_preview", arguments: tempMsg);
// Navigator.pushNamed(context, "/file_preview", arguments: tempMsg);
// Navigator.pushNamed(context, "/webview", arguments: param);
Get.toNamed("/image_preview", arguments: message);
Get.toNamed("/video_play", arguments: message);
Get.toNamed("/file_preview", arguments: message);
Get.toNamed("/webview", arguments: param);
Get.toNamed("/webview", arguments: param);
Get.toNamed("/image_preview", arguments: tempMsg);
Get.toNamed("/file_preview", arguments: tempMsg);
Get.toNamed("/webview", arguments: param);

或者用于把散落在每一行得模式1代码和模式2代码交换

后续探索

code-server 远程调试

如何使得code-server在远程调试的时候保持debug的状态?
例如在晚上11:30离开实验室的时候,需要搬走电脑,这时实验可能还没有跑完,debug状态需要保存。如果刷新网页,程序第二天debug的时候又要重新跑。如何让电脑关机的时候仍然能恢复debug的状态。为此,我开始对code-server各种测试。
根据以往使用推断,code-server断网重连能保持状态,刷新不行。猜测可能是因为会话的信息保存在浏览器里面。

为此我做了如下的实验测试:
我在21:04的时候虚拟机挂起,此时的变量环境为counter=10。21:16的时候查验,即已经断连了10分钟以上。
在这里插入图片描述
惊喜!变量仍然是保存的,继续断连半个小时,变量仍然是保存的
在这里插入图片描述

按着这个思路,我决定继续挂起,等到明天早上再查看这个程序的运行情况。
在这里插入图片描述

第二天早上检验。Word天!变量依然是保存的。

至于对特大程序vscode是否会采用另外一种策略还不得而知。

参考资料

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值