跟踪代码中某个点的所有语句

2024-01-04

我正在尝试跟踪复杂的 Python 应用程序(OpenERP)中的调用和代码流。更复杂的是,OpenERP 有自己的继承系统,与普通的 Python 继承并行。

我想做的是获得执行代码的完整列表,以及模块/函数名称。

我尝试过 Eclipse 调试器,并且我了解 pdb 的工作方式大致相同,但单步执行过程花费的时间太长。

我也尝试过使用跟踪启动应用程序,但在我想要跟踪的点之前得到了太多不必要的跟踪。我确实尝试排除模块和目录,但没有多大帮助。

python -m trace -t --ignore-dir=/home/sean/unifield/utp729b/unifield-server --ignore-dir=/home/sean/unifield/utp729b/unifield-web --ignore-module=SocketServer,socket,threading,tiny_socket,__init__,trace,netsvc,posixpath,zipfile,config,genericpath,orm openerp-server.py --db_host=localhost --db_port=5432 --db_user=openerp --db_password=xxxx --addons-path=/home/sean/unifield/utp729b/unifield-addons,/home/sean/unifield/utp729b/sync_module_prod,/home/sean/unifield/utp729b/unifield-wm > /home/sean/trace.log

我想做的事是在代码中设置断点,但不是单步执行代码,而是开始记录到文件。

我还尝试使用装饰器,并附有示例http://eli.thegreenplace.net/2012/08/22/easy-tracing-of-nested-function-calls-in-python/ http://eli.thegreenplace.net/2012/08/22/easy-tracing-of-nested-function-calls-in-python/ and http://code.activestate.com/recipes/577551/ http://code.activestate.com/recipes/577551/,但他们没有满足我的需求。

EDIT

我现在尝试使用 Python 跟踪模块,将这一行添加到虚拟机参数Eclipse 中的框:-m trace -t --trace

这开始产生我正在寻找的内容,逐行跟踪,但是当 OpenERP 完全启动时就停止工作。请参阅下面控制台输出的(冗长)摘录。

pydevd_tracing.py(46):     if TracingFunctionHolder._warn:
pydevd_tracing.py(62):     TracingFunctionHolder._original_tracing(tracing_func)
pydevd_tracing.py(69):         TracingFunctionHolder._warn = True
pydevd_tracing.py(71):         TracingFunctionHolder._lock.release()
pydevd.py(1075):             try:
pydevd.py(1077):                 threading.settrace(self.trace_dispatch) # for all future threads
pydevd.py(1081):             try:
pydevd.py(1082):                 thread.start_new_thread = pydev_start_new_thread
pydevd.py(1083):                 thread.start_new = pydev_start_new_thread
pydevd.py(1087):             while not self.readyToRun:
pydevd.py(1088):                 time.sleep(0.1) # busy wait until we receive run command
pydevd.py(1087):             while not self.readyToRun:
pydevd.py(1088):                 time.sleep(0.1) # busy wait until we receive run command
pydevd.py(1087):             while not self.readyToRun:
pydevd.py(1088):                 time.sleep(0.1) # busy wait until we receive run command
pydevd.py(1087):             while not self.readyToRun:
pydevd.py(1088):                 time.sleep(0.1) # busy wait until we receive run command
pydevd.py(1087):             while not self.readyToRun:
pydevd.py(1088):                 time.sleep(0.1) # busy wait until we receive run command
pydevd.py(1087):             while not self.readyToRun:
pydevd.py(1088):                 time.sleep(0.1) # busy wait until we receive run command
pydevd.py(1087):             while not self.readyToRun:
pydevd.py(1090):             PyDBCommandThread(debugger).start()
pydevd.py(1092):         pydev_imports.execfile(file, globals, locals) #execute the script
[2014-01-05 18:33:51,992][?] INFO:server:OpenERP version - 6.0.3
[2014-01-05 18:33:51,993][?] INFO:server:addons_path - /home/sean/unifield/utp729b/unifield-addons,/home/sean/unifield/utp729b/sync_module_prod,/home/sean/unifield/utp729b/unifield-wm
[2014-01-05 18:33:51,993][?] INFO:server:database hostname - localhost
[2014-01-05 18:33:51,993][?] INFO:server:database port - 5432
[2014-01-05 18:33:51,994][?] INFO:server:database user - openerp
[2014-01-05 18:33:51,994][?] INFO:server:initialising distributed objects services
[2014-01-05 18:33:52,316][?] INFO:web-services:starting HTTP service at 0.0.0.0 port 8069
[2014-01-05 18:33:52,316][?] INFO:web-services:starting HTTPS service at 0.0.0.0 port 8071
[2014-01-05 18:33:52,317][?] INFO:web-services:Registered XML-RPC over HTTP
[2014-01-05 18:33:52,318][?] INFO:web-services:starting NET-RPC service at 0.0.0.0 port 8070
[2014-01-05 18:33:52,318][?] INFO:server:Starting 3 services
[2014-01-05 18:33:52,319][?] INFO:server:OpenERP server is running, waiting for connections...
[2014-01-05 18:34:02,476][utp729b_HQ_01] INFO:init:module base: loading objects
[2014-01-05 18:34:02,478][utp729b_HQ_01] INFO:init:module base: registering objects
[2014-01-05 18:34:03,060][utp729b_HQ_01] INFO:init:module base: loading objects
[2014-01-05 18:34:03,185][utp729b_HQ_01] INFO:init:module msf_button_access_rights: loading objects
[2014-01-05 18:34:03,186][utp729b_HQ_01] INFO:init:module msf_button_access_rights: registering objects
[2014-01-05 18:34:03,203][utp729b_HQ_01] INFO:init:module spreadsheet_xml: loading objects

