欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-19 18:13:52
windows 调试 detectron2,mmdetection的c++扩展模块nms, ROIAlign,dcnpycharm,vs附加到进程cpu调试pdb文件...

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

 

 

 

 

本文地址:https://blog.csdn.net/lzg188/article/details/107109783