gpt4 book ai didi

python - 如何跟踪现有 python 扭曲应用程序的执行

转载 作者:行者123 更新时间:2023-11-28 16:37:38 26 4
gpt4 key购买 nike

所以...你们中的许多人可能会在您的职业生涯中认识到这一点。

您继承了一个由数百个文件组成的代码库,每个文件都有数千行,其中混合了对象、闭包和全局变量,没有单元测试,其中很多实际上可能是死代码,再也不会被调用。一个人(他是一个 super 聪明的人,但也是一个彻头彻尾的黑客)写了大部分(就像所有的),但他已经不在了。 python 的有趣怪癖比比皆是,它们可以做所需的事情,但没有注释来表明它们存在的原因。

d = dict(d)

其中 d 已经是一个字典(传递到方法中),是我个人最喜欢的...系统并知道他们需要做什么

if <passed_in_param>["XXX"] = <something>:
<pathA>
return A
elif <passed_in_param>["ZZZ"] = <somethingElse>:
<pathB>
return B

这是...呃...等等等等 - 只是渴望重构的常见内容。

我真正的问题是,我需要了解应用程序的工作原理,然后才能真正开始调试它......再次 - 我敢肯定,这对许多人来说都是熟悉的领域。

系统使用 twisted 托管一堆 http 端点(使用 twistd),并且有大量端点占用各种根。每个都做“有趣”的事情,但本质上它们都与各种数据库或第三方休息端点进行通信,然后聚合一些东西格式化一些东西并返回一个休息响应。 Twisted 是一个非常好的框架!

现在,有什么方法可以让 twisted 框架帮助我开始调试它吗?像设置一些标志这样简单的事情,以便每当触发回调时 - 它会打印传递给回调的方法和参数?这不是我能够在文档中找到的内容。

你们是做什么的?欢迎提供任何提示和答案。

如果我也有的话,我不会在我的本地开发盒上用猴子补丁扭曲。

更新 - 一些 hacky 进展......................我自己并没有超出一些 hackyness,我想出了一个总比没有好一点的东西。

我在 tap.py 文件中启动了 twistd 启动器(以防其他人发现它有用):

trace_exclusions = ["twisted", "DQL2SQL", "DDBClient", "exon_parser", "ontology", "pglib"]

def tracefunc(frame, event, arg, indent=[0]):
if frame.f_code.co_filename.startswith("<!redacted!>/src/"):
if not any(te in frame.f_code.co_filename for te in trace_exclusions):
if event == "call":
indent[0] += 2
print "-" * indent[0], frame.f_code.co_filename.replace("/<!redacted!>/src/", ""), frame.f_code.co_name, frame.f_code.co_varnames
if event == "return":
indent[0] -= 2
return tracefunc

import sys
sys.settrace(tracefunc)

我得到了一些有用的输出:

-- servers/http/base.py getResourceFor ('self', 'request', 'path', 'full_path', 'channel', 'category', 'service', 'version', 'market', 'locale', 'currency', 'query_id', 'extra_id')
-- servers/carhire_api/carhire_api.py render_GET ('self', 'request', 'entity_id', 'distance', 'dql', 'd', 'response')
---- servers/carhire_api/carhire_api.py get_int_parameter ('request', 'param_key')
---- servers/carhire_api/carhire_api.py get_int_parameter ('request', 'param_key')
---- beautify/deferred_entity_beautify.py get_entity_id ('pkid', 'val', 'iface', 'd')
------ cache/apc_cache.py __getitem__ ('self', 'key')
------ beautify/deferred_entity_beautify.py get_interface_id ()
------ kraken/client.py get ('self', 'key', 'd')
-------- kraken/client.py _get_multi ('self', 'connection', 'keys', 'task', 'd')
---------- kraken/twist.py get ('self', 'namespace', 'keys', 'task', 'the_size', 'req', 'r', 'the_timeout', 'l', 'idx', 'tmp_keys', 'd_l', 'exc')
------------ kraken/__init__.py get ('self', 'namespace', 'keys', 'req')
-------------- kraken/__init__.py request ('self', 'method', 'namespace', 'data', 'req')
---------------- kraken/__init__.py <genexpr> ('.0', 'x')
---------------- kraken/__init__.py <genexpr> ('.0', 'x')

但如果有人有更好的东西 - 我很想知道!

最佳答案

一些工具的开发工作已经开始,可以让 Deferred 更容易调试。关于 https://twistedmatrix.com/trac/ticket/1402 有一些信息和引用自 https://twistedmatrix.com/trac/ticket/4304 的分支中的一些代码.这些工具实际上还不是 Twisted 的一部分,因此尝试使用它们有点不方便。在最坏的情况下,它们可能会给您一些想法,并且您可能真的会找到一种在您的应用程序中使用它们的方法。

与您已经编写的基于跟踪钩子(Hook)的跟踪器类似,还有 twisted.python.util.spewerepsilon.spewer.Spewer。不过,这些实际上可能不会提供比您已经构建的工具更多的信息。

关于python - 如何跟踪现有 python 扭曲应用程序的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23759873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com