【Dll调试】DLL调试方法

165 篇文章 53 订阅

dll本身是没法运行的,必须在其它工程调用dll时候才会运行。

所以,调试dll首先要将调用dll的工程和dll工程联系起来。

解决方案中添加dll工程:

现在dll 和 应用程序两个工程就都在一个解决方案里了:

这时要对dll工程作些设置。

配置属性-常规-输出目录设置为 应用程序的生成目录 (调用dll的应用程序的目录?)

这样一来编译的dll、pbd文件就直接输出到对应应用程序的生成目录下面了

接下来依据一些文章说法,要在dll工程的属性配置:

调试中做些设置,

1、命令->写入应用程序的生成目录(exe目录)

2、命令->参数加入dll对外接口名。

但经我实验,不做这些设置也可以调试。

最后切记,一定要是debug模式才行!

我就是一直配置为release模式,一直没法进入dll工程断点浪费了很多时间。

转自:vs调试dll工程 - eques - 博客园

DLL有三种调试方法:

       方法1:

                如果动态链接库是自己编写的,并且测试代码也是自己编写的,那么此时我们可以将动态链接库和测试代码的工程建立在一起,在调试测试代码的时候,可以直接调用动态链接库中的代码。

我们在测试链接库项目中的100行打个断点,当执行到此处的时候,按F11就会进入到动态链接库项目中的源码中,就可以进行调试了。

   方法2:

如果动态链接库是自己编写的,而调用动态链接库的程序不是自己编写的,那么我们需要设置动态链接库中的项目属性,启动调用动态链接库的程序,形成链接之后,在调试的时候才可以数你在动态链接库中调试。如下图:

                

在项目属性的调试中设置完成对应要启动的exe之后,设置dll为启动项目,即可以运行调试。

方法3:

如果动态链接库不是自己编写,程序也不是自己编写,那么这个时候只能通过Ollydbg或者其他调试工具调试了。使用OD调试dll,需要保证OD目录下有loaddll.exe文件。

需要三个步骤如下:

1)我们可以先借助LordPE获取到导出表中的方法的RVA地址

2)借助OD获取到项目的基址

3)通过基址和RVA计算出来VA,就找到函数了

VS2015动态库静态加载时指定动态库位置的方法

在VS2015中静态加载动态库时,需要将库文件(DLL)拷贝到调用程序所在的路径下,如果所需动态库较多时,就会非常麻烦。可以在项目中指定应用程序搜索动态库的路径,这样就无需再将动态库文件进行拷贝了。

可以通过两种方法为应用程序指定搜索动态库的路径,一种是设置应用程序的“工作目录”,另外一种是设置应用程序的“环境”。

1 设置工作目录

使用VS2015打开调用DLL的应用程序,点击菜单栏“项目->XXX属性”,在“XXX属性”对话框的左侧选择“配置属性->调试”,在对话框右侧的“工作目录”中设置为DLL所在路径,如图1所示。

图1 设置项目的工作目录

2 设置环境变量

使用VS2015打开调用DLL的应用程序,点击菜单栏“项目->XXX属性”,在“XXX属性”对话框的左侧选择“配置属性->调试”,在对话框右侧的“环境”中输入如下代码

path=C:\DLL;

 其中,DLL是DLL文件所在的文件夹绝对路径,如图2所示。

图2 设置项目的环境变量

需要注意的是,在设置了项目的“环境”变量后,需要重新启动VS2015。
————————————————
版权声明:本文为CSDN博主「棉猴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hou09tian/article/details/72777922

  • 7
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi是一种编程语言,它使用Object Pascal作为主要语法,并在Windows平台上广泛应用于开发桌面应用程序。Delphi有一个非常强大的功能,就是可以与C语言进行互操作。 在Delphi中调用C语言的函数或库非常简单。首先,我们需要使用外部声明(External Declaration)来告诉Delphi编译器需要调用C语言函数。这可以通过在Delphi代码中使用`external`关键字和`name`指定函数的名称来实现。例如: ```delphi function MyCFunction(a, b: Integer): Integer; external 'c_library.dll' name 'c_function'; ``` 在这个例子中,`MyCFunction`函数被声明为一个外部函数,指向C语言库中的`c_function`函数。`c_library.dll`是C语言库的动态链接库文件。 接下来,我们可以像调用任何其他Delphi函数一样来使用这个函数: ```delphi var result: Integer; begin result := MyCFunction(10, 20); end; ``` 注意,在调用C语言函数时,需要遵循C语言的函数调用规则,包括参数的类型和顺序。Delphi将会负责将Delphi类型转换为C语言类型,并传递给C语言函数进行处理。 如果C语言函数返回值是一个指针或其他非Delphi类型的数据,我们需要在Delphi中进行相应的类型转换和处理。 总而言之,Delphi与C语言的互操作性使得我们可以利用Delphi的易用性和强大功能,同时调用C语言的函数或库来处理更底层的任务。这为我们提供了更多的开发选择和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值