GDAL庫調試(包括跨語言調試)

來源:互聯網
上載者:User

很多時候都需要調試GDAL庫,尤其是像學習GDAL庫中的某些演算法是如何?的時候,調試就必不可少了。

首先說明用C++的調試。以VS2008為例進行說明。

編譯DEBUG版本的GDAL庫,這個可以參考我之前的部落格。可以用命令列編譯,也可以用IDE編譯,但是實質都是一樣,修改nmake命令的參數。也就是給nmake命令後加一句DEBUG=1即可。

編譯完成之後,應該會在gdal的源碼目錄中產生下面幾個檔案,如。

調試時用到的檔案主要就是pdb檔案,請確保pdb檔案存在,大小應該在30M以上說明是可以調試的,有時候產生的pdb檔案會小於10M,這時應該清理GDAL的工程,然後重新編譯就好了。

將上面gdal110.dll、gdal110.pdb、gdal110.ilk等檔案拷貝至你的測試工程中的exe所在目錄,然後使用調試方式啟動程式,在程式調用GDAL庫中的函數時,按F11鍵應該就可以進入GDAL的源碼檔案中。

如果GDAL的pdb檔案在程式啟動時沒有載入,就不能進入GDAL的源碼。判斷是否載入GDAL的pdb檔案,可以在VS的輸出視窗中看到“gdal110.dll已載入符號”的字樣就說明載入成功,可以調試,如所示。

然後在程式中添加斷點即可。在OGRRegisterAll函數處設定斷點,如。

程式執行到該句之後,按F11鍵,程式自動會跳轉到GDAL源碼檔案中,如所示:

然後就可以調試GDAL的原始碼了,其他函數類似。或者你提前將要調試的GDAL源碼用VS開啟,添加斷點,然後直接按F5,不出意外的話,程式會在GDAL源碼中設定的斷點處進行暫停。

  跨語言調試(以C#為例)

GDAL同時可以跨語言調試,下面以C#為例進行說明。

首先請確保編譯的GDAL版本是debug的版本,具體方式參考上面或者之前的部落格。編譯完C++版本的Debug的GDAL庫後,接下來編譯C#版本,同樣也要編譯Debug版本。具體方式與編譯C++類似,也是在編譯時間指定DEBUG=1即可。編譯命令如:

編譯完之後,在gdal\swig\csharp目錄中可以看到一大批exe、pdb檔案。如果編譯的不是Debug版本,是不會產生pdb檔案的。可以通過是否產生pdb檔案來判斷編譯的是否debug版本。如所示。

將上面編譯的C#版本中的八個dll以及對應的pdb、lib、ilk、exp等檔案一同拷貝到C#的測試程式中exe所在目錄。如所示。

接下來在C#引用中,添加C#版本八個dll中檔案名稱中帶有_csharp的四個dll。

然後在C#代碼中的Ogr.RegisterAll()函數處設定斷點,如所示。

編譯通過後,按F5啟動偵錯模式。程式在斷點處中斷,然後按F11,VS會自動進入swig封裝的C#代碼中,如所示。

此時接下來,再按F11是不可能進入C++的原始碼中。要進入C++的原始碼中,要進行下面的設定。第一,設定C#的程式屬性,啟用Unmanaged 程式碼調試,如紅色框地區所示。

第二,需要提前將C++的原始碼開啟,比如函數RegisterAll的C++代碼在檔案gdal-1.10.0\ogr\ogrsf_frmts\generic\ogrregisterall.cpp中,開啟該檔案,並在函數開頭添加斷點,如所示。

通過上面兩步設定,就可以通過C#來調試GDAL的原始碼了。與上面一樣,按F5啟動,同樣可以通過輸出視窗看到是否已經載入pdb檔案了。

啟動後,直接按F5,程式就自動在C++的代碼中設定的斷點處進行中斷,如所示。

本文完。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.