EDIT 2

查看更强大的解决方案,但该解决方案始终运行而不是某个时间点,请参见此处:在 Python 跟踪中查找完整路径名 https://stackoverflow.com/questions/20947780/finding-full-pathname-in-a-python-trace


我不知道如何像你想要的那样设置跟踪;我所能提供的是,大多数与数据存储和检索相关的有趣调用都会经过osv.py, fields.py, and orm.py in the .../openerp/osv/目录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跟踪代码中某个点的所有语句 的相关文章

随机推荐

  • PARSE_DATETIME 格式化为一年中的某一天

    BigQuery 中与年份 j 格式设置元素一起使用的 PARSE DATETIME 函数存在问题 该函数似乎忽略了一年中的某一天元素 Eg select PARSE DATETIME Y j 2013243 returns 2013 01
  • PayPal API,寻找合适的 API

    我需要在我的网站中添加使用 PayPal 付款的选项 我想要一个 API 我可以在其中向 PayPal 发送信息并立即取回交易 ID 以便我可以将其保存在我的数据库中 哪种 API 最适合我 有没有办法做到这一点 我看到他们有这个清单 li
  • 使用 virtualenv 时在 pythonpath 中包含 Git 子模块

    我正在使用 Git 对 Django 项目进行版本控制 尽可能将所有不属于项目本身但项目所依赖的源代码作为 Git 子模块引入 这些生活在lib目录并且必须包含在 python 路径中 目录 文件布局如下所示 git docs lib my
  • Swift:如何使 UIView 在 UITableViewCell 中可点击?

    里面一个UITableViewCell 我正在尝试实现一个button与两个image and a text 看来是标准UIButton无法实现这一点 所以我创建了一个UIView其中包含一个UIImageView and a UILabe
  • 嵌入式 C++ 系统中的持续集成/单元测试

    通常使用哪些工具进行单元测试 尤其是嵌入式系统的持续集成 我特别认为你通常必须交叉编译和部署 而且你不能轻松地可视化目标平台 运行测试代码和框架也可能很困难 我可以用什么来缓解这些困难呢 我认为它应该是某种双重目标 构建服务器在更容易的目标
  • 重写 onSaveInstanceState

    我正在努力应对onSaveInstanceState类中的方法View https developer android com reference android view View html onSaveInstanceState 28
  • Apache Spark 的性能调优

    我正在开发一个项目 我必须调整 Spark 的性能 我发现了四个最重要的参数 它们将有助于调整 Spark 的性能 它们如下 火花记忆分数 Spark 内存 offHeap 大小 Spark Storage MemoryFraction S
  • Entity Framework Core 将不会映射到 BigInteger

    我需要使用BigInteger类来处理我的类的大整数 但是当尝试使用 Entity Framework Core 映射到数据库表时 我收到以下错误 该物业AllianceRank Reputation无法映射 因为 它是类型BigInteg
  • app-release.apk 是 zipaligned apk 吗?

    我使用的是Android Studio 1 0 2 当我在gradle任务中单击assembleRelease时 会生成两个文件 app release unaligned apk和app release apk 我知道 app relea
  • 使用 python 进行 SICP 的材料?

    我想用 Python 尝试 SICP 任何人都可以指出教授计算机程序的结构和解释的材料 视频 文章 python 目前正在学习 Abelson Sussman 和 Sussman 的 SICP 视频 我想这对你来说会很棒CS61A SICP
  • 尝试从应用内发送电子邮件但不起作用 - Swift (iOS)

    我尝试了来自不同网站的 2 个代码从我的 iOS 应用程序发送电子邮件 当我按下Send按钮它调用方法邮件撰写控制器并且总是返回日志 邮件已发送 作为result参数总是MFMailComposeResultSent value 即使我有
  • 管道中何时进行路由?

    ASP NET MVC 管道中何时进行路由 IIS 7 0 的 ASP NET 应用程序生命周期概述 http msdn microsoft com en us library bb470252 aspx 是否在第 2 步 执行 URL 映
  • TinyMCE初始化后修改工具栏的正确方法

    我正在使用 JavaScript 扩展云托管的 LMS 因此 我们可以在页面中添加javascript 但不能针对不同的组件修改供应商的javascript LMS 经常使用tinyMCE 目标是在每个tinyMCE编辑器的工具栏上添加一个
  • 通过向包装器传递 R 中的一组参数来生成 N 个 ggplot 图?

    我有一个输出数据框的函数 如下所示 df A tibble 100 x 7 test idx train user id test user id train idx D isSame D rank
  • 如何修复 PHP 警告:PHP 启动:无法加载动态库 'ext\\php_curl.dll'?

    我目前在 Windows Server 2008 R2 上安装了 PHP 5 5 12 和 Apache 2 4 一切都运行完美 没有问题 警告 我所做的是将相同的 Apache 文件 配置复制到另一台服务器 我复制了C PHP目录 然后是
  • 正则表达式在文本中查找 url

    我必须使用正则表达式找到文本中的第一个网址 例如 I love this website http www youtube com music it s fantastic or es http www youtube com music
  • 具有可变数量的特定类型参数的 C++ 函数

    我刚刚了解了 C 中的可变参数模板 我实现了它 但我想知道它可以执行以下操作吗 如果我想要一个参数数量可变的函数 我可以这样做 template
  • 如何在React函数组件中不使用useEffect钩子来获取数据?

    我知道使用钩子时的传统方法是使用useEffect钩 但是为什么我不能直接在功能组件中调用axios而不是hook然后设置数据呢 基本上 我想问这样做有什么问题 const users setUsers useState null axio
  • 动态设置字典深处的值

    如果我有一个嵌套字典d a b 和一个字符串 a b c 和一个值 X 我需要根据键字符串将值放入字典中 我想要实现的目标可以硬编码为d a b c X 但我需要动态地做到这一点 密钥字符串可以是任意长度 对于奖励积分 如果密钥不存在 我还
  • 跟踪代码中某个点的所有语句

    我正在尝试跟踪复杂的 Python 应用程序 OpenERP 中的调用和代码流 更复杂的是 OpenERP 有自己的继承系统 与普通的 Python 继承并行 我想做的是获得执行代码的完整列表 以及模块 函数名称 我尝试过 Eclipse