码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • [pybind11] debug C++代码


    首先要有一个项目,我发布在github上了【传送门】

    项目的结构如下:

    在这里插入图片描述

    其中src目录下是C++代码,test.py是python测试代码。

    然后直接开始演示。
    1、把项目下载到本地

    git clone --recursive https://github.com/immortalmin/pybind11_debug_eg.git
    
    • 1

    2、修改CMakeLists.txt(包括当前项目和pybind11),各添加两行代码
    当前项目:

    # pybind_debug_eg/CMakeLists.txt
    cmake_minimum_required(VERSION 3.4...3.18)
    project(cmake_example)
    
    # ------- 添加这两行 -------
    set(CMAKE_BUILD_TYPE Debug)
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
    
    add_library(mymath STATIC src/mymath.cpp)
    set_target_properties(mymath PROPERTIES POSITION_INDEPENDENT_CODE ON)
    
    add_subdirectory(pybind11)
    pybind11_add_module(cmake_example src/binder.cpp)
    target_link_libraries(cmake_example PRIVATE mymath)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    pybind11:

    # pybind11_debug_eg/pybind11/CMakeLists.txt
    ...
    cmake_minimum_required(VERSION 3.5)
    
    # ------- 添加这两行 -------
    set(CMAKE_BUILD_TYPE Debug)
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
    
    # The `cmake_minimum_required(VERSION 3.5...3.26)` syntax does not work with
    # some versions of VS that have a patched CMake 3.11. This forces us to emulate
    # the behavior using the following workaround:
    if(${CMAKE_VERSION} VERSION_LESS 3.26)
      cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
    else()
      cmake_policy(VERSION 3.26)
    endif()
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3、编译项目

    # 1.先切换回项目的根目录
    # 2.
    mkdir build; cd build
    # 3.-DPYTHON_EXECUTABLE是python的路径
    cmake .. -DPYTHON_EXECUTABLE=/Users/username/miniconda3/bin/python
    # 4.
    cd ..
    python setup.py build_ext --inplace
    # 然后就生成了一个.so文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4、测试编译是否正常

    # 在项目根目录执行
    python test.py
    
    # 输出结果:
    # i: 1, j: 2
    # 3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5、debug

    # 1.运行ipython。没安装的直接运行 pip install ipython
    ipython
    # 2.进入ipython后,运行下面的命令,找到ipython的pid。假设为11003
    In [1]: !ps aux | grep -i ipython
    
    • 1
    • 2
    • 3
    • 4

    另外打开一个终端

    # 1.运行lldb
    lldb
    # 2.进入lldb后
    (lldb) attach --pid 11003
    # 3.
    (lldb) c
    # 4.在想要debug的地方打上断点
    (lldb) breakpoint set -f mymath.cpp -l 5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    返回第一个终端

    # 执行test.py
    run test.py
    
    • 1
    • 2

    你会发现卡住了,这时候第二个终端就会显示debug的画面
    在这里插入图片描述
    在这里插入图片描述
    参考博客与视频:
    Debugging C/C++ libraries called by Python
    Using C++ in python with pybind11 and cmake

  • 相关阅读:
    谈谈数字化转型晓知识
    nablet Elements released处理视频的组件
    在计算机中尝试利用程序读入一幅彩色图像,显示原图及其灰度图像,并查看灰度图像中背景及物体的灰度数据。
    DockerCompose - 部署 Nexus 私服
    由于找不到MSVCP140.dll,无法继续执行代码,重新安装程序可能会解决此问题的”修复方案
    什么是网段
    java个人资金账户管理计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    UNIAPP day_01(8.30) uin-app概述
    非零基础自学Java (老师:韩顺平) 第12章 异常 - Exception
    华大HC32外设驱动开发汇总
  • 原文地址:https://blog.csdn.net/lmmmmmmmmmmmmmmm/article/details/134468081
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号