【Dll调试】DLL调试方法

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Dll调试】DLL调试方法 的相关文章

  • 捕获由纯 C++ dll 中的 MFC 应用程序生成的 Windows 消息

    首先 这可能吗 我有一个与某些硬件接口的第三方 dll 它是用MFC编写的 我 从 dll 供应商处 收到了一个示例 Visual Studio 2010 解决方案 该解决方案只有一个项目 调用相关第三方 dll 的 MFC 应用程序 ex
  • dependency walker 在正确运行的系统上给我错误

    我的系统上缺少 dll 我有以下消息 无法加载文件或程序集 mydll dll 或其依赖项之一 当然 mydll 存在于此 它很可能是它所依赖的另一个 dll 我下载了 dependency walker 来检查它可能是什么 我首先在另一个
  • C# - “资源”DLL 无法加载,因为它不存在 - 我如何找到引用以便将其删除?

    我有一个 C 解决方案 它在编译时生成可执行二进制文件 该二进制文件依赖于一个库 该库是我编写的另一个解决方案的产品 所有相关代码都是我创建的 最近 我以相当随意的方式尝试了一些项目设置 试图了解 CLR 构建链接的工作原理 不幸的是 可以
  • 我如何在 Visual Studio 2012 中同时构建项目(dll 和 lib)

    我设法在 dll 模式和库模式下设置构建项目 但不能同时设置 对于构建在 dll 中 项目 gt 属性 gt 配置类型 动态库 dll 项目 gt 属性 gt 目标扩展名 dll 对于内置库 项目 gt 属性 gt 配置类型 静态库 lib
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • 如何安全地将对象(尤其是 STL 对象)传入和传出 DLL?

    如何将类对象 尤其是 STL 对象 传入和传出 C DLL 我的应用程序必须以 DLL 文件的形式与第三方插件交互 并且我无法控制这些插件是使用什么编译器构建的 我知道 STL 对象没有保证的 ABI 并且我担心这会导致我的应用程序不稳定
  • 实体框架、dll、excel

    我用C 编写了Excel使用的dll 该dll是COM注册的 我与 Excel 的连接没有问题 该 dll 使用实体框架 5 从 SQL Server 数据库检索数据 如果我通过控制台应用程序运行该 dll 则该 dll 工作正常 但是当我
  • 防止 Ada DLL 中的名称损坏

    有没有一种简单的方法可以防止在创建 Ada DLL 时 Ada 名称被破坏 这是我的 adb 代码 with Ada Text IO package body testDLL is procedure Print Call is begin
  • 以编程方式确定是否安装了 COM 库 (.DLL)

    C 中是否有一种编程方式来确定是否已安装特定的 COM DLL 或者这是扫描注册表中的 classId 的问题 我通常所做的 如果我再次需要的话也会这样做 是尝试创建一个您知道位于 COM 库中的类的对象实例 通过 ProgID 或 GUI
  • VBA FreeLibrary 不卸载 DLL

    当我使用完一个 DLL 文件后 我需要删除它 代码完成后清理 我尝试在 Excel VBA 中使用 LoadLibrary 和 FreeLibrary 但无论我做什么 Excel exe 都会坚持 DLL 文件 Public Declare
  • 获取进程的所有 DLL

    我想获取为给定进程加载的所有 dll 的列表 我目前正在使用 NET框架4 0 我知道有一个bug https connect microsoft com VisualStudio feedback details 546430 syste
  • 使用 c# 中的 c++ ref 中的引用从 C# 调用 C++ 代码错误

    所以在我的 c dll 文件中我得到了以下函数 DLL void GetUserPass char userName char passWord userName ceva passWord altceva 现在我想从 c 调用它 但它给了
  • 针对 dll/lib 的 cmake 链接

    我的 cmake 的输出是一个静态库 我正在这样创建它 add library myMainLib STATIC BACKEND SOURCES 当我尝试让 myMainLib 链接到第三方 lib dll 时 出现了问题 dll 文件将在
  • 如何将dll作为服务运行?

    我知道如何编写 dll 如何编写服务以及如何运行 dllrundll32 但现在我想编写一个在Windows中作为服务安装的dll 我不知道这是否可能或应该导出 dll 中的哪个函数 如何将 dll 作为服务安装并运行 有几种不同的方法可以
  • 将 dll/lib 链接到 cmake 项目

    我试图将库链接到我的 cmake 项目 但遇到链接器错误 我花了 2 个小时尝试解决这个问题 并创建了一个简单的项目 在其中对所有路径进行了硬编码 CMAKE MINIMUM REQUIRED VERSION 3 0 PROJECT Tes
  • 在 C++ 项目中放置 dll 文件以及如何包含这些文件?

    我读了这个guide http nil techno blogspot co il 2009 10 creating visual studio 2008 application html它将引导您完成使用 Cairo 和 Visual C
  • 在 Delphi 中,我的 DLL 中是否必须分配函数的返回 pchar

    我有一个 DLL 其中有一个返回 pchar 的函数 以避免必须使用 borlndmm 我最初所做的是将字符串转换为 pchar 并返回 Result pChar SomeFuncThatReturnsString 但 90 的情况下我都能
  • 0xc000007b“应用程序无法正确启动”错误?

    我在 Visual Studio 2019 中编写了一个 C 控制台应用程序 并尝试将其部署到另一台 Windows 笔记本电脑 两台笔记本电脑均运行最新的 64 位 Windows 10 我的目标笔记本电脑已安装 最新的 NET Fram
  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • 从 C++ 源文件创建 Windows DLL

    我有多个 C 源文件 我想使用它们创建动态链接库 我在 linux 中使用 gcc shared 和 ln 看到这种情况发生 但是对于 Windows 我想我必须修改源文件才能生成 DLL 有没有办法用提供的源文件生成DLL 类似于linu

