1. 程式人生 > >除錯opencv程式,怎麼在vs執行下直接調到opencv的原始碼

除錯opencv程式,怎麼在vs執行下直接調到opencv的原始碼

好久不更博了,今天來點實際的大雷子

關於在vs中檢視opencv的原始碼,一直是我想實現的,

可是看網上搜怎麼看opencv原始碼,就僅僅一個版本 ,cmake編譯原始碼,然後開啟opencv.sln,搜尋你要看的函式名稱,,或者不開啟open.sln,僅僅開啟某個功能的.sln,,在modules資料夾下任意模組的中的sln,也可以,這個會快點嘛,,可是可是可是

一般想看原始碼的情況 大部分都是在自己的opencv程式,debug除錯當中,f12進入函式定義,直接想跳入opencv的原始碼,這才叫真正的看原始碼吧,

今天在overflow搜了好多,加上自己的嘗試,ok了,

1,cmake編譯opencv原始碼,然後開啟oepncv.sln,debug,release下都build一遍,這是會出現bin檔案,lib檔案,以及install檔案:

bin檔案你會發現有了dll,還有pdb檔案,一一對應,lib檔案同樣也多了exp檔案;
而install檔案你會發現和一鍵安裝opencv時生成的檔案一樣, 有lib include bin;
我之前配置檔案時時選擇install內的lib bin路徑, 但是今天看完國外的一些建議後,說 pdb檔案是很重要的,它是除錯符號檔案,包含了原始碼的路徑細節,所以我又重新配置的opencv的各個路徑,但是bin下的符號檔案怎麼新增到vs中呢,,在 工具-》選項-》除錯下,常規欄目中 勾選 啟用原伺服器支援,它下面的也勾選,,然後除錯下面的 符號 勾選Microsoft符號伺服器。
以上是按stack overflow上的做法,但是程式你生成ok後,debug執行,這是你要看輸出視窗,依然還是顯示
。。

已載入“D:\\opencv_imgproc249d.dll”。已載入符號。無法查詢或開啟 PDB 檔案。

。。

system2的pbd顯示ok, opencv的找不到,,,所以在你單步執行時,遇到opencv自帶的函式,F11進入,你仍然進入的是.h標頭檔案,而不是相應的cpp

                                    分割線                                                                              

ok,下面的方向就是徹底能看到除錯時原始碼了,

2、既然vs還是提示看不到opencv的pdb檔案,那還是在工具-》選項-》除錯-》符號,沒有正確配置,

首先我嘗試的是在Microsoft符號伺服器下右上角有個新增,我輸入opencv_calib3d249d.pdb,然後執行,看輸出視窗還是提示說 無法查詢或開啟 PDB 檔案,,又發現右上角是資料夾的新建,ok,我把debug的pdb路徑輸入,D:\opencv2492\opencv\build20170706gai\bin\Debug,,在執行程式加斷點,完美,輸出視窗 

。。

已載入“D:\opencv2492\opencv\build20170706gai\install\bin\opencv_imgproc249d.dll”。已載入符號。

。。

在opencv自帶函式處加斷點,F11,哇,cvLoadImage(), 調到opencv的src檔案內的d:\opencv249\opencv\sources\modules\highgui\src\loadsave.cpp,,可以看到oepncv自帶函式的實現了,點雲庫PCL想看原始碼,也一樣

但有個不太好,之前常用F12進入函式定義,程式執行不執行都可以調到cpp定義,在這是不行的,必須程式是在執行狀態下,debug下,F11單步執行才可以進入opencv原始碼的cpp

補充:

1,cmake release也生成了pdb檔案,那release下也可以應該看到原始碼的

2,把opencv原始碼路徑也要加上,忘說了,在配置屬性 -》vc++目錄-》源目錄,D:\opencv2492\opencv\sources\modules

3、除錯看原始碼應該不止這一種方式,看overflow,,靜態lib??,,待嘗試


原文地址:http://blog.csdn.net/zkl99999/article/details/77863735