numpy C語言源代碼調試(一)


近期學習numpy,希望了解numpy內部實現機制,嘗試調試numpy的源代碼,特別是其中的C語言源碼。

在numpy的官方網站上,有numpy的開發人員手冊:

https://docs.scipy.org/doc/numpy/dev/

通過git下載numpy的源代碼

 

git clone https://github.com/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)
np.empty_like(x)

 運行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)
np.empty_like(x)

 運行gdb進行調試 

gdb --args python runtests.py -g --python mytest.py


 

接下來是幾種gdb圖形界面調試器的使用,待續。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM