8

我正在尝试使用Heapy分析扭曲的 python 代码。例如(伪代码):

from twisted.web import resource, server
from twisted.internet import reactor
from guppy import hpy

class RootResource(resource.Resource):
    render_GET(self, path, request):
        return "Hello World"

if __name__ == '__main__':
    h = hpy()
    port = 8080
    site = server.Site(RootResource(mq))
    reactor.listenTCP(port, site)
    reactor.run()

我需要做什么才能在配置文件浏览器中查看 Heapy 配置文件结果?

4

1 回答 1

6

在查看了 guppy 网站并没有找到有关如何在那里启动配置文件浏览器的任何信息后,我开始查看 guppy 源代码并最终找到 guppy/heapy/Prof.py,在其末尾我看到一个包含此行的文档字符串:

[0] heapy_Use.html#heapykinds.Use.pb

然后,记住我曾看到一些文档将 guppy.hpy 的返回类型作为 Use,我检查了 guppy.hpy().pb() 是否会做任何事情。而且,确实如此。所以这似乎是探查器浏览器的启动方式。我不确定这是否是您要问的,但我需要先弄清楚,然后才能回答您问题的其他可能部分。:)

似乎使这些信息可用的最简单方法是在您的 Web 服务器中创建一个资源,该资源调用 Use.pb 作为其呈现过程的一部分。还有其他方法,例如在您的应用程序中嵌入检修孔,或使用信号处理程序来触发它,但我喜欢资源的想法。因此,例如:

class ProfileBrowser(Resource):
    def render_GET(self, request):
        h.pb()
        return "You saw it, right?"

...
root = RootResource(mq)
root.putChild("profile-browser", ProfileBrowser())
...

然后,您可以随时访问 /profile-browser 来查看配置文件浏览器。“pb”调用阻塞,直到配置文件浏览器退出(注意,只是用 wm destroy 按钮关闭窗口似乎不会导致它返回 - 只有退出菜单项似乎)所以你的服务器被挂起,直到你关闭窗口,但出于调试目的,这似乎没问题。

于 2009-09-24T15:18:55.563 回答