如何在macos远程服务器(azure管道)上调试python wheel构建

如何在macos远程服务器(azure管道)上调试python wheel构建,python,macos,debugging,azure-pipelines,Python,Macos,Debugging,Azure Pipelines,我尝试为imagecodecspython包构建轮子。以前的版本我没有任何问题。 对于当前版本,我有linux(manylinux2010)和macos的控制盘,但不支持openmp 我还希望使用openmp支持进行构建。为此,我使用brew中的gcc 从以前版本的imagecodecs到dependency,添加了snappy、zopflipy和更改版本的jxrlib 我使用cibuildweel来构建轮子,因此它是使用从官方pkg文件安装的python构建的。 构建通过,然后在测试启动时失败

我尝试为
imagecodecs
python包构建轮子。以前的版本我没有任何问题。 对于当前版本,我有linux(
manylinux2010
)和macos的控制盘,但不支持openmp

我还希望使用openmp支持进行构建。为此,我使用
brew
中的
gcc

从以前版本的
imagecodecs
到dependency,添加了
snappy
zopflipy
和更改版本的
jxrlib

我使用
cibuildweel
来构建轮子,因此它是使用从官方
pkg
文件安装的python构建的。 构建通过,然后在测试启动时失败(在azure管道上)

python(53258,0x7fffa20fb380)malloc:**对象0x109c85c00的错误:未分配要释放的指针

当我把它下载到我的电脑上时,整个测试集都通过了

在azure管道上,没有登录计算机的选项。我试着用
lldb--batch-o“br set-n malloc\u error\u break“-o”run“-o”bt“-o”c”-python-m pytest{project}/tests/

然后我得到:

+ lldb --batch -o "br set -n malloc_error_break" -o "run" -o "bt" -o "c" -- python -m pytest /Users/runner/runners/2.163.1/work/1/s/tests/
(lldb) target create "python"
Current executable set to 'python' (x86_64).
(lldb) settings set -- target.run-args  "-m" "pytest" "/Users/runner/runners/2.163.1/work/1/s/tests/"
(lldb) br set -n malloc_error_break
Breakpoint 1: where = libsystem_malloc.dylib`malloc_error_break, address = 0x00000000000119e6
(lldb) run
============================= test session starts ==============================
platform darwin -- Python 2.7.17, pytest-4.6.8, py-1.8.0, pluggy-0.13.1
python(53294,0x7fff97d45380) malloc: *** error for object 0x10fc3ec00: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Process 53294 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x00007fff5f7d89e6 libsystem_malloc.dylib`malloc_error_break
libsystem_malloc.dylib`malloc_error_break:
->  0x7fff5f7d89e6 <+0>: pushq  %rbp
    0x7fff5f7d89e7 <+1>: movq   %rsp, %rbp
    0x7fff5f7d89ea <+4>: nop    
    0x7fff5f7d89eb <+5>: nopl   (%rax)
Target 0: (python) stopped.

Process 53294 launched: '/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp_g9gpq37/bin/python' (x86_64)
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
  * frame #0: 0x00007fff5f7d89e6 libsystem_malloc.dylib`malloc_error_break
    frame #1: 0x00007fff5f7ca82d libsystem_malloc.dylib`free + 400
    frame #2: 0x000000010face5bd libstdc++.6.dylib`std::locale::_Impl::~_Impl() + 109
    frame #3: 0x00007fff97d24998 libsystem_c.dylib`__stdinp + 8
(lldb) c

+lldb--batch-o“br set-n malloc\u error\u break“-o”run“-o”bt“-o”c”-python-m pytest/Users/runner/runners/2.163.1/work/1/s/tests/
(lldb)目标创建“python”
当前可执行文件设置为“python”(x86_64)。
(lldb)设置设置--target.run-args“-m”“pytest”“/Users/runner/runners/2.163.1/work/1/s/tests/”
(lldb)br set-n malloc\u错误\u中断
断点1:where=libsystem\u malloc.dylib`malloc\u error\u break,address=0x00000000000119e6
(lldb)运行
===========================================测试会话开始==============================
平台darwin——Python 2.7.17、pytest-4.6.8、py-1.8.0、Plugy-0.13.1
python(53294,0x7fff97d45380)malloc:**对象0x10fc3ec00的错误:未分配要释放的指针
***在malloc\u error\u break中设置断点以进行调试
进程53294已停止
*线程#1,队列='com.apple.main thread',停止原因=断点1.1
帧0:0x00007fff5f7d89e6 libsystem_malloc.dylib`malloc_error_break
libsystem_malloc.dylib`malloc_error_break:
->0x7fff5f7d89e6:pushq%rbp
0x7fff5f7d89e7:movq%rsp%rbp
0x7fff5f7d89ea:nop
0x7fff5f7d89eb:nopl(%rax)
目标0:(python)已停止。
启动进程53294:“/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tmp_g9gpq37/bin/python”(x86_64)
(lldb)英国电信
*线程#1,队列='com.apple.main thread',停止原因=断点1.1
*帧0:0x00007fff5f7d89e6 libsystem_malloc.dylib`malloc_error_break
帧#1:0x00007fff5f7ca82d libsystem_malloc.dylib`free+400
帧#2:0x0000000105BD libstdc++.6.dylib`std::locale::_Impl::~_Impl()+109
帧#3:0x00007fff97d24998 libsystem_c.dylib`u stdinp+8
(lldb)c
全部代码都在这里

管道在这里

知道我如何调试这个吗?如何找到创建指针的位置


编辑
在这种情况下,问题与使用gcc-9
/
g++-9
编译zopflipy有关。我需要使用
clang`

编译测试依赖项。当运行管道时,您可以选中启用系统诊断以获取详细日志

您还可以单击添加变量到添加一个名为
system.debug
的变量,并将其值设置为
true
。请参阅


如果您想在代理计算机上登录。您可以配置,这将允许您登录并对生成进行故障排除。

系统调试。不要更改任何内容。我只能使用一台macos机器,在上面一切都很好。一切看起来都像一个线程试图在分配变量之前释放它。但我不知道如何正确地调试它。调试器没有显示足够的信息(整个StActTrace是在系统LIB中),没有交互工作的选项。您可以检查本地Mac OS的C++编译器版本,并指定在构建管道YML中使用相同的版本。它说这个错误可以通过修改编译器的版本来修复。问题是我在azure管道上下载了wheel build并在本地机器上启动它。它是有效的。在azure管道机器上对此控制盘进行运行测试时出现问题。主要区别在于,在机器上我使用brew中的python,而在azure管道上使用python表单pkg(官方安装程序)