[pybind11] debug C++代码

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

项目的结构如下:

在这里插入图片描述

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

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

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

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)

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()
...

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文件

4、测试编译是否正常

# 在项目根目录执行
python test.py

# 输出结果:
# i: 1, j: 2
# 3

5、debug

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

另外打开一个终端

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

返回第一个终端

# 执行test.py
run test.py

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "Verdi Debug C"是一种用于调试C语言程序的工具。Verdi是一个集成的调试环境,它提供了各种功能来帮助开发人员分析和修复C语言程序中的错误。 Verdi Debug C具有以下特点和功能: 1.源代码级调试:Verdi Debug C允许开发人员逐行调试C语言程序,以便更好地理解程序的执行流程和变量的值。它可以在源代码级别下暂停程序执行,以便开发人员检查变量的值、条件语句的结果和函数调用的顺序。 2.变量观察:Verdi Debug C提供了一个变量窗口,可以实时监视程序中所有变量的值。这使得开发人员可以在调试过程中检查变量的状态,并识别问题所在。 3.条件断点:Verdi Debug C允许开发人员设置条件断点,即只在满足特定条件时才暂停程序的执行。这对于定位特定问题或在特定情况下调试程序非常有用。 4.数据可视化:Verdi Debug C提供了数据可视化工具,帮助开发人员以图形方式呈现数组、结构体和其他复杂数据结构的值。这大大简化了复杂数据结构的调试过程。 5.回溯:当程序中发生错误或异常时,Verdi Debug C可以提供完整的回溯信息,包括函数调用序列和各个函数的参数和变量值。这可以帮助开发人员追踪问题发生的位置和原因。 总的来说,Verdi Debug C是一个强大的调试工具,它提供了多种功能来帮助开发人员识别和解决C语言程序中的错误。它可以加快调试过程,提高开发效率,并最终改善程序的质量和性能。 ### 回答2: verdi debug c 是一种在C语言中进行调试的工具。VERDI是一个完全集成的调试和验证环境,适用于硬件描述语言和软件开发。它提供了强大的功能,可以帮助程序员快速定位和修复代码中的错误。 使用verdi debug c,你可以在调试过程中观察变量的值,查看函数的输入和输出参数,以及跟踪程序的执行流程。它还提供了一些高级功能,比如断点和条件断点,可以方便地暂停程序的执行,以便检查程序的状态。 在进行c语言调试时,verdi debug c还可以配合一些其他工具一起使用,比如gcc编译器和gdb调试器。通过这些工具的协作,可以更有效地进行调试,提高程序的质量和稳定性。 总之,verdi debug c是一个强大而实用的调试工具,它可以帮助程序员在C语言开发中更快地定位和修复错误,提高代码的质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值