随机推荐

  • linux常用开关机指令

    关机命令 xff1a shutdown h now xff08 立刻进行关机 xff09 halt xff08 立刻进行关机 xff09 poweroff xff08 立刻进行关机 xff09 重启命令 xff1a shutdown r n
  • _vimrc (linux版)

    一般放在 xff1a etc vim span class token string 34 vimrc 34 span span class token function vim span config span class token f
  • 01_Unity事件函数OnMouseDown生效条件

    前言 Unity提供了OnMouseDown xff0c OnMouseEnter xff0c OnMouseExit等方法 xff0c 这些方法可以很方便的帮助我们处理鼠标的时间响应 但是需要注意他的生效条件 xff0c 最近我在制作视频
  • 算法题型:滑动窗口(leetcode 209)

    一 209 长度最小的子数组 难度中等 题目描述 给定一个含有 n 个正整数的数组和一个正整数 s xff0c 找出该数组中满足其和 s 的长度最小的连续子数组 如果不存在符合条件的连续子数组 xff0c 返回 0 示例 输入 s 61 7
  • 前端:bootstrap table表格属性、列属性、事件、方法

    目录 一 使用前提 二 基本属性 列参数 事件 方法 多语言 一 使用前提 1 在html中引用table相应的包 lt link rel 61 34 stylesheet 34 type 61 34 text css 34 href 61
  • Git学习(一):Git介绍、仓库和分支等基本概念解释

    目录 一 Git介绍 二 关于git仓库和分支的解释 1 仓库 2 分支 3 例子解释 4 本地与远程建立联系 5 git merge命令解释 6 Merge Request解释 7 尽量避免冲突的做法 8 Upstream概念及使用 9
  • Ubuntu 解决wps缺乏字体

    文章目录 Ubuntu 解决wps缺乏字体 Ubuntu 解决wps缺乏字体 移植windows字体 xff1a 复制 C Windows Fonts 下的字体 到 usr share fonts truetype windows font
  • TensorFlow2安装(超详细步骤-人工智能实践)

    TensorFlow2安装教程 1 前言1 1 版本记录1 2 工具简介 2 详细步骤及安装语句2 1 安装Anaconda2 2 TensoFlow安装2 3 验证是否成功2 4 PyCharm下载与安装2 5 PyCharm环境配置2
  • 图像识别-数据清洗

    1 删除不清晰的图片 xff08 由于图片是从视频里截取到的 xff0c 摄像头在移动的过程中 xff0c 会出现自动对焦 xff09 模糊图片示例 xff1a 2 删除重复度高的图片 xff08 相似度高的图片 xff0c 无法给模型提供
  • 【Linux】nm命令|查看动态库包含的函数符号

    目录 0 前言 1 nm简介 2 nm命令用法和参数说明 3 nm用法和结果说明 4 nm 提示 no symbol 的问题 xff08 strip xff09 0 前言 下文1 3 摘抄自 xff1a Linux nm命令详解 https
  • Xmanager 5远程连接CentOS7图形化界面

    1 安装Xmanager 5 下载链接 xff1a https pan baidu com s 1JwBk3UB4ErIDheivKv4 NA 提取码 xff1a cw04 双击xmgr5 wm exe进行安装 点击 下一步 选择 我接受许
  • ROS遇到问题:rosdep找不到

    当在catkin工作区创建好了包以后 xff0c 要rospack depends1 beginner tutorials xff0c 出现了以下的提示错误 xff1a rospack Error the rosdep view is em
  • 纯JavaScript实现一个带cookie的学生管理系统

    由来 之前写过一个Jsp amp Servlet版本的学生管理系统 发出来之后 xff0c 有一个网友找我给他写JavaScript版本的 xff0c 时间也过去很久了 xff0c 我估摸着他那门课已经结束了 xff0c 所以整理了一下代码
  • FreeRTOS互斥信号量与二值信号量使用时的区别

    1 互斥信号量 互斥信号量的申请与释放是要在同一个任务中进行的 xff0c 不能在一个任务中申请而在另一个任务中释放 互斥信号量主要解决的是 xff0c 我在用的时候 xff0c 别人都不能用 举个例子 xff0c 我在像一段内存中写数据的
  • 小白入门photoscan

    1 安装 我装的是photoscanPro 1 4 5版本 注 xff1a 刚开始是在官网上下载的 xff0c 要收费就点了试用 xff0c 结果当我等了一天把将近200张图片处理完后 xff0c 告诉我试用版不能保存文件 绝望 所以要是像
  • matlab学习(1)strsplit与strtok

    strsplit函数用法 xff1a lt 1 gt 默认使用空格符分割 返回一个cell数组 lt 2 gt 也可以指定第二个参数进行分割 lt 3 gt 第二个参数也可以时包含多个分隔符的元胞数组 lt 4 gt strsplit还可以
  • latex之注释快捷键

    注释快捷键 ctrl 43 T 注释掉选中区域 ctrl U 解除选中区域的注释
  • Ceres-solver安装(win10+vs2015)

    Ceres solver安装 Vs2015 43 win10 文件已经上传至 永久有效 网盘 xff1a https pan baidu com s 1Vj n2Nbp9WFVlbjuXV OxQ 密码 xff1a 3rvo 1 将网盘里的
  • 关于Intellij IDEA的pom.xml添加依赖后仍找不到

    1 在pom xml中添加了junit依赖 也执行了项目 gt reimport xff0c 在本地仓库也确实存在junit依赖包 xff0c 打开里面的jar包也确实有Test class After class等文件 但是编译时仍然说找
  • 【Dll调试】DLL调试方法

    dll本身是没法运行的 xff0c 必须在其它工程调用dll时候才会运行 所以 xff0c 调试dll首先要将调用dll的工程和dll工程联系起来 解决方案中添加dll工程 xff1a 现在dll 和 应用程序两个工程就都在一个解决方案里了