成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

內核級Python:調試Python編譯器源碼

開發 后端
Python解釋器不關心代碼如何輸入,只要它能獲取源碼內容即可,因此它專門設立了一個輸入層來處理源碼的讀入。

[[429336]]

python編譯器在執行時,給它指定要執行的源碼文件,或者說直接輸入源碼字符串就可以驅動腳本的執行流程,其基本框架如下:

input層是python編譯器用于獲取源碼的輸入方式,事實上Python能夠有多種方式將源碼信息傳遞給編譯器,例如:

1,執行python -c 然后接著python代碼字符串。

2,python -m 然后跟著要執行的模塊名

3,python 然后跟著腳本文件的路徑

4,通過管道連接方式執行,例如 cat [file] | python

Python解釋器不關心代碼如何輸入,只要它能獲取源碼內容即可,因此它專門設立了一個輸入層來處理源碼的讀入。一旦獲得源碼內容后,解釋器需要做三個動作,第一個是設置編譯選項,如果你用過g++, gcc這類編譯器,你一定了解執行時要有很多設置開關或選項,圖中的configuration模塊就負責這些選項的設置,State用來存儲腳本中設定的各種變量,Module通過解讀腳本后生成的一種便于腳本執行的數據結構。

以下我們會描述一些代碼和數據結構,我們大概知道即可,不需要掌握或完全理解。我們看看解釋器在運行腳本前進行相關配置的代碼,相關代碼在python目錄下的initconfig.h和initconfig.c中。打開initconfig.c,然后搜索PyPreConfig結構體對象,然后按住ctrl并點擊它就可以打開它的定義,它有些字段需要注意:

1,int allocator , 該字段對應內存分配器類型,它其實是個枚舉值,用來選取不同的內存分配器。

2,int isolatd, 設置隔離模式,應該對應python虛擬執行環境,在該環境里進行pip安裝或是環境變量配置不會對全局環境產生影響。

3,int utf8_mode , 設置utf-8模式

在initconfig.c中搜索PyConfig,這個結構體用于運行時配置,例如設置解釋器在執行腳本時是出于調試模式還是優化模式,它還記錄了一些涉及到運行時的環境變量配置。接下來我們在解釋器源碼中設置斷點對其執行進行調試體驗,操作如下圖所示:

首先在python模塊右鍵,選中屬性,點擊調試,在命令參數中輸入python -v -c “print(‘hello world’)”,然后在函數config_parse_cmdline中設置斷點,該函數應該在1875行,這個函數用于解讀執行python解釋器時的命令行參數,設置好后點擊F5啟動調試,我們會看到VS停在斷點設置的地方,然后點擊F10單步,我們可以看看該函數前面幾個變量的內容:

從中我們能看到Python解釋器對應的可執行文件為python_d.exe,繼續往下走可以看到代碼進入case ‘v’,這里打開了verbose模式,這樣Python解釋器執行時會把很多信息打印出來。接下來在main.c中的pymain_run_command函數中設置斷點,這個函數會調用一系列函數執行源碼,該文件在Module目錄下,

 

里面的PyRunSimpleStringFlags函數作用就是執行源碼,我們單步運行該函數,然后打開控制臺就會看到hello輸出來了。上面代碼中函數PyRunSimpleStringFlags的作用就是創建一個Module對象,一個Module對象就是含有__main入口的可執行模塊。

 

責任編輯:武曉燕 來源: Coding迪斯尼
相關推薦

2010-02-02 17:08:26

Python靜態編譯器

2010-02-02 17:08:26

Python靜態編譯器

2010-03-23 11:17:16

Python 動態編譯

2020-01-10 18:04:01

Python編程語言Windows

2013-05-28 10:52:07

Android開發移動開發移動應用

2022-05-23 09:22:20

Go語言調試器Delve

2015-11-16 13:36:35

Python編譯器Nuitka

2017-09-25 08:36:01

CUDAPython編譯器

2010-12-21 10:16:53

2010-01-21 09:11:38

C++編譯器

2010-01-18 10:34:21

C++編譯器

2009-08-10 17:12:54

C#編譯器

2017-03-20 18:01:55

編譯器匯編

2013-03-29 10:02:37

編譯器語言編譯開發

2023-03-26 20:39:01

2021-09-06 11:26:23

Linux 5.15內核編譯器

2010-10-20 13:43:37

C++編譯器

2019-08-06 08:20:07

編譯器工具開發者

2022-02-08 15:15:26

OpenHarmonlinux鴻蒙

2021-09-09 08:00:00

開發Python編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品特级毛片一区二区三区 | 少妇特黄a一区二区三区88av | 欧美国产精品一区二区 | 国产毛片av | 99久久精品视频免费 | 91成人在线视频 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 久久精品国产99国产精品 | 精品99爱视频在线观看 | 久久久久久久国产精品 | 天天操夜夜操 | 不卡一二三区 | 国产在线视频一区二区 | 国产精品一区二区三区在线 | 国精产品一区一区三区免费完 | 日韩精品 | 久久综合影院 | 久久久蜜桃一区二区人 | 日韩精品一区二区三区高清免费 | 欧美在线视频一区二区 | 亚洲一区二区视频在线播放 | 国产精品不卡一区 | 亚洲成人av | 国产精品中文字幕在线观看 | 国产高清一二三区 | 欧美理论片在线 | 99热国产在线播放 | 久久最新 | 天天操操操操操 | 亚洲精品乱码久久久久久黑人 | 国产小视频在线 | 亚洲国产区 | 天堂av中文 | 成人激情视频网 | 国产成人在线观看免费 | 超碰97人人人人人蜜桃 | 亚洲精久| 亚洲视频一区 | 成人av电影免费在线观看 | 97精品国产97久久久久久免费 | 日韩亚洲一区二区 |