使用CMake可以生成OpenCV源码的解决方案,然后就可以对OpenCV函数进行修改,功能剪切等操作了,对这部分内容感兴趣的可以浏览一下上一篇文章:CMake生成OpenCV解决方案&&编译OpenCV源码

自己修改过的函数实现可能有Bug,或者我们想跟踪查看DLL被别的程序调用时候的运行情况,这个时候就可以用到VS编译器的一个调试功能—“附加到进程”。

例如对于OpenCV的高斯滤波函数GaussianBlur,它的位置在moudles->opencv_imgproc->Src->smooth.cpp里,如果 要查看函数被调用时的实现细节,可以编译OpenCV源码,生成dll动态库,对应的动态库是opencv_imgproc2413d.dll, 把编译生成的这个动态库替换掉原OpenCV目录下的这个dll文件,接下来新建一个调用GaussianBlur函数的工程,命名为GaussianBlurTest:

#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"
#include <Windows.h> using namespace cv; int main(int argc, char *argv[])
{
Mat image = imread("Test.jpg");
Mat imageGau;
Sleep(30000);
GaussianBlur(image, imageGau, Size(5, 5), 0.5);
imshow("Source Image", image);
imshow("Gaussian Image", imageGau);
waitKey();
return 0;
}

函数里边Sleep了30S是为了有足够的时间在GaussianBlur函数执行之前把这个进程添加到OpenCV源码工程中。

在OpenCV源码GaussianBlur函数入口处加一个断点:

对GaussianBlurTest工程直接Ctrl+F5运行,或者编译项目之后运行GaussianBlurTest.exe文件,在exe文件运行起来之后,在OpenCV源码工程中点击调试->附件到进程(或者直接快捷键Ctrl+Alat+P),在弹出的对话框中选中GaussianBlurTest.exe:

这样就会在调用到GaussianBlur函数的时候命中断点,然后就可以单步调试程序了:

使用这种方法可以很方便的检查DLL中函数的问题,不至于在由于DLL中函数的BUG导致崩溃的时候束手无策。

跟踪调试DLL中的函数实现只是附加到进程调试的一部分,微软对调试到进程有如下的说明,贴出来:

为什么调试附加进程?

Visual Studio 调试器可以附加到在 Visual Studio 外运行的进程。 可以使用此附加功能执行以下操作:

  • 调试并非在 Visual Studio 中创建的应用程序。
  • 同时调试多个进程。 也可以通过在单个解决方案内启动多个项目来调试多个进程。
  • 调试正在远程计算机上运行的进程。
  • 调试一个 DLL,该 DLL 运行在不易从 Visual Studio 启动的独立进程上。例如,与 Internet 信息服务一起运行的服务或 ISAPI DLL。
  • 当一个进程在 Visual Studio 外运行时发生崩溃时,将自动启动调试器。 这就是实时调试。

一旦附加到某个程序,就可以使用调试器执行命令、检查程序状态等等。

OpenCV dll 源码调试—附加到进程的更多相关文章

  1. 能把opencv的源码也进行调试吗?(需要pdb文件才行)

    能把opencv的源码也进行调试吗?(需要pdb文件才行)1.我是用的Qt Creator,然后"工具\选项\调试器\概要\源码路径映射"中,选择"添加Qt源码" ...

  2. vs2008 c#项目调试dll源码,问题:“若要调试此模块,请将其项目生成配置更改为“调试”模式” 的解决方案

    情况: 1:有程序 Trans.exe 的vs2008 c#源码:Trans.exe项目里引用了 Water.dll: 2:有Water.dll的项目源码: 3:想在Trans.exe里调试Water ...

  3. 开启Tomcat 源码调试

    开启Tomcat 源码调试 因为工作的原因,需要了解Tomcat整个架构是如何设计的,正如要使用Spring MVC进行Web开发,需要了解Spring是如何设计的一样,有哪些主要的类,分别是用于干什 ...

  4. [原创]在Windows和Linux中搭建PostgreSQL源码调试环境

    张文升http://ode.cnblogs.comEmail:wensheng.zhang#foxmail.com 配图太多,完整pdf下载请点这里 本文使用Xming.Putty和VMWare几款工 ...

  5. 使用cocos创建的项目,如何进行源码调试?

    环境cocos3.10,里面包含了cocos2dx 3.10引擎.但是用cocos创建出来的项目,使用的lib和dll是文件夹Cocos\Cocos2d-x\cocos2d-x-3.10\prebui ...

  6. udf.dll 源码

    一点关于UDF的发散思路 Author:mer4en7y Team:90sec 声明:UDF源码作者langouster 相信各位牛对UDF都不会陌生,看论坛叶总共享了一份UDF源码,以前一直没看过, ...

  7. Android FrameWork 学习之Android 系统源码调试

    这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...

  8. Android FrameWork学习(二)Android系统源码调试

    通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android 系统源码,今天 ...

  9. 在Eclipse中进行HotSpot的源码调试--转

    原文地址:http://www.linuxidc.com/Linux/2015-05/117250.htm 在阅读OpenJDK源码的过程中,经常需要运行.调试程序来帮助理解.我们现在已经可以编译出一 ...

随机推荐

  1. (转)chrome浏览器收藏夹(书签)的导出与导入

    导出chrome浏览器的书签到一个文件中.首先选择chrome浏览器的书签管理器菜单.然后点击“整理”,然后选择“将书签导出到html文件”. 步骤阅读 2 将导出的html文件保存,用于下次导入,这 ...

  2. 博客已迁移至http://blog.csdn.net/lujinhong2/

    http://blog.csdn.net/lujinhong2/ 请继续关注

  3. 致ITFriend用户

    ) 全权处理,相关问题请和他沟通. 祝大家中秋节快乐,一家团团圆圆. 小雷FansUnion   湖北 武汉   2014年9月7日 --------------------------------- ...

  4. [Recompose] Render Nothing in Place of a Component using Recompose

    Learn how to use the ‘branch’ and ‘renderNothing’ higher-ordercomponents to render nothing when a ce ...

  5. HTML5 canvas 指针时钟

    <!doctype html> <html> <head></head> <body> <canvas id="> 您 ...

  6. Oracle null 处理

    null first null last 解决啦-

  7. ORACLE会话数、连接数配置

    ORACLE会话数.连接数配置 ORACLE会话数.连接数配置 ORACLE的会话数和连接数参数配置 以sysdba身份登录 sqlplus sys/xxxx as sysdba; 查看最大连接数: ...

  8. [Node.js] Take Screenshots of Multiple Dimensions for Responsive Sites using Nightmare

    When developing responsive websites, you will constantly be resizing your browser to make sure your ...

  9. freemarker自己定义标签报错(七)

    1.错误描写叙述 六月 09, 2014 11:11:09 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template pr ...

  10. [React] Public Class Fields with React Components

    Public Class Fields allow you to add instance properties to the class definition with the assignment ...