python debug ipdb

article/2025/3/4 16:17:37

pudb使用

to be continued…

ipdb和pdb区别

实际上ipdb是pdb的扩展版本,在pdb的基础上添加了如下功能:

  • 可以使用tab(提示)补全代码的功能(我觉得这一点上我就完全倒戈了…)
  • 调试不再是黑白的,l命令可以输出带颜色的代码(将变量、命令、函数名等区分开,提高代码可读性)
    在这里插入图片描述
    就像这样,test.py(13)里面的13是当前行号
    左边的箭头表示你现在马上要运行的代码所在处
    最左列的红色的1和2代表你设置的断点

refer

  • pdb调试多进程, actually 还是没有搞得很懂…



常用命令

  • 整理几个自己常用的:
    1. u
      也就是up ,回到上一层的帧栈 (对应的就是 d ) ,这在你进入到了一个exception的捕捉过程中的时候相当有用…

    2. display var
      var是我们要跟踪的变量,这样每次var变化的时候就会自动print出来
      想取消就用undisplay var即可

    3. p var
      这个是我自己经常忘记,然后傻傻打print,实际上直接p命令就可以。另一方面也证明ipdb里面不仅可以输入ipdb的命令,还可以输入python的code进行实时编译和运行

    4. bt/where 或者简写成 w
      查看层叠帧栈

    5. source function
      查看 function的源代码
      类似的还有pdoc var 查看var的文档(变量和函数都可以,有点像dir(var)命令)
      pinfo var命令,可以看到var声明的源代码地址
      ll命令也可以

    6. j(jump)
      修改CPU的下一条指令,会忽略中间的代码不去执行,也可以往回跳,只要你确认不会报错就可以

    7. 关于断点的:

    1.b
    查看断点有哪些(会用序号分别标出来)
    gdb里面是info b 有点不大一样
    2. cl idx
    根据上一步输出的序号idx,可以删除你想删除的断点
    gdb里面是del idx ,有点不大一样
    3. disable idx & enable idx
    根据命令1输出的序号idx,可以设置让该断点当前生效或者失效(如果直接删除代价太大了)
    4. tbreak 添加临时断点(这次断完就会失效
    tbreak line
    tbreak file:line
    5. 条件断点
    b [ [fileName:]lineNo [, condition] ]
    e.g. b 5, flag==true
    6. 另一个加断点的小trick
    if( 你想要停下的判断条件 ):
    ipdb.set_trace()




小trick

使断点全局失效/生效

import ipdb
ipdb.set_trace()	#在你想要开始调试的地方写下这行就可以

然后在shell里面python xx.py或者直接 ./xxx.py也可

  • 如果单次想要让断点失效,但是又不想手动一个一个删除ipdb.set_trace()怎么办?
def f():passipdb.set_trace=f

利用函数覆盖
如果调试到一半又想要使用ipdb.set_trace()的功能怎么办(是的我们程序员就是事儿多)

reload ipdb  或者 del ipdb

原理可以参考我之前的blog xxx object is not callable可能的原因之一【恢复被覆盖的python内置函数】

想要监视某个变量的特殊情况

  • condition BreakPointIndex expr
  • 在那个出错的地方加上ipdb的set_trace

比如说,想看xx小于0的时候是怎么个情况,就在它上次报错的后面加上:

if xx<0:import ipdbipdb.set_trace()
  • 如果想要实时关注或者盯着看某个变量的变化情况,使用watch或者display



More / 其他调试技巧

  • pudb 可视化调试比ipdb好,适合vim或者emacs开发,有IDE的话,做的效果会更好
  • 写了不少工具,但是tl;dr

dir()

  • 查看当前内存中的变量
    在这里插入图片描述
    包括导入的包、创建的类

  • 查看类的成员、方法

    • dir ( GridMatrix )
    • GridMatrix .__ dict__也可以查到(不过是以dict的形式返回)

key是这个成员变量或者函数的名字,value是这个成员函数的地址或者这个成员变量的值( 相当于key.__ str__的返回值)
在这里插入图片描述

可以通过GridMatrix .__ dict__[‘reset’]来查看GridMatrix 类reset成员函数的地址

添加包的搜索路径

https://www.jianshu.com/p/cb6447e1cf88
summary of the site link :

  • change in codes(适合于一次性)
import sys
sys.path.append( str path )
  • change system PYTHONPATH
  • change python pkg

http://chatgpt.dhexx.cn/article/EOigoPco.shtml

相关文章

Python调试pdb和ipdb

什么是pdb和ipdb 不知道大家在用Python写代码出现报错时是怎样调试的&#xff0c;从报错提示定位回去一步一步check每一行&#xff1f;如果没有IDE或者命令行写代码时又该怎样快速调试&#xff1f;这时如果使用pdb进行调试将会异常方便。 Pdb就是Python debugger&#xff0c;…

python调试模块ipdb

1. 调试python ipdb是用来python中用以交互式debug的模块&#xff0c;可以直接利用pip安装; 其功能类似于pycharm中 python控制台&#xff0c; 而使用ipdb 的优点&#xff0c;便是直接在代码中调试&#xff0c; 避免了在python控制台&#xff0c;或者重新设置一些简单变量。…

python调试器 ipdb

文章目录 1. 介绍1.1 常用调试方式1.2 安装 ipdb 2. 用法3. 命令3.1、查看源代码3.2、添加断点3.3 添加临时断点3.4 清除断点3.5、打印变量值3.6、逐行调试命令3.7、非逐行调试命令3.8 跳出函数&#xff0c;跳入函数3.9、查看当前函数所有参数3.10 打印变量的值3.11、打印变量类…

ipdb python下的debug利器

ipdb是一个IPython的python下debug神器&#xff0c;支持在代码中添加断点&#xff0c;进行单步调试&#xff0c;支持在调试过程中查看各种变量的值&#xff0c;新增修改断点&#xff0c;或跳过特定断点。以往进行python代码的调试都是通过pycharm或vscode添加断点&#xff0c;在…

js中函数传参的问题

在使用ajax或者js拼接信息在页面中显示的时候&#xff0c;需要向函数传参的时候往往会有问题。 如果传递的是数字类型&#xff0c;则是可以直接传递。不需要进行转义。 如果是字符串类型&#xff0c;则需要进行转义&#xff0c;才会以存入字符串的参数。

js函数传参

也许大家对于函数的参数都不会太在意&#xff0c;简单来说&#xff0c;把函数外部的值复制给函数内部的参数&#xff0c;就和把值从一个变量复制到另一个变量一样。深入研究&#xff0c;你会发现其实没那么简单&#xff0c;这个传参是要分俩种情况&#xff08;其实这是个错误的…

关于js函数传参的问题

js在拼接函数时&#xff0c;当传递的值为字符串是会出现问题&#xff0c;直接报错&#xff0c;不会进入到函数里&#xff0c;这是受就需要转义符来操作&#xff0c; 例如 var can object; onClickUpdateCollege(" can ") 这时事件触发之后&#xff0c;浏览器会报错…

js 立即执行函数传参问题

正确的执行函数写法如下&#xff1a; (function func(i) {console.log(i);})(j);(function func(i) {console.log(i);}(j));!(function func(i) {console.log(i);})(j); 看看下面这段代码有什么问题&#xff1f; let testStr "test string"(function func(params) …

js函数传参,如何在JavaScript函数中不传递先前参数的情况下传递第n个可选参数?

普通函数 function fn(name,age,sex){console.log(name,age,sex);}使用方法 函数的规则是&#xff0c;按顺序传递&#xff0c;如果接收参数是三位&#xff0c;而你只穿了两位&#xff0c;不会报错但是会返回undefined 箭头函数 箭头函数和普通函数使用起来没有太多的区别。 …

JavaScript函数传参原理详解——值传递还是引用传递

讨论JavaScript的传参原理之前&#xff0c;我们先来看一段曾经让笔者困惑了一段时间的代码 var testA1; var testB{}; function testNumber(example){example2; }function testObj(example) {example.test1; }testNumber(testA); testObj(testB); console.log(testA);//输出1 …

javascript 函数传参

通过值传递参数 在函数中调用的参数是函数的隐式参数。 JavaScript 隐式参数通过值来传递&#xff1a;函数仅仅只是获取值。 如果函数修改参数的值&#xff0c;不会修改显式参数的初始值&#xff08;在函数外定义&#xff09;。 隐式参数的改变在函数外是不可见的。 通过对…

前端基础知识点:JS中的参数传递详解

JS语法中的传递参数&#xff0c;对于初学者是一个非常重要的概念。很多小伙伴在学习“值传递”和“引用传递”时&#xff0c;会有不少烦恼。今天我们就来通过各种姿势全方位剖析JS中的值传递。 本文章将会用10分钟时间无死角的解析JS的传参方式&#xff0c;希望能对您有所帮助…

Javascript基础知识(三):函数参数(传参)

1.函数参数分类及使用 上一篇博客已经讲到函数参数有实参和形参两种。 函数参数使用时需要注意以下几点&#xff1a; 1.如果形参有两个赋值&#xff0c;而实参只给了一个值&#xff0c;那么就要把这个值赋予第一个形参.第二个形参没有赋值。 示例&#xff1a; <script&g…

js 基础-函数传参

函数中的参数传递是所有编程语言的中的基础内容。本文是介绍了js中保存基本数据类型和引用数据类型的两种方式以及在函数传参的本质。 1 简介 本文介绍了js中两种不同数据类型的数据的保存问题&#xff0c;以及赋值操作的本质&#xff0c;最后指出函数传参就是赋值操作&#…

php获取qq音乐的api类,利用QQ音乐api集成的php歌曲搜索

获取最新音乐 url&#xff1a; https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.fcg?uin0&notice0&platformh5&needNewCode1&tpl3&pagedetail&typetop&topid27 获取推荐歌曲 url&#xff1a; https://c.y.qq.com/v8/fcg-bin/fcg_v8_toplist_cp.…

Vue之跨域调用网易云音乐API及QQ音乐API

今天在做VUE项目的时候&#xff0c;发现调用QQ音乐轮播图的API一直失败&#xff0c;timeout真的不是我网络的问题&#xff0c;在客厅对着路由器调了一整天都是报错&#xff0c;我还以为是API失效了&#xff0c;但其实没有........晚上突然又可以获取了 但总不能不写轮播图吧&am…

MusicBee 歌词插件(基于QQ音乐API)

MusicBee 歌词插件&#xff08;基于QQ音乐API&#xff09; MusicBee 是一个很棒的免费音乐管理、播放软件&#xff0c;支持通过插件来扩展功能。然而 MusicBee 在初始情况下仅对外国的几个歌词数据库进行检索&#xff0c;得到的结果一般是不带时间轴的纯文本歌词&#xff0c;并…

php开发个人音乐站 QQ音乐api

做位一名优秀的程序员 工作时候戴耳机是不可避免的 然后好听的歌又需要会员 下面小编就给大家简绍我自己听歌的神器 话不多说 开撸&#xff01; 一&#xff0c;要想获得对应的歌曲肯定要先获得歌曲的id,图片id等 下面主要讲解如何获取歌曲播放id&#xff1b; 1.搜索歌曲API&a…

python调用QQ音乐API

python调用QQ音乐API 1. 音乐搜索接口、其他接口 2. 获取token 3. 拼接播放地址 先上一份代码&#xff1a; import requests import pprint import json from selenium import webdriver# 音乐搜索接口p, n, w 1, 5, 碰 url_1 https://c.y.qq.com/soso/fcgi-bin/client_…