好久不更博了,今天来点实际的大雷子
关于在vs中查看opencv的源码,一直是我想实现的,
可是看网上搜怎么看opencv源码,就仅仅一个版本 ,cmake编译源码,然后打开opencv.sln,搜索你要看的函数名称,,或者不打开open.sln,仅仅打开某个功能的.sln,,在modules文件夹下任意模块的中的sln,也可以,这个会快点嘛,,可是可是可是
一般想看源码的情况 大部分都是在自己的opencv程序,debug调试当中,f12进入函数定义,直接想跳入opencv的源码,这才叫真正的看源码吧,
今天在overflow搜了好多,加上自己的尝试,ok了,
1,cmake编译opencv源码,然后打开oepncv.sln,debug,release下都build一遍,这是会出现bin文件,lib文件,以及install文件:
bin文件你会发现有了dll,还有pdb文件,一一对应,lib文件同样也多了exp文件;
而install文件你会发现和一键安装opencv时生成的文件一样, 有lib include bin;
我之前配置文件时时选择install内的lib bin路径, 但是今天看完国外的一些建议后,说 pdb文件是很重要的,它是调试符号文件,包含了源码的路径细节,所以我又重新配置的opencv的各个路径,但是bin下的符号文件怎么添加到vs中呢,,在 工具-》选项-》调试下,常规栏目中 勾选 启用原服务器支持,它下面的也勾选,,然后调试下面的 符号 勾选Microsoft符号服务器。
以上是按stack overflow上的做法,但是程序你生成ok后,debug运行,这是你要看输出窗口,依然还是显示
。。
已加载“D:\\opencv_imgproc249d.dll”。已加载符号。无法查找或打开 PDB 文件。
。。
system2的pbd显示ok, opencv的找不到,,,所以在你单步执行时,遇到opencv自带的函数,F11进入,你仍然进入的是.h头文件,而不是相应的cpp
分割线
ok,下面的方向就是彻底能看到调试时源码了,
2、既然vs还是提示看不到opencv的pdb文件,那还是在工具-》选项-》调试-》符号,没有正确配置,
首先我尝试的是在Microsoft符号服务器下右上角有个添加,我输入opencv_calib3d249d.pdb,然后运行,看输出窗口还是提示说 无法查找或打开 PDB 文件,,又发现右上角是文件夹的新建,ok,我把debug的pdb路径输入,D:\opencv2492\opencv\build20170706gai\bin\Debug,,在运行程序加断点,完美,输出窗口
。。
已加载“D:\opencv2492\opencv\build20170706gai\install\bin\opencv_imgproc249d.dll”。已加载符号。
。。
在opencv自带函数处加断点,F11,哇,cvLoadImage(), 调到opencv的src文件内的d:\opencv249\opencv\sources\modules\highgui\src\loadsave.cpp,,可以看到oepncv自带函数的实现了,点云库PCL想看源码,也一样
但有个不太好,之前常用F12进入函数定义,程序运行不运行都可以调到cpp定义,在这是不行的,必须程序是在运行状态下,debug下,F11单步执行才可以进入opencv源码的cpp
补充:
1,cmake release也生成了pdb文件,那release下也可以应该看到源码的
2,把opencv源码路径也要加上,忘说了,在配置属性 -》vc++目录-》源目录,D:\opencv2492\opencv\sources\modules
3、调试看源码应该不止这一种方式,看overflow,,静态lib??,,待尝试