zoukankan      html  css  js  c++  java
  • 【调试】DLL EXE 调试技巧

     

     

    0、随便说点

        最近因为一些原因一直都没有更新博客,从今天开始要逐渐恢复了,也是对自己的鞭策。

    1、本文目标

        本文要说在有DLL 和 EXE源码的情况下调试DLL 和 EXE, 工具是VC++2010,相信很多同学都会,肯定也有很多同学不会。 自己也曾经因为不懂怎么调试DLL、ActiveX控件而在调试的时候费很多劲。

    今天就来说一说一个简单的调试方法。

    2、应用场景

        一个DLL:add.dll, 导出了一个函数Add计算两个数的和

        一个EXE:useadd.exe,使用add.dll提供导出函数来计算结果

        假设DLL 和 EXE在不同的解决方案中(在同一个解决方案中的方法是一样的),现在要在EXE的源码中调试进DLL的源码。   同时又分两种情况:①运行EXE ②调试EXE    下面会分别说明。

    3、运行EXE 调试进DLL

        为了不让EXE的代码一下执行过DLL中的导出函数,在该函数之前先加行代码暂停(比如MessageBox, cin输入流等)

        ①启动EXE

        ②在EXE中代码执行到DLL导出函数之前,在DLL项目代码中添加断点

        ③选择调试菜单--附加到进程--选择之前的EXE进程

        ④继续让EXE中代码执行即可

    4、调试EXE  调试进DLL

        这种情况下当调试DLL附加到EXE进程时,【附加】按钮是灰色不可用的,因为此时EXE正在被调试,其承载进程是VS调试器,所以应该在进程列表中选择  进行附加,其他步骤相同。

    5、补充

        调试ActiveX控件类似

    6、再次补充

        我们通常会遇到这样一种情况:【运行】(而非调试)EXE,发现有些运行结果不是期望的,这个时候我们就要【调试】一下看问题在哪里。

    这个时候怎么办呢?  关掉EXE进程,如何重新F5?? 呵呵, 我以前就是这样。。  

       应该这样:在VS打开的项目里,还是点击 菜单【调试】-【附加到进程】-在进程列表中选择当前项目对应的EXE进程,附加即可。

  • 相关阅读:
    讲讲HashCode的作用
    自定义一个类加载器
    从为什么String=String谈到StringBuilder和StringBuffer
    System.load(String filename)和System.loadLibrary(String libname)的区别
    自己实现一个Native方法的调用
    Java对象表示方式1:序列化、反序列化和transient关键字的作用
    Java对象表示方式2:XStream实现对对象的XML化
    static关键字作用
    final的作用
    多态
  • 原文地址:https://www.cnblogs.com/cuish/p/3993946.html
Copyright © 2011-2022 走看看