gpt4 book ai didi

debugging - 如何在 Visual C++ 中调试外部库 (OpenCV)?

转载 作者:太空宇宙 更新时间:2023-11-03 20:42:44 24 4
gpt4 key购买 nike

我正在用 VC++2008 开发一个项目。该项目使用 OpenCV 库(但我想这适用于任何其他库)。我正在使用调试配置,链接器属性包括库 .lib 的调试版本作为附加依赖项。在工具|选项下的 VC++ 目录中,我设置了包含目录、.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));

我在此行设置了一个断点,以查看 cvStereoCalibrate() 函数如何失败。不幸的是,当我点击“Step into”时,调试器不会显示这个函数的源代码。它立即跳到 cvTermCriteria()(这是一个简单的内联宏函数)并显示其内容。我还需要做什么才能在调试器中输入外部库函数吗?

编辑:我认为 cvTermCriteria() 函数显示在调试器中,因为它是在头文件中定义的,因此可以立即访问项目。

EDIT2:库文件缺少 .pdb 文件,现在我在调试配置中用 Visual C++ 重新编译了 OpenCV 库,.pdb 文件存在但调试器仍然不可见:

Loaded 'C:\Users\DarekSz\Documents\Visual Studio 2008\Projects\libcci\Debug\ccisample.exe', Symbols loaded.
'ccisample.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll'
'ccisample.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll'
'ccisample.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll'
'ccisample.exe': Loaded 'C:\OpenCV2.1\bin\cv210d.dll'
'ccisample.exe': Loaded 'C:\OpenCV2.1\bin\cxcore210d.dll'

显然没有为 opencv dll 加载符号。尽管如此,.pdb 文件仍存在于\bin 目录中。

最佳答案

总结一下评论中的所有事件:解决方案的关键是在VC++中重建库以获得用于调试的.pdb(程序调试数据库)文件,预编译的“-d”后缀库没有足够的。尽管如此,库 dll 的导入库使程序从 OpenCV 包树加载预编译的 dll,而不是我使用 .pdb 信息构建的那些(路径相似,所以我一开始没有注意到)。 .pdb 文件的路径在工具|选项中提供,但由于模块版本不匹配(很明显),这些文件未加载。一旦我将正确的 dll 及其各自的 .pdb 文件复制到应用程序目录,调试器就开始在库函数内部工作。

关于debugging - 如何在 Visual C++ 中调试外部库 (OpenCV)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2720953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com