標籤:路徑 vs2015 附加 UI 下載連結 unicode 執行命令 san 編譯過程
環境:windows 10
postgresql版本:postgresql-9.6.5
使用工具:vs2017社區版
協助工具輔助:perl、diff、flex、bison
相關工具:
perl下載連結:http://pan.baidu.com/s/1i5aPilB密碼:k6f0
diff、flex、bison下載連結:http://pan.baidu.com/s/1hrHotes密碼:4ku6
以上工具均為綠色版,解壓後,設定環境變數即可
此處使用的編譯調試工具為vs2017社區版,該版本為免費版,個人使用不存在著作權困擾。
首先離線下載vs2017社區版,也可線上安裝,安裝方式如下:
微軟官方下載官方提供的下載工具:vs_community.exe
cmd中執行以下命令,zh-CN表示中文,en-US表示英文,E:\vs2017表示下載位置:
vs_community.exe--layout E:\vs2017 offline --lang zh-CN
安裝vs2017,選擇如下內容安裝即可:
修改postgresql設定檔,否則編譯過程會出現錯誤。修改內容如下:
E:\PG\postgresql_9.6.5\src\tools\msvc\VSObjectFactory.pm中,將“if ($major > 14)”修改為“if ($major > 15)”,如下所示:
E:\PG\postgresql_9.6.5\src\tools\msvc\Mkvcbuild.pm將“my $vsVersion = DetermineVisualStudioVersion();”修改為“my $vsVersion = ‘14.00‘;”,如所示:
以上兩步解決pg的perl指令碼中不識別vs2017版本的問題,報錯資訊為“Unable to determine VisualStudio version: The nmake version could not be determined. atsrc/tools/msvc/Mkvcbuild.pm line 86.”
用vs開啟檔案“E:\PG\postgresql_9.6.5\src\fe_utils\print.c”,執行如下操作:
然後儲存替換原來的檔案。此處解決的問題:該檔案中的分行符號使用的是各個作業系統通用的分行符號,在windows下編譯會出現警告。報錯資訊為“warning C4819: The filecontains a character that cannot be represented in the current code page (936).Save the file in Unicode format to prevent data loss”
下面編譯postgresql源碼:
然後執行“cd /d E:\PG\postgresql_9.6.5\src\tools\msvc”切換到pg源碼路徑,執行命令“perl build.pl DEBUG”此處為方便調試使用DEBUG模式,編譯時間會比在linux下要長,編譯完成後,如下:
編譯完成後,可以執行“perl vcregress.pl check”跑一下迴歸測試,結果如下:
確認無誤後,執行“perl install.pl E:\pg\pgdb”進行安裝,安裝結果如下:
然後進入到pg安裝目錄“cd /d E:\pg\pgdb”進行建庫操作“initdb.exe -D ../data”,建庫完成後,啟動pg資料庫“pg_ctl.exe -D ../data -llogfile start”,啟動完成後即可進入資料庫“psql -d postgres”
如果需要使用vs調試pg,先將pg代碼使用vs開啟,開啟檔案,找到編譯後的檔案夾“E:\PG\postgresql_9.6.5”,開啟檔案“pgsql.sln”即出現以下提示,因使用vs2015的編譯器編譯,不對項目進行重新導向,選項如下:
確定後,即可使用vs開啟pg源碼。然後確定當前開啟pg的進程ID:
點擊附加,即可附加到進程。
嘗試調試
此時pg在等待輸入,通過堆棧資訊可以看出是等待網路訊息的狀態,最終停止在函數“WaitForMultipleObjects”
使用斷點調試,例如在pg錯誤入口函數下斷點,
如下
然後執行錯誤的SQL語句:
資料庫中並不存在表aaaa,此時vs狀態如下:
以上堆棧資訊即為pg執行錯誤SQL時所使用的函數。
windows下源碼安裝調試postgresql