zoukankan      html  css  js  c++  java
  • OpenCV dll 源码调试—附加到进程

    使用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 外运行时发生崩溃时,将自动启动调试器。 这就是实时调试。
    一旦附加到某个程序,就可以使用调试器执行命令、检查程序状态等等。


  • 相关阅读:
    洛谷P2770 航空路线问题 最小费用流
    洛谷P2766 最长不下降子序列问题 网络流_DP
    洛谷P2763 试题库问题 最大流
    洛谷P2756 飞行员配对方案问题 网络流_二分图
    洛谷P2045 方格取数加强版 最小费用流
    洛谷P1231 教辅的组成 网络流
    LA3231 Fair Share 二分_网络流
    [CTSC1999]家园 分层图网络流_并查集
    力扣题目汇总(丑数,重复N的元素,求众数)
    力扣题目汇总(最长连续递增序列,旋转图像(中等),宝石与石头)
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411881.html
Copyright © 2011-2022 走看看