首页 > 编程语言 >gdb同时调试python和c++

gdb同时调试python和c++

时间:2023-01-30 17:55:05浏览次数:33  
标签:python c++ dbg gdb 源码 build path

说明:

当我们的python程序的一些函数的后端实现为C++时(比如Pytorch, TensorFlow或tvm等)可以使用当前方法调试。
有两种方式可以安装调试环境:

一. 搭建环境

有两种方式搭建环境,第一种是用apt安装dbg包,第二种方式是编译python源码。

1.1 安装python的dbg包方式

以python3.5为例

sudo apt install python3.5-dbg

1.2 下载python源码包编译方式

以Python3.7为例,因为我的ubuntu apt中没有python3.7的dbg包。

1.2.1下载源码包

省略

1.2.2 编译Python源码包
cd /path/to/python/source
mkdir build
cd build
../configure --with-pydebug
make  #会在build目录下生成python-gdb.py
make test
make install
1.2.3 设置gdbinit
vim ~/.gdbinit
添加
add-auto-load-safe-path /path/to/python/source/build
#gdb 在启动时会根据~/.gdbinit 中的设置到/path/to/python/source/build中加载python-gdb.py

二.验证

运行
gdb python3.5 (如果是用源码包的方式则用gdb python3.7)
输入py按Tab键, 可以看到如下命令
在这里插入图片描述

三.使用

运行gdb,然后在C++程序中打断点,程序运行后进入断点时可以使用py-bt命令查看python的调用栈。

 

标签:python,c++,dbg,gdb,源码,build,path
From: https://www.cnblogs.com/lidabo/p/17076845.html

相关文章

  • python的split函数切分字符串时为什么会产生空字符串
    群里的一个小伙伴提了一个问题,他使用split函数切分字符串得到的结果里有空字符串,他对空字符串的出现感到困惑不解。text='1aa2'print(text.split('a'))#['1','',......
  • 使用python的tempfile模块创建临时文件
    什么样的情况下需要我创建临时文件呢?我很早就知道tempfile这个模块,但一直没有使用过它,也没有兴趣去研究它,一度认为自己用不到这个模块。存在即合理,合理的才能存在,想来是我不......
  • python判断一个进程是否存在的3种方法
    在python中,如何判断一个进程是否存在呢?可以使用Popen执行shell命令判断进程是否存在,或者检查/proc目录下是否存在进程相对应的目录,最佳的方法是向进程发送信号0,下面分别介......
  • python读取csv文件的正确方式
    准备数据name,age小明,14小刚,15通常,我们用下面的代码读取csvimportcsvwithopen(r'C:\Users\zhangdongsheng\Desktop\data.csv',encoding='utf-8')asf:reader=csv......
  • 一文看懂python的迭代器和可迭代对象
    阅读完本文,你将收获以下知识点:什么是迭代器和可迭代对象,他们之间有什么关系迭代器可以迭代的底层原理是什么如何自定义可迭代对象和迭代器迭代器和可迭代对象是两个非常难以......
  • 从python列表里删除一个元素会对reversed() 产生怎样的影响
    这是一个在stackoverflow上看到的问题,非常的有趣且值得研究。1.iter使用iter函数返回列表的迭代器,随后从列表里删除一个元素,在遍历迭代器时,输出的内容会是怎样的呢?lst=['......
  • 用python实现一个自动保存复制图片的功能
    由于经常写作,需要为文章准备一些配图,通常这些配图是从百度图片搜索里准备的。在准备图片时,我遇到了两个小麻烦:有些图片的格式是webp,需要在另存为时指定格式有些图片需要剪切......
  • zodb,一个python对象数据库
    1.什么是对象数据库关系型数据库,是指采用了关系模型来组织数据的数据库,以行和列的形式存储数据库,典型如mysql。NoSQL数据库,是指非关系型数据库,典型如mongodb。对象数据库,是......
  • python怎么做类型标注
    文章目录​​1.为变量做类型标注​​​​1.1简单的数据类型​​​​1.2使用Optional​​​​1.3使用Union​​​​1.4为容器类型做标注​​​​1.4.1为集合做标注​......
  • c++多线程调用python
    脚本语言是快速编写富有弹性的代码的重要方法之一,在 Unix 系统自动化管理中已经应用了多种脚本语言。现在,在许多应用开发中,也提供了脚本层,这大大方便用户实现通用任务自......