今天使用opencv里的mat想要保存數據里邊的像素的平均值和標准差;
但是編程好了之后會出現下面的問題,不能找到pdb file 。下面將提供三種解決方法以及產生問題的原因。
程序也運行不出來,整個人都不好了。后來上貼吧和網上搜,有很多種解決辦法,但是對我最用的是第1個:
方法1.首先確認是不是建立的空項目而不是win32位控制台項目,如果建立的是空項目,建議把空項目改成win32位控制台項目,問題一下子就解決了。
方法2.還有種說法是其實問題在於,在空項目中不生成調試文件pdb,所以無法調試。
要讓項目生成pdb文件,需要更改:
項目屬性,configuration properties->linker->Generate Debug Info 從 no 改為 yes
但這樣還是不夠的,還需要更改:
項目屬性,configuration properties->c/c++->debug information format為/ZI
項目屬性,configuration properties->c/c++->optimization為Disabled
因為為了生成這個文件,需要設定debug信息的格式並關掉O2,還要更改linker生成調試信息的開關
在運行FBX的sample程序時發現提示:debug information of xxx.exe cannot be found or not match ,於是首先在網上找了下相關資料,得到如下建議:
1) Goto Project->HelloWorld Properties
2) On the left expand "Configuration Properties"
3) Expand "C/C++"
4) On the left, Select "General"
5) On the right, change "Debug Information Format" to "Program Database For Edit And Continue (/ZI)"
5) On the left, Select "Optimization"
6) On the right, change "Optimization" to "Disabled (/Od)"
7) On the left, expand "Linker"
8) On the left, select "Debugging"
9) On the right, change "Generate Debug Info" to "Yes"
10) Click ok
11) Set your breakpoints
12) Rebuild your application
實際上按照以上操作以后,問題仍然存在,因為對Visual配置不是很熟,於是繼續看其他人的文章,覺得有可能是.pdb文件的原因,因為pdb文件是Visual存儲調試信息的地方,而visual在運行時確實有如下提示:
'ImportExport.exe': Loaded 'C:/Program Files/Autodesk/FBX/FbxSdk/2012.1/bin/ImportExport/win32/net2010/debug/ImportExport.exe', Cannot find or open the PDB file
即找不到pdb文件,因此無法調試。
在visual里找到pdb相關的配置選項,共2個如下:
configuration property->c/c++->output files->program database file name
這是編譯時產生的pdb文件的輸出位置,vs在編譯后會將該位置符合$(TargetName).pdb格式的文件復制到configuration property->general的output directory目錄中(不知道是哪里的設置起作用),作為運行時debug信息。不過這一pdb文件包含的信息包括類型信息,但不包括函數定義等符號信息。因此,即使每個源文件都包含公共頭文件(如 <windows.h>),這些頭文件中的 typedef 也只存儲一次,而不是在每個 OBJ 文件中都存在(見下面的定義)。因此這個pdb文件是不足以做調試之用的。
configuration property->linker->debugging->generate program database file
這是鏈接時鏈接器產生的pdb文件的輸出位置,它包含項目的 EXE 文件的調試信息。該 文件包含完整的調試信息(包括函數原型),而不僅僅是在 上一個.PDB 中找到的類型信息。
這兩個 PDB 文件都允許增量更新。鏈接器還在其創建的 .exe 或 .dll 文件中嵌入 .pdb 文件的路徑。
對照項目配置,很快發現問題所在。output files->program database file name里設置的文件名符合$(TargetName).pdb的格式,因此被復制到output directory目錄中,而linker->debugging->generate program database file設置的文件名也剛好是這個位置,因此就沒有被復制進來,所以“鵲巢鳩占”引起的后果是,包含完整調試信息的9mb大的pdb文件沒有被如約創建,而1mb大的pdb文件被錯誤的復制倒了不該放的地方,自然.exe文件就找不到debug信息了。
方法3.Ctrl + F5運行就可以了。或者在cmd命令行下執行程序。或者"Microsoft Symbol Servers"勾上(Tools -> Options -> Debugging -> Symbols).
以下作為參考:
VISUAL c+中的pdb文件及其作用
程序數據庫 (PDB) 文件保存着調試和項目狀態信息,使用這些信息可以對程序的調試配置進行增量鏈接。當以 /ZI 或 /Zi(用於 C/C++)生成時,將創建一個 PDB 文件。
在 Visual C++ 中,/Fd 選項用於命名由編譯器創建的 PDB 文件。當使用向導在 Visual Studio 中創建項目時,/Fd 選項被設置為創建一個名為 project.PDB 的 PDB。
如果使用生成文件創建 C/C++ 應用程序,並指定 /ZI 或 /Zi 而不指定 /Fd 時,則最終將生成兩個 PDB 文件:
VC80.PDB (更籠統地說就是 VCx0.PDB,其中 x 表示 Visual C++ 的版本。)該文件存儲各個 OBJ 文件的所有調試信息並與項目生成文件駐留在同一個目錄中。
project.PDB 該文件存儲 .exe 文件的所有調試信息。對於本機 C/C++代碼,它駐留在 /debug 子目錄中。對於托管代碼,它駐留在 /WINDEBUG 子目錄中。
每當創建 OBJ 文件時,C/C++ 編譯器都將調試信息合並到 VCx0.PDB 中。插入的信息包括類型信息,但不包括函數定義等符號信息。因此,即使每個源文件都包含公共頭文件(如 <windows.h>),這些頭文件中的 typedef 也只存儲一次,而不是在每個 OBJ 文件中都存在。
鏈接器將創建 project.PDB,它包含項目的 EXE 文件的調試信息。project.PDB 文件包含完整的調試信息(包括函數原型),而不僅僅是在 VCx0.PDB 中找到的類型信息。這兩個 PDB 文件都允許增量更新。鏈接器還在其創建的 .exe 或 .dll 文件中嵌入 .pdb 文件的路徑。
Visual Studio 調試器使用 EXE 或 DLL 文件中的 PDB 路徑查找 project.PDB 文件。如果調試器在該位置無法找到 PDB 文件或者如果路徑無效(例如,如果項目被移動到了另一台計算機上),調試器將搜索包含 EXE 的路徑,即在“選項”對話框(“調試”文件夾,“符號”節點)中指定的符號路徑。調試器不會加載與所調試的二進制不匹配的 PDB。