如何在Windows下调试Python中的访问冲突内存问题?

2024-05-18

您建议使用哪些工具或流程来调试 ctypes 内存问题?为什么可以打印数组的内容但无法复制它?

我已将问题范围缩小到以下几行:

   [ ... lots of code ...]

   valid_data_as_bytes = bytearray(self._output_buffer[:result])
   print("valid_data_as_bytes:",valid_data_as_bytes)
   print("len(valid_data_as_bytes):", len(valid_data_as_bytes))
   assert len(valid_data_as_bytes) == result
   Buffer = ctypes.c_ubyte * len(valid_data_as_bytes)
   buf2 = Buffer.from_buffer_copy(valid_data_as_bytes)  # <--- error occurs here

   [ ... lots of code ...]

下面是使用命令运行测试时最后几行输出的打印结果pytest -s:

valid_data_as_bytes: bytearray(b'\xfc\xdf]\'O\xb6\xf4n\xa3p\x87\xcd\xca\xe1\xd53~V\x04\xa3\x977\xd3q[\xf8\x9dh\xe1\x05\x7f\xf3$\xb2S,\xa4\x8d\x04\xe6\xc0\x12\xbf)\xb8\r\xcb&\x9a(\x08\x1c\xca\x1a\x13\x16\xba}\x93e\xf0J\x91\x8eJ\xcbk\xc0\xc2\xc9@{\xcc$\x7f\x1d0\xc58\xcf\xe5\xbf_W\r\x02\xf7\xb8\x7fm\xa1\xd9\xa8\xba6\xed\x17\xdf;\x7f\x8b\x9a\x9f\x03\r\xec\xdc]\x14\xfd\x15B\x98\\\xcb\xc8)\xdd9\xc0\xb2\xb5\xa5Af\x85\x8b\x1a\xac\x89,#\xd9 \xc7\x86SiE|\x84B\xdc"\xcfhG\xef\xec\xffh\x84\x14\xdb\xf9\xc9J2O\xe3[8\x9531Be\xb0p\x87\x0eJ\xa4i\xce)\xbaBXY\xdeP\x88\x13\xdc](_\xd5^m\xdc\xde\x18\x13\xb2H\xe0\xae\xea=#+\x92\xd3\xe6[W\x94X\x96\xfe\xa3\x137\xe9\xfe\xcc6F\xb9\x0b\xc3NO\x93Ksy\xc4A\xcb"\xf0\xc1\xa0\x83\xa3\xc4@\xbb\\\xb8\xfd\xbem\'(A\x9f\x0fV\x9f\xe1\xc0\x97\xd0\x95W"a\x94\xfdymv\xa2>P\x9d\xcc\x80\xc13B\xd0\nu\xd4\x04\xa9\xc4\xd3\xb5q3\x8f\x08:\xacrm\x1bre\x0e\x9a\xd5\x98\xeez \xd3H\xd2\xed\xdd\x12\xd8\xa2,[\xac\xdf\x13\x9f\xed\xa8\xf5\x98\x97\xb3\xc4\x10\xc3\xa6\x10A\x96.>D\x048\x02~\x9c}\xa5\xd1\x93\xd0I\xe94\x1b\x85\'~0\x92\x82lr')
len(valid_data_as_bytes): 354
Windows fatal exception: access violation

此代码在 macOS 或 Linux 下不会出错。当测试套件中的每个基于 pytest 的测试单独运行时,它也不会出错。然而它始终抛出一个Windows fatal exception: access violation运行整个测试套件时出错。

我一直在看我相信的是实施from_buffer_copy() https://github.com/python/cpython/blob/155938907c2b3df71608ddeaa0a43d2ec1f2c699/Modules/_ctypes/_ctypes.c#L670-L713,但是我不知道如何逐步解决这个问题;在运行了许多测试之后,哪些工具最适合单步执行 Python 的 C 端?或者也许我应该去别处寻找?

除了主线程之外没有任何线程或进程。

事实上,代码效率低下:为了解决这个问题,我强制 Python 复制所有内存块(例如,字节数组转换)。

任何建议都将非常感激!


None

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

如何在Windows下调试Python中的访问冲突内存问题? 的相关文章

  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • feedparser 在脚本运行期间失败,但无法在交互式 python 控制台中重现

    当我运行 eclipse 或在 iPython 中运行脚本时 它失败了 ascii codec can t decode byte 0xe2 in position 32 ordinal not in range 128 我不知道为什么 但
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k

随机推荐