免费做微信链接的网站吗,杭州做网站需要多少钱,网站建设技能,白银市住房与建设局网站Python 代码插桩方法 文章目录 Python 代码插桩方法什么是插桩技术#xff1f;使用插桩调试python插桩的一种实现方法 什么是插桩技术#xff1f;
插桩技术是指在保持原有程序逻辑完整性的基础上#xff0c;在程序中加入探针#xff0c;通过探针来收集代码在执行过程中的信…Python 代码插桩方法 文章目录 Python 代码插桩方法什么是插桩技术使用插桩调试python插桩的一种实现方法 什么是插桩技术
插桩技术是指在保持原有程序逻辑完整性的基础上在程序中加入探针通过探针来收集代码在执行过程中的信息函数参数返回值、变量变化信息、函数调用顺序等等。插桩技术在调试代码的过程中也非常实用。通常实现方法是在特定位置插入代码段从而收集程序运行时的动态上下文信息。
使用插桩调试
使用插桩技术调试程序可以有效的查看程序执行过程并发现代码的逻辑错误如果代码存在语法错误编译器会报告该类错误。逻辑错误往往难以发现只是运行结果存在问题但是程序可以正常运行。
例如最近在写迪杰斯特拉算法和双向迪杰斯特拉算法两种方法都使用python实现都能正常运行。一开始单次运行两者给出的最短路径都是一样的以为应该没什么问题所以写了个测试片段两个程序执行500次看一下效率然后就发现这500次里总有些时候双向迪杰斯特拉和迪杰斯特拉算法的路径不一致而且迪杰斯特拉算法的效果更好故疯狂找原因。这时候就想到了插桩技术
python插桩的一种实现方法
简单地说就是在某些想要输出变量或者函数调用过程的位置插入一些代码片段。 print_log open(./logfile.txt, a, encodingutf-8) # 打开一个txt文件作为输出print(datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S), fileprint_log)print(var1:, var1, function1:, function1, fileprint_log)print(condition1:, condition1, fileprint_log)这个框架是这样的利用print函数将程序运行中的信息输出到txt文件中。
import time
def dijkstra(graph, start, target):print_log open(./logfile.txt, a, encodingutf-8) # 打开一个txt文件作为输出print(datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S), fileprint_log)print(\n, fileprint_log)if condition is Trueprint(condition:, condition, fileprint_log)...var1 ?var2 ?print(var1, var1, var2, var2, fileprint_log)...return pathdef main():print_log open(./logfile.txt, a, encodingutf-8)print(datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S), fileprint_log)print(\n, fileprint_log)print(graph:, graph, start:, start, target:, target, fileprint_log)dijs_path dijkstra(graph, start, target)print(result:, dijs_path)