windows下调试 detectron2或者mmdetection 的c++ 扩展模块,如nms,ROIAlign,dcn等

1,环境说明:

1)window10, pycharm, vs2017

2)被调试框架:pytorch, detectron2,mmdetection等(不限于)

 

2,步骤
1)首先要detectron2,mmdetection下编译通过,生成c++扩展的pyd,

例如:要生成roi_pool_cuda.cp36-win_amd64.pyd,nms_cuda.cp36-win_amd64.pyd,

_C.cp36-win_amd64.pyd等

2)编译cpu版本(debug调试最好用cpu)

把setup.py中的关于cuda的编译全部注释掉即可编译cpu版本。如:

    #if (torch.cuda.is_available() and CUDA_HOME is not None) or os.getenv("FORCE_CUDA", "0") == "1":
    #    extension = CUDAExtension
    #    sources += source_cuda
    #define_macros += [("WITH_CUDA", None)]
    #    extra_compile_args["nvcc"] = [
    #        "-DCUDA_HAS_FP16=1",
    #        "-D__CUDA_NO_HALF_OPERATORS__",
    #        "-D__CUDA_NO_HALF_CONVERSIONS__",
    #        "-D__CUDA_NO_HALF2_OPERATORS__",
    #    ]

    # It's better if pytorch can do this by default ..
    #    CC = os.environ.get("CC", None)
    #    if CC is not None:
    #       extra_compile_args["nvcc"].append("-ccbin={}".format(CC))

    sources = [os.path.join(extensions_dir, s) for s in sources]

3)编译debug版本

windows版本会调用默认的vs编译器编译c++扩展。本文设为vs2017

编译debug版就要添加vs2017编译器的编译选项

修改setup.py以生成调试文件。必须将'/Zi' '/Od'添加到 extra_compile_args'/DEBUG'extra_link_args

示例:

extra_compile_args = ['/Zi', '/Od']

 ext_modules = [
        extension(
            "xx._C",
            sources,
            include_dirs=include_dirs,
            define_macros=define_macros,
            extra_compile_args=extra_compile_args,
            extra_link_args=['/DEBUG'],
        )
    ]

编译完成后生成*.pdb文件,如:_C.cp36-win_amd64.pdb

注意:

如果c++扩展模块是cpu,debug版,则框架(detectron2,mmdetection)也必须是cpu版本的,不能使用gpu版本

4)vs2017下 附加到进程进行调试

在pycharm下加断点于c++扩展模型函数上

打开vs2017->调试->选项->符号对话框中把3)中生成的*.pdb文件添加进去

vs2017->调试->附加到进程,选择python.exe进程

vs2017 打开c++扩展的cpp文件,并在要调试行上添加断点

pycharm上调试进入c++扩展模型函数,则断点就会进入到vs中,就可以进行调试了。

 

3,后记

祝你好运!!!

参考:

https://www.geek-share.com/detail/2711891029.html

https://www.cnpython.com/qa/82660

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值