利用Python協助解讀C/C++程式源碼
- 2019 年 10 月 6 日
- 筆記
利用Python協助解讀C/C++程式源碼
導語
終於更新一個小的python項目來一起動手學習了,今天想看看Redis源碼,可惜太慢太多,思維太亂,於是想到看是否用Python可以分析出這個源碼直接的依賴關係。
這裡說的依賴關係指的是,假設有一個C/C++程式,如下redis-cli.c
:
#include "fmacros.h" #include "version.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include <time.h> #include <ctype.h> #include <errno.h> #include <sys/stat.h>
針對這個文件它引入了多個頭文件,當很多個c程式放到一塊的時候,比如在閱讀redis源碼的時候,你又是如何知道本地文件之間的依賴關係呢?
是不是很亂,也沒有框架感,於是今天這個項目就是解決這種問題,上述就可以得到當前c/c++文件下有多少個頭文件,相互之間的依賴關係圖。
於是,我們今天這個項目出來了,程式碼行數很少,但是我個人覺得非常有意思,也非常使用。
下面讓我來給大家分析與展示實現思路。下面放上我的程式碼地址(或者點擊閱讀原文),如果你需要,歡迎去下載,非常感謝你可以順手star!
https://github.com/Light-City/PyLookSrcRelation
支援的功能
目前支援如下功能:
√輸出訂製,可輸出pdf、png、jpg、svg等格式
√是否展示出系統頭文件
√支援文件夾掃描所有依賴關係
√支援單個文件依賴關係
√支援C與C++源碼依賴
ok,以上就是目前所有的功能。
如何使用:
clone 下載
git clone [email protected]:Light-City/PyLookSrcRelation.git
用戶設置如下: -s參數為在c/c++程式中尋找的頭文件資訊,默認為'#include ' -d參數為文件夾或者c、c++文件 -i參數為包含系統頭文件,如果添加這個參數就是包含,不加就是不包含。 -o參數為輸出格式,默認值為pdf,可以選擇png、svg等
python pylsr.py -h usage: search.py [-h] [-s S] [-d D] [-i] [-o O] Help you understand the source code. optional arguments: -h, --help show this help message and exit -s S, --s S search xx.c/xx.cpp/xx.h etc -d D, --d D your c/cpp file or c/cpp dir -i, --i if you add this config,it will include the head file -o O, --o O output format
只需修改這四個參數,即可實現以上所有功能。
示例1:讀取文件夾,解析所有的c/c++程式的頭文件依賴關係,並輸出pdf格式文件。
python pylsr.py -d './src/' -o 'pdf'

示例2:讀取文件,解析c++程式的頭文件依賴關係,並輸出png格式文件。
python pylsr.py -d 'test.cpp' -o 'png'

示例3:讀取文件,解析c++程式的頭文件依賴關係,包含系統頭文件,並輸出svg格式文件。
```python python pylsr.py -d 'redis-cli.c' -i -o 'svg'

更多內容,請關注本公眾號,歡迎轉發與訂閱!