2015-08-19 64 views
0

使用Eclipse CDT和GDB調試Postgresql 9.3我從java的背景下使用eclipse(java)中的調試器來調試PostgreSQL 9.3和Eclipse CDT和GDB

我已經安裝的PostgreSQL 9.3作爲此鏈接指出:https://wiki.postgresql.org/wiki/Working_with_Eclipse

調試器能正常工作的服務器(其等待和接受傳入客戶端連接)。

  1. 當我一個客戶端連接:$ psql的測試 .Does服務器爲客戶端創建一個新的線程?

  2. 是否有可能在parser.c或executor.c中的postgresql源文件中附加調試器和設置斷點,以便我可以分析postgresql查詢的執行方式?

我試圖安裝調試,並設置在parser.c斷點和在client.But它不在斷點處停止執行一些查詢。

由於提前

回答

0

當我連接與客戶端:$ psql test,服務器是否爲客戶端創建一個新的線程?

號服務器創建一個新的postgres(或者,在Windows,postgres.exe過程與郵局主管和經由共享存儲器和信號的其它過程通信。 PostgreSQL使用默認的無共享多處理體系結構,而不是默認的多線程共享體系結構。

是否可以附加調試器,並設置在PostgreSQL的源文件parser.c或executor.c斷點,這樣我可以分析查詢PostgreSQL的如何執行?

是的,如果你的調試器可以按照後端叉從郵局主管,或者如果您直接將調試器附加到要調試的後端。後者更常見,除非您正在調試後端啓動。

典型的工作流程是:

  • 連接與psql
  • SELECT pg_backend_pid()
  • 調試器連接到該進程ID
  • 設置斷點,並根據需要和恢復執行
  • 在同一手錶psql會話,運行你要調試的查詢後臺執行
  • 切換到調試程序時,它捕獲並開始調試

這工作在Linux上使用gdb和Windows與Visual Studio。推測它也可以與Eclipse一起工作。

更多在the developer FAQ


這是可能來代替調試郵政局長和使用gdb的多進程調試功能與follow-fork-modedetach-on-forkschedule-multiplenon-stop選項,但它的複雜,得到正確的,嘈雜的,如果你將是混亂'習慣了gdb的正常中斷行爲。這也有點尷尬,因爲PostgreSQL使用gdb也使用的信號,所以需要一些hack來解決這個問題。請參閱a blog post I wrote on the topic earlier

我建議保持它簡單,並附上使用pg_backend_pid