利用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'

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