多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

如何调试正在运行的Python程序

如何调试正在运行的Python程序 对当前正在运行的程序执行调试操作的办法, 主要涵盖以下几个层面, 一方面是借助于程序内置的调试器pdb这个工具, 另一方面是使用集成开发环境本身所附带的用来进行调试的相关功能模块, 再就是通过在代码中间插入用于记录状态的日志信息, 最后还可以启用外部的专用调试设施比如VS Code这样的平台来配合工作在以上提及的这些各类技术手段里面, 依托系统自带的pdb调试器来进行问题排查, 被广泛认为是一种既具备极高实用性又充满灵活性的解决方案。咱们来使用一下那个内置的调试器, 也就是pdb。这个自带的调试器提供了非常强大的调试功能。这些功能包括了设置断点, 还有单步执行, 也包括检查变量, 当然还涵盖了调用栈。只要你在代码当中插入 pdb. () 这样的语句就行。这么一来, 程序就会暂停它的执行过程, 从而进入那种调试的模式里面。这样的话就可以进行逐步的这个调试。在这篇文章里面, 大家会看到关于这些方法的一个非常详细的介绍, 这样做就是希望能够帮助各位朋友把程序调试的工作给做好。一、通过使用内置的调试器, 也就是名为pdb的这个工具。1. 请用户进行断点的设置。在调试这个工作过程之中, 断点是一个非常重要的工具。它允许我们在程序的执行暂停在特意的某一行上。我们通过在代码里面插入 pdb; pdb. 这样的内容, 可以设置好断点。当程序执行到这一行代码的时候, 它就会暂停下来, 然后进入到调试的模式去进行后续的处理。import pdbdef test_function():x 10y 20pdb.set_trace() # 设置断点z x yprint(z)test_function()2. 单步执行当您进入到了调试模式这个状态以后, 就可以通过运用下面这些具体的命令操作方式来进行一个一个步骤地执行下去的工作了。3. 对当前的参数情况进行核对工作。现在处于调试模式下面。人们可以使用p这个命令去打印变量的值。这样做的目的是为了检查程序的状态。举个例子:p x # 打印变量x的值4. 调用栈通过执行w这一命令, 我们能够查看到当前的调用栈信息, 进而有助于对问题所在进行定位。二、你可以直接使用那个集成开发环境, 也就是IDE, 它自己自带有的调试工具来进行操作。1.它是一款功能非常强大的集成开发环境, 提供了非常多、丰富的调试功能。通过执行下面提到的这些步骤, 就可以使用这个调试工具程序来进行操作:2. Code (VS Code)大家现在也经常会用到 VS Code 这个代码编辑器, 它的人气也是非常高, 因为它同时也提供了功能特别强大的调试能力, 要是想通过这种方式去对程序进行相关的调试操作的话, 那么按照下面的这些具体步骤去做就可以了:三、插入日志1. 使用模块插入日志这种东西, 说白了就是一种特别简单、又特别有效的用来调试办法的。它这个做法是记录一下咱们那个程序到底是怎么执行的这么一个过程, 通过这么一记, 就能帮我们把到底是哪儿出现的问题给给定位出来。然后这里面它是提供了一个叫内置的那一套模块给你用的, 所以说用起来那叫一个方便。import logginglogging.basicConfig(levellogging.DEBUG)def test_function():x 10y 20logging.debug(fx{x}, y{y})z x ylogging.debug(fz{z})print(z)test_function()2. 不同级别的日志那个模块里面提供了不一样级别的日志, 这么一来就可以帮我们根据需要去记录那些不同重要性的信息。合理地使用这些日志级别, 可以让大家更清楚地看清程序的运行状况, 并且找到问题所在。四、使用外部调试工具1.它不光会提供那种整合到一起的调试功能, 还能和远程调试放到一起用。比如说, 那些在远程的服务器上跑着的程序, 你可以通过进行配置远程调试点方式, 来很方便地完成调试工作。它这样做的话, 就能让大家用起来省事得多。2. Code (VS Code)VS Code这个软件也是支持去远程的地方进行调试工作的, 你可以通过安装相应的插件的方式来进行操作, 这样就能在本地方便地调试那些位于远程服务器上面的程序代码了, 这种功能极大地方便了开发和调试的相关工作。五、其他调试技巧1. 使用语句语句能够用来检查程序的某些条件的状况, 判定其到底是真还是假的结果, 假如果条件得不到满足的状况发生话, 程序就会抛出异常的动作来, 这个做法可以帮助我们来快速地找到并且定位问题的所在点。def test_function():x 10y 20assert x y 30, x y should be 30z x yprint(z)test_function()2. 使用try-语句try这个语句, 它是可以拿来捕获异常的, 也是可以拿来处理异常的, 它这样子做的话呢, 就是能够协助我们更好地去调试我们的程序。def test_function():try:x 10y 0z x / yexcept ZeroDivisionError as e:print(fError: {e})else:print(z)test_function()3. 使用模块模块是标准库里面的单元测试框架, 它可以帮我编写测试用例, 还能帮助运行测试用例, 这样就能确保程序是正确的。import unittestdef add(x, y):return x yclass TestAddFunction(unittest.TestCase):def test_add(self):self.assertEqual(add(10, 20), 30)self.assertEqual(add(-1, 1), 0)self.assertEqual(add(0, 0), 0)if __name__ __mn__:unittest.main()咱们可以通过编写测试用例, 在调试的过程当中去快速地找到问题所在, 然后把这些问题给修复掉嘛, 这样就能够保证程序是正确的了。六、总结调试程序的办法其实有很多种, 你要是选了那种最适合自己的法子, 那肯定能一下子就让调试的效率变得很高。你看那些常用的招数都有什么, 比方说就用那个内嵌进去的 pdb 这个家伙来弄, 或者是直接用那些集成开发环境 IDE 里面自己自带的那套调试工具也行, 再一个就是往里塞一些用来记日志的代码然后等着它跑起来看输出。当然了, 用外头那些专门拿来搞调试的东西也是好选择, 就像像 VS Code 这个编辑器啦等等这些。你只要脑子里清楚这一点, 那就是把这些不同的办法都灵活地用起来去组合着来打怪升级, 这样你才能在那个叫定位bug的那个环节里更牛, 把问题给解决掉才痛快, 这样一来, 程序它到底正不正确, 稳不稳当, 你心里就有底了。关于常见问题, 我们提供了相关的问答内容。如何在中使用调试工具?提供了多种调试工具, 例子中有pdb, 通过在代码里插入pdb; pdb.(), 就可以在代码执行到那一行的时候进入调试模式, 这时候能够查看变量的数值, 逐行地执行程序代码并且设置断点, 以此来深入分析程序的运行情况。如何有效地捕获程序中的异常程序开发人员利用try-块, 能够捕获并处理异常。他们会在有可能发生错误的代码范围里加入try语句。与此同时, 还要在对应的代码块内部编写错误处理的逻辑。这样一来, 当程序运行过程中遭遇异常情况的时候, 它仍旧可以持续往下执行。这样做, 就可以避免程序突然崩溃的现象。此外, 开发者还可以根据具体的异常种类进行针对性地处理手段, 从而达到更加准确地掌控程序流程的目的。如何使用日志记录来调试程序日志这项记录手段, 它是调试工作里头的一种十分有效的做法。你那个使用的模块, 它可以在里面去设置那种不同的日志级别, 比如说什么DEBUG, INFO,还有个留空的括号, 然后是ERROR, 还有个留空的括号, 把这些个东西全都列出来, 而且你还可以把日志信息给弄到控制台上面去, 或者把它输出到文件里面去。这样做了之后, 你可以透过分析那些日志的信息, 来搞清楚地了解程序究竟是怎么个执行过程, 还有它的状态是怎么样的, 这对于快速地把问题给定位出来, 那就是大有帮助了。
返回列表