neu*_*rte 8 debugging opencv visual-c++
我正在VC++ 2008中开发一个项目.该项目使用OpenCV库(但我想这适用于任何其他库).我正在使用Debug配置,链接器属性包括库.lib的调试版本作为附加依赖项.在Tools | Options下的VC++目录中,我设置了include目录,.lib目录,以及库的源目录.我在调用库中的一个函数时遇到错误,我想确切地看到该函数正在做什么.产生错误的行是:
double error = cvStereoCalibrate(&calObjPointsM, &img1PointsM, &img2PointsM,
&pointCountsM,
&cam1M, &dist1M, &cam2M, &dist2M, imgSize, &rotM, &transM, NULL, NULL,
cvTermCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 100, 1e-5));
Run Code Online (Sandbox Code Playgroud)
我在这一行设置了一个断点,看看cvStereoCalibrate()函数是如何失败的.不幸的是,当我点击"Step into"时,调试器不会显示此函数的源代码.它会立即跳转到cvTermCriteria()(这是一个简单的内联,宏类型函数)并显示其内容.为了能够在调试器中输入外部库函数,我还需要做些什么吗?
编辑:我认为cvTermCriteria()函数在调试器中显示,因为它在头文件中定义,因此可以立即访问项目.
EDIT2:库文件缺少.pdb文件,现在我在调试配置中重新编译Visual C++中的OpenCV库,.pdb文件存在,但仍然以某种方式对调试器不可见:
已加载'C:\ Users\DarekSz\Documents\Visual Studio 2008\Projects\libcci\Debug\ccisample.exe',已加载符号.
'ccisample.exe':已加载'C:\ Windows\SysWOW64 \ntdll.dll''ccisample.exe'
:已加载'C:\ Windows\SysWOW64\kernel32.dll''ccisample.exe
':已加载'C:\ Windows\SysWOW64\KernelBase.dll''ccisample.exe'
:已加载'C:\ OpenCV2.1\bin\
cv210d.dll''ccisample.exe':已加载'C:\ OpenCV2.1\bin\cxcore210d.dll'
对于opencv dll,这些符号显然没有加载.仍然,.pdb文件存在于\ bin目录中.
neu*_*rte 12
总结注释中的所有活动:解决方案的关键是在VC++中重建库以获取用于调试的.pdb(程序调试数据库)文件,预编译的"-d"后缀库是不够的.仍然,库dll的导入库使程序从OpenCV包树加载预编译的dll,而不是我的构建中带有.pdb信息的那些(路径类似,所以我最初没有注意到).工具|选项中提供了.pdb文件的路径,但由于模块版本不匹配(显然),因此未加载这些文件.一旦我将正确的dll及其各自的.pdb文件复制到应用程序目录,调试器就开始在库函数内部工作.