VS调试第三方库的方法如OpenCV
前言
VS在调试程序的时候依赖pdb文件(其中存放了源文件信息)
但是程序使用install中的.dll时总是找不到其pdb文件虽然它们放在一个文件夹下。当调试引用了第三方库的程序时,会有
“test_Debug.exe”(Win32): 已加载“D:\build\OpenCV\install\bin\opencv_highgui2410d.dll”。无法查找或打开 PDB 文件
的问题,此时我们是不能调试dll中的源码。
解决方案
我发现程序连接的dll是我放在环境变量中的dll,它总是报无法查找或打开PDB文件的错误,于是,我将编译时的bin文件下的dll和pdb文件考到了我的exe目录下,即不使用环境变量中的dll了。此时就可以成功加载了。
“Win32Project1.exe”(Win32): 已加载“D:\build\OpenCV\x64\Debug\opencv_highgui2410d.dll”。已加载符号。
跟进
我又试着将编译bin下的dll和exp更新到install中,发现那些引用install中的dll的程序也可调试了,也可以找到PDB了,所以我猜测,其实问题出我多次编译了库,使得我在install中的版本不是最新的版本(最新的dll和pdb)造成了install中的pdb与源文件“失联”。
更进一步,Linux下不存在PDB文件,即其源码应该在库文件中(当然是debug版),我猜这与Linux的GNU的思想相符,即开源的思想,但window下会考虑源码泄露的问题,只要不给别人PDB文件,调试debug版的库依然是不能得到源码的。即使我们平时得到的都是release版。