Как отладить внешнюю библиотеку (OpenCV) в Visual C ++? - PullRequest
8 голосов
/ 27 апреля 2010

Я занимаюсь разработкой проекта в VC ++ 2008. В проекте используется библиотека OpenCV (но я думаю, это относится к любой другой библиотеке). Я работаю с конфигурацией Debug, свойства компоновщика включают отладочные версии библиотеки .lib в качестве дополнительных зависимостей. В каталогах 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));

Я установил точку останова в этой строке, чтобы увидеть, как происходит сбой функции cvStereoCalibrate (). К сожалению, отладчик не покажет исходный код этой функции, когда я нажму «Шаг вперед». Он сразу пропускает к cvTermCriteria () (это простая встроенная макроподобная функция) и показывает его содержимое. Что еще мне нужно сделать, чтобы иметь возможность вводить функции внешней библиотеки в отладчике?

РЕДАКТИРОВАТЬ: Я думаю, что функция cvTermCriteria () отображается в отладчике, потому что она определена в заголовочном файле, поэтому сразу же доступна для проекта.

EDIT2: для файлов библиотеки отсутствовали файлы .pdb, теперь я перекомпилировал библиотеку OpenCV в Visual C ++ в конфигурации отладки, файлы .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. Тем не менее, файлы .pdb существуют в каталоге \ bin.

Ответы [ 3 ]

12 голосов
/ 28 апреля 2010

Подводя итог всей активности в комментариях: ключом к решению было перестроить библиотеку в VC ++, чтобы получить файлы .pdb (Program Debug Database) для отладки, предварительно скомпилированные библиотеки суффикса "-d" не были довольно. Тем не менее, библиотеки импорта для библиотечных библиотек заставили программу загружать предварительно скомпилированные библиотеки из дерева пакетов OpenCV, а не из моей сборки с информацией .pdb (пути были похожи, поэтому я сначала не заметил). Путь к файлам .pdb был указан в Tools | Options, но эти файлы не были загружены из-за несоответствия версий модуля (очевидно). После того, как я скопировал правильные dll и соответствующие им файлы .pdb в каталог приложения, отладчик начал работать внутри библиотечных функций.

3 голосов
/ 27 апреля 2010

Подтвердите: вы на самом деле компилируете библиотеку OpenCV из исходного кода или просто ссылаетесь на нее?

На ум приходит пара возможностей:

Похоже, что отладочная информация для библиотеки OpenCV недоступна (файлы PDB). Возможно, вам придется расширить PATH для ссылки на каталог, содержащий эти файлы. Мне кажется, что есть способ сделать это из VC ++, но я через несколько лет от использования инструмента ...

Является ли cvStererCalibrate "макрофункцией"? Если это так, выясните, к какой реальной функции она относится, и установите точку останова в библиотеке.

Наконец, хотя вы уже сказали это, никогда не повредит вернуться и подтвердить, что полная отладка активирована для всего в проекте, включая внешние библиотеки.

Я не знаю, помогает ли это, но это хорошее место для начала.

2 голосов
/ 15 ноября 2010

У меня такие же проблемы, как:

'ccisample.exe': загружен 'C: \ OpenCV2.1 \ bin \ cv210d.dll'

'ccisample.exe': загружен 'C: \ OpenCV2.1 \ bin \ cxcore210d.dll'

Я решил это:

Линкер -> Ввод -> Дополнительные зависимости add: 'cv210.lib; cxcore210.lib; highgui210.lib; '

вместо добавления: 'cv210d.lib; cxcore210d.lib; highgui210d.lib;»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...