Skip to main content

Object debugger in python

Project description

objdbg:一款专注于python object的调试器

English version of README here

安装

pip install objdbg

简介

什么?

objdbg是一款专门用于python object的调试器。它可以使你轻松地在交互式的shell中对一个特定的python object进行静态和动态的分析。

等等,什么???

假设存在如下object:

class A():
    def __init__(self):
        self.s = 1
    def __eq__(self):
        return False

    @staticmethod
    def staticadd(b, v):
        return b + v
    @classmethod
    def classadd(self, c, b=1, v=2):
        return b + v + c
    def add(self, a, b, c, *args, **kargs):
        return a + b + c

我们可以使用objdbg对其进行调试,如下:

from objdbg import dbg
dbg(A())

就会弹出如下交互式的shell。

python OBJect DeBuGger (OBJDBG) v0.1

[*] Details of the object (command "objprint"):

<A 0x29f26895190
  def add(a, b, c, *args, **kargs),
  def classadd(c, b=1, v=2),
  .s = 1,
  .staticadd = <function staticadd>

objdbg>

可以使用objdbg内置的命令对该object进行调试。

功能

静态

objprint:列出object的所有属性&方法,每次调用dbg()时会自动调用。

1.png

func:列出object中内置的所有函数(包括重写过的魔术方法)及其参数。

2.png

attr:列出object中的所有属性。

1746365505015.png

pickle:输出pickle.dumps(obj)并进行base64编码。

1746017492227.png

obj.{attr}:打印obj对应的属性

1746020496532.png

dir {obj.xxx}:打印dir(obj.xxx),假如不传参默认dir(obj)

1746365084603.png

func {funcname} {arg1} {arg2} ......:调用object内的函数,输出返回值。

1746365587646.png

TODO note:快速列出object中比较值得注意的信息。(eg:被修改的魔术方法)

......

动态

shell:切换到python interactive shell。本地命名空间中含有接受调试的object。

1746017961019.png

mod_attr {attrname} {new_value}:修改object内的特定属性。支持元组,列表,字典的各种嵌套。

1746017871028.png

reset:将调试器内的object恢复成一开始传入调试器的object。

1746018930045.png

retr:停止调试,返回调试器内的object。

exit&quit:停止调试,返回None。

from objdbg import dbg
class A():
    def __init__(self):
        self.s = 1
    def __eq__(self):
        return False

    @staticmethod
    def staticadd(b, v):
        return b + v
    @classmethod
    def classadd(self, c, b=1, v=2):
        return b + v + c
    def add(self, a, b, c, *args, **kargs):
        return a + b + c
n = dbg(A)
# if retr: n == A_that_is_modified_in_debugger
# if exit&quit: n == None

del attr {attrname}:删除object内的特定属性。

del func {funcname}:屏蔽object内的特定方法。

note: 由于python中不能直接从实例中删除方法,所以当你尝试del一个方法时,objdbg会将其定义为None,使其成为notcallable。但是,这个属性不会消失。

1746019837926.png

TODO mod_func {funcname} {base64_code}:修改&新建object的特定方法(将代码base64编码后传入)。

其他

help:打印帮助信息

1746365894752.png

version:打印版本信息

协议

objdbg项目基于Apache Lisence 2.0。

bug报告&贡献

如果你在使用objdbg时发现了bug,请在issue中告知我,或者联系lamentxu@163.com。谢谢!

如果你对这个项目感兴趣的话,也欢迎在我的邮箱中联系我。objdbg正处于开发的初期阶段,我非常期待得到你的帮助!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

objdbg-0.1.2.1.1.tar.gz (9.1 kB view details)

Uploaded Source

File details

Details for the file objdbg-0.1.2.1.1.tar.gz.

File metadata

  • Download URL: objdbg-0.1.2.1.1.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.0

File hashes

Hashes for objdbg-0.1.2.1.1.tar.gz
Algorithm Hash digest
SHA256 30c86b537346b9f0a399d2bd6710b3d5d185f451ac65b36571f344822950a2e9
MD5 7ec07abbdfeb859685da0d4a91cdaf1a
BLAKE2b-256 613d9ae19ce53b3335e63b323ae29a567741be62019fefca936f07f8258a97fb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page