当前位置:网站首页 > 编程语言 > 正文

vs怎么调试dll(vs怎么调试代码)



最近需要将rtklib的一些功能提取出来,生成动态链接供其他程序调用;

参考资料

调试动态链接库(DLL)http://www.tuicool.com/articles/aQfmIb

利用VS生成.lib及.dll文件http://wangzi6147.github.io/2015/05/05/DLL.html

1)lib文件与.dll文件

.lib文件称作静态链接库,.dll文件称作动态链接库。linux系统下对应的文件为.a文件及.so文件。

Windows平台下c++程序与库的链接有两种方式:静态链接与动态链接。

静态链接只需要.lib文件,此时.lib文件作为静态链接库。打包好的程序只有.exe文件,文件体积较大。

动态链接需要.lib及.dll文件,此时.dll文件作为动态链接库,而.lib文件作为库的入口,被打包到.exe文件中。此时打包好的程序包括.exe文件及.dll文件。

比较这两种方式,显然动态链接更灵活。如果发布的程序需要更新库里的内容,只需要更新对应的dll文件即可,而对其他文件不需要做修改。相反静态链接方式需要更新整个.exe程序,而且会使得.exe文件体积庞大。

2)如何利用VS2013生成.lib及.dll文件

这里以VS2013为例,生成动态链接库。

a、首先创建一个DLL工程:


#ifdef DLL_API

#else

#define DLL_API __declspec(dllexport)

#endif

// 这里以加法为例,其中DLL_API代表可供调用者调用的函数

DLL_API int add(int a, int b);

#include "dll_test.h"

int add(int a, int b)

{

return a + b;

}

其中.lib文件及.dll文件就是我们打包好的库文件。如果其他工程要调用这个库,需要做的是:

1.工程包含dll_test.h头文件;

2.工程包含.lib链接库,作为动态链接库的入口;

3.将.dll文件与生成的.exe文件放在同一目录下,或者将.dll文件所在目录添加到系统环境变量中并重启计算机。

d、几点注意

上面的例子只生成了Debug版本的库文件,如需Release版本,需要重新在Release模式下生成一次。

默认的工程依赖VS环境,如果在没有VS环境机器上不能直接运行。解决办法是工程右键-属性-C/C++-代码生成-运行库,改为/MT(Release)或者/MTd(Debug)

如果生成的库依赖其他动态链接库,需要把依赖的.dll文件一同打包发布。

3)调试DLL

我们在编写程序的过程中,调试是必不可少的步骤,使用vs所带的调试器,即强大也好用,但是对于一般的exe程序,项目中通常只有一个主程序,也就是我们编写的,这样的程序可以具有自己独立的虚拟地址空间,可以独立运行,那么我们在代码中加入断点,调试运行的时候,当运行到断点处的时候,程序就会停止在代码处。通过调试,一方面我们可以知道程序执行的顺序,另一方面可以发现内存存取的错误,或是参数不对等造成的错误,帮助我们及时的纠正,但是对于动态链接库,DLL,它也是一个可执行程序,但是它没有自己独立的虚拟地址空间,在运行的时候,是吧自己的地址映射到exe的虚拟地址空间中,进行执行调用。既然,他不能直接执行,那么如果我们建立一个DLL工程,建立一个DLL项目,又如何才可以加入断点,调试运行呢?下面我就结合实例讲述一下如何调试DLL。

DLL不能单独的执行,所以我们必须要建立一个可执行程序项目,通过这个项目来调用我们编写DLL。一般情况下,如果我们是先编写了DLL项目,那么我就可以再在这个项目解决方案中添加一个新建项目,添加一个新建项目的过程和我们建立普通项目是一样,不一样的是,平时我们利用向导建立项目的时候,只有一个解决方案,一个解决方案中只有一个项目,而在这里是一个解决方案中两个项目;如果我们是先编写了一个可执行程序,也可以通过上面说的方法,在现有的解决方案中添加一个新的项目,建立一个DLL项目。不管如何做,就是要让DLL项目和测试DLL的可执行程序在同一个解决方案中。如下图:


使用默认生成一个新项目。


其中test是测试DLL的程序,dll_test是DLL程序

接着我们要在测试dll的程序中引用dll程序,也就是引用dll_test项目,在test项目上(上图)点右键,选择引用菜单项。得到如下图显示:


完成上面的设置,可以进行DLL的调试了,如下:

假如最后编译没有错,运行时候出现找不到dll文件,那就把上面生成的dll文件放到工程根目录的debug目录下面就可以啦!



https://blog.sciencenet.cn/blog-858128-992020.html



上一篇:GMT绘制GPS速度场


下一篇:DLL显式调用与TCP传输结构体

到此这篇vs怎么调试dll(vs怎么调试代码)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!




版权声明


相关文章:

  • vb什么是方法(vb 方法)2025-08-05 23:36:09
  • max31865三线(ma5ma20ma30三线详解)2025-08-05 23:36:09
  • 颜色代码怎么弄(颜色代码怎么弄出来)2025-08-05 23:36:09
  • 复制代码小游戏(复制代码小游戏有哪些)2025-08-05 23:36:09
  • linux yum命令-y(linux yum命令详解)2025-08-05 23:36:09
  • 瓦罗兰特代码84(瓦罗兰特代码准星)2025-08-05 23:36:09
  • 流量回放优缺点(流量录制与回放)2025-08-05 23:36:09
  • 怎么把手机信息恢复(怎样把信息恢复)2025-08-05 23:36:09
  • 上一章设置下一章(上一章设置下一章怎么设置)2025-08-05 23:36:09
  • 女神异闻录5战斗系统介绍(女神异闻录5 战斗)2025-08-05 23:36:09
  • 全屏图片