numpyC语⾔源代码调试(⼀)
近期学习numpy,希望了解numpy内部实现机制,尝试调试numpy的源代码,特别是其中的C语⾔源码。
linspace numpy在numpy的官⽅⽹站上,有numpy的开发⼈员⼿册:
通过git下载numpy的源代码
git clone github/numpy/numpy.git
使⽤下⾯的命令之⼀可以进⾏测试
python runtests.py -v
python runtests.py -v -s random
python runtests.py -v -t numpy/core/tests/test_nditer.py::test_iter_c_order
python runtests.py --ipython
python runtests.py --python somescript.py
python runtests.py --bench
python runtests.py -g -m full
使⽤下⾯的命令进⾏编译
python setup.py build_ext -i
调试
⾸先创建⼀个⽤于测试的python⽂件,例如mytest.py
from numpy import linspace #注意这⾥写错了
x = np.arange(5)
 运⾏gdb进⾏调试 
gdb --args python runtests.py -g --python mytest.py
然后在gdb中设置断点后运⾏
(gdb) break array_empty_like
(gdb) run
numpy的开发⼈员⼿册中完全是春秋笔法,多余的话⼀句都没有,⾮常⾔简意赅,但是实际成功进⾏调试还是很困难的,通过试验,实现了原始gdb调试以及多种GUI前端的调试⽅式。
以下是具体环境和做法:
环境
调试这⼀类程序,我⾸选的是Linux,因为各种所需的软件和运⾏库,只要⼏条命令就可以了。
⽤虚拟机安装Ubuntu 18.04.2 64bit,该版本默认安装了python 2.7和3.6.7,这⾥主要使⽤python 3.6.7,所以⽂档⾥⾯使⽤python的地⽅需要改为python3。
为了⽅便软件包的安装,需要安装pip3
sudo apt install python3-pip
测试
在克隆好的numpy的源代码⽬录中,执⾏以下命令:
python runtests.py -v
如果命令失败,可能是缺少⼀些软件包,例如cython,使⽤如下命令进⾏安装
sudo apt install cython
gdb调试
上述步骤正确之后,可以使⽤官⽅提供的⽅法开始gdb的调试了,但是gdb是⼀个完全命令⾏的调试器,使⽤起来⾮常费⼒,我还是习惯于图形界⾯的调试器。
⾸先创建⼀个⽤于测试的python⽂件,例如mytest.py,注意官⽅⽂档写错了。
import numpy as np
x = np.arange(5)
 运⾏gdb进⾏调试 
gdb --args python runtests.py -g --python mytest.py
接下来是⼏种gdb图形界⾯调试器的使⽤,待续。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。