调试包含在 C++/CLI DLL 中的静态库时,调试器不会单步执行本机代码

2024-01-09

在 C# 应用程序中,我引用了本机 C 静态库,我将其包装在 C++/CLI DLL 中。我选择静态库而不是 DLL,因为我还有与向用户发布应用程序的过程相关的其他限制。在该论坛上提供的许多主题中,我发现了以下实现。

Main :

{
  MyCLRDLL test = new MyCLRDLL();
  if(test.go()) Console.WriteLine("Hello, wrld");
}

在DLL项目中,文件MyCLRDLL.hpp

#include "MyNativeLib.h"
#pragma comment(lib, "MyNativeLib.lib")
namespace InteropTest {
public ref class MyCLRDLL
{
  CMyNativeLib* mInt ;
  public:
    MyCLRDLL()  { mInt = CMyNativeLib_New() ;} ;
    ~MyCLRDLL() { CMyNativeLib_Delete(mInt) ;} ;
    bool go() { return mInt->areYouThere()  ;} ;
};
}

在原生项目中,MyNativeLib.h

namespace InteropTest
{
class __declspec(dllexport) CMyNativeLib
{
public:
  CMyNativeLib() {};
    ~CMyNativeLib(){};
  bool areYouThere() ;
} ;
extern "C" __declspec(dllexport) CMyNativeLib* CMyNativeLib_New();
extern "C" __declspec(dllexport) void CMyNativeLib_Delete(CMyNativeLib* pLib);
}

and MyNativeLib.cpp

#include "MyNativeLib.h"
namespace InteropTest {
extern "C" __declspec(dllexport) CMyNativeLib* CMyNativeLib_New(){return new CMyNativeLib() ;}
extern "C" __declspec(dllexport) void CMyNativeLib_Delete(CMyNativeLib* pLib){delete pLib;}
bool CMyNativeLib::areYouThere() { return true ; }
}

调试器没有单步执行 mInt->areYouThere() 函数。为什么会这样?本机部分中的断点也不会被捕获。

为 MyCLRDLL 加载符号,“启用非托管代码调试”在 C# 项目上处于活动状态,“调试/调试器类型”对于两个 C 项目都设置为“混合”,并且在常规选项中,大多数相关内容似乎已选中。

这是否意味着 MyCLRDLL.pdb 文件不包含 lib 代码中的调试信息?如何检查?

(可能与未回答的问题相同调试 CLR .dll 中包含的非托管 C++ 静态库 https://stackoverflow.com/questions/13324341/debugging-an-unmanaged-c-static-lib-included-in-a-clr-dll)


我尝试了与你相同的设置。 C# exe 项目,引用具有 CLR 支持的 .dll 项目,该项目引用具有纯本机 C++ 代码的 .lib。

首先,在可执行项目属性中,您必须在“调试”选项卡下启用“本机代码中的调试”。 接下来,您将无法在附加调试器的情况下运行,因为它不会加载 CLR 本机部分的符号。我成功地在没有附加调试器的情况下运行,然后将 CLR 项目设置为启动项目。之后,您必须使用 CTRL+ALT+P 附加到进程,并在“附加到:”中使用本机代码。 这对我来说有效。

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

调试包含在 C++/CLI DLL 中的静态库时,调试器不会单步执行本机代码 的相关文章

  • 如何制作包含DLL文件的JAR文件?

    我购买了一个第三方Java库 其中包括一个JAR文件和两个DLL文件 我编写了自己的 Java 程序来调用第三方 JAR 文件 现在我的问题是如何将我的所有代码打包到一个 JAR 文件中 其中包含我的所有代码以及第三方 JAR 和 DLL
  • 当线程无法访问所有已用堆时查找 Java 内存泄漏

    我正在研究基于 Java 的大型系统中潜在的内存泄漏 或至少是内存浪费 JVM 运行时的最大堆大小为 5 GB 2 3GB 堆使用量是应用程序的预期基准 可能会有更高的峰值 在我正在调查的过载场景中 堆被填满 使用 Eclipse Memo
  • 开始调试和附加到进程有什么区别

    当我将项目附加到我的 w3wp exe IIS 工作进程时 我的项目加载速度明显快于 开始调试 时的加载速度 但是 无论我 开始调试 还是 附加到进程 同一个工作进程似乎都在处理相同数量的模块 DLL w3wp exe 为什么附加到进程的速
  • 如何在 C++/CLI 中转发声明委托?

    How 以下内容无效 delegate MyDelegate ref class MyDelegate delegate void MyDelegate 申报工作如下 public delegate void MyDelegate Obje
  • 如何在Java程序中调用DLL中的方法

    我正在尝试使用 JNA 调用 DLL 中的方法 到目前为止已经使用加载了DLL Runtime getRuntime load myworkspace test dll 该 dll 包含我需要访问的方法 如何在我的 Java 文件中执行 D
  • 适用于 Windows 的免费内存调试器? [复制]

    这个问题在这里已经有答案了 可能的重复 有 Windows 的良好 Valgrind 替代品吗 https stackoverflow com questions 413477 is there a good valgrind substi
  • C++ 虚(密封)函数

    我在我的 C 项目中使用 dll 中的类 一切都工作正常 直到 当尝试调用某个方法 在对象浏览器中列出 时 我收到一条错误消息 指出该方法不是命名空间的成员 经过调查 我注意到该方法被列为 virtual void x seal 有没有办法
  • 哪个信号被传递到信号处理程序中死锁的进程

    我有一个来自调用信号处理程序后死锁的进程的核心转储 如何确定传送了哪个信号以及是谁发送的 GDB 为接收信号的线程生成的回溯如下 信号处理程序在第 15 帧中被调用 gdb bt 0 0x00007fa9c204654b in sys fu
  • “完美”的 Python 调试器具有哪些功能? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 请告诉我您希望当前的 Python 调试器具有哪些功能 我正在创建一个新的 Python IDE 调试器 并期待着具有挑战性的请求 请原谅我无耻
  • 编写 LESS 时,chrome 调试器中出现红点?

    我正在将 css 文件转换为 LESS 文件 我的 LESS 只有一部分运行良好 我在 chrome 调试器中看到那些有问题的行有一条奇怪的红点线 知道它们是什么意思吗 http codemirror net doc releases ht
  • 如何在Conky中实现一个基本的Lua功能?

    我正在尝试向我的 Conky 添加一个函数 该函数打印字符串的长度以用于调试目的 代码位于名为的文件内test lua 非常简单 function test word return string len word end 我这样加载它 在我
  • Unity3D 不安全代码需要指定“unsafe”命令行选项

    我在用Unity3D 4 3并打电话给DLL我创造的 当尝试调用它唯一的函数时 这是 void GetModelReferences int nVertices float vertices int nTriangles int trian
  • wpf 调试错误输出 System.WIndows.Data 错误 25

    我有一个自定义样式的组合框 效果很好 它被放置在用户控件内并绑定到数据结构 我使用 DisplayMemberPath 仅显示组合框文本框中的一个元素 ComboBox 样式取自 MSDN 并被多次使用 所以这里就不显示了
  • emacs 的最佳 java 工具 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 Visual Studio 中调试时向后拖动指令指针

    如需演示 请查看 基本上 我知道这在 Visual Studio Community Edition 2015 中是可能的 我想知道 a 这与 Intellitrace 和 历史调试 有关吗 b 这样做会有副作用吗 或者这只是将指令向后移动
  • 如何在浏览模式下禁用 RStudio 中的查看模式

    Is there a way to disable the View mode in RStudio when debugging functions 代码示例 myfun lt function browser myfun 我知道它不开放
  • C# - “资源”DLL 无法加载,因为它不存在 - 我如何找到引用以便将其删除?

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

    我们非常广泛地使用 MSBuild 作为我们持续集成过程的一部分 虽然它非常强大 我们几乎可以在其中完成所有构建 测试和部署 利用一些自定义任务 我们发现使用标签对其进行调试是一种痛苦 并且不能总是为我们提供足够的信息 我发现 http w
  • 链接到大地址感知 DLL

    假设我有一个使用 LARGEADDRESSAWARE 链接器标志集构建的 DLL 现在我有一个动态链接到该 DLL 的应用程序 这是否会使我的应用程序具有大型地址意识 如果不是 那么为任何 DLL 设置此标志是否有意义 讨论here htt
  • 如何远程调试长时间运行的 python 脚本或服务?

    正如标题所说 我希望能够连接到在 Paster 或 uwsgi 下运行的 python 进程并利用 pdb 功能 Using winpdb http winpdb org 您可以像这样附加到正在运行的进程 插入 import rpdb2 r

随机推荐

  • PHP 的引用赋值未按预期工作

    为什么会出现以下情况 class AClass public function construct this gt prop Hello public function get return this gt prop protected p
  • 将日期转换为 UTC 格式

    我想将本地日期转换为 UTC 格式 美国格式 NSString getUTCFormateDate NSDate localDate NSDateFormatter dateFormatter NSDateFormatter alloc i
  • 无法导出函数表达式:“TypeError:xxx 不是函数”

    我试图遵循模块的基本指南 我创建了 test module js var textFunction function console log text exports textFunction 然后我尝试在我的 app js 中使用它 va
  • 如何使用 PHP 使用 foreach 循环 json 对象?

    我如何使用每个来访问和打印参与者姓名 Json 对象是 particpants name 当使用标记化文件上传时 它会被填充 我知道标记化文件确实创建了一个成功的 JSON 对象 正是在 foreach 循环内部给我带来了麻烦 警告 输入非
  • Firebug - 断点没有命中

    我在外部 JS 文件中设置断点 但无法让 Firebug 以一致的方式命中断点 它有时有效 但大多数时候无效 我可以让它工作的唯一方法是打开 中断所有错误 我已经使用了调试器 声明也没有任何运气 如果行号不是绿色 Firebug 似乎无法调
  • 为什么 apache Spark 不能与 java 10 一起使用?我们得到非法反射然后 java.lang.IllegalArgumentException

    是否有任何技术原因导致 Spark 2 3 无法与 java 1 10 一起使用 截至 2018 年 7 月 这是我使用运行 SparkPi 示例时的输出spark submit bin spark submit examples src
  • 如何将外部 jQuery 插件添加到 Odoo 上的列表视图?

    我正在使用 Odoo 10e 我想将 jquery 插件集成到我的模块中 我想集成 jQuery 插件jquery 可调整大小的列 https github com dobtco jquery resizable columns 它很简单
  • 关于“动态”模型验证的建议

    我有一个名为Calendar 将应用于它的验证因用户所做的选择而异 我知道我可以使用自定义验证 条件验证来执行此操作 但对我来说看起来不太干净 我想知道是否可以将其存储在数据库列上并将其传递给 通用 验证器方法 你怎么认为 进一步解释 用户
  • 将新数据推送到 firebase 数据库时设置自定义键

    好吧 我是 Firebase 的新手 我希望在将新数据推送到数据库时拥有自己的密钥 Problem FireBase push setValue mapped values 这给出了如下结构 我如何在那里创建自己的自定义密钥 比如用户名什么
  • 从 WinForms 迁移到 WPF

    那么我们正在考虑从 WinForms 迁移到 WPF WPF 有哪些陷阱 我们得到了组件one的flexgrid 是否有任何wpf网格具有相同的功能 它的一件好事是您可以为单元格实现自己的绘制方法 它可以合并单元格打印并保存为多种文件格式
  • 在 ServiceStack Web 服务中设置公共属性

    我正在尝试使用 Sqlite 为 ServiceStack 服务编写单元测试 由于 Sqlite 不支持存储过程 因此我创建了 ServiceCommand 类型的公共属性 它将命令文本和命令类型作为输入 默认情况下 它配置为运行存储过程
  • 无法解析方法“findViewById(int)”

    我遇到了麻烦findViewByid但我找不到问题出在哪里 这是我的FirstFragment班级代码 import android app Fragment import android os Bundle import android
  • 为什么使用 unix-compress 和 go compress/lzw 会产生不同的文件,而其他解码器无法读取?

    我在终端中压缩了一个文件compress file txt并得到 如预期 file txt Z 当我将该文件传递给ioutil ReadFile in Go buf0 err ioutil ReadFile file txt Z 我收到错误
  • Qt 应用程序框架中的分段错误

    由于 QColor colorMap 9 这会产生分段错误 如果我删除 colorMap 分割错误就会消失 如果我把它放回去 它回来了 如果我清理所有然后构建所有 它就会消失 如果我增加它的数组大小它就会回来 另一方面 如果我减少它 它就不
  • 在代理键上使用反向索引的好习惯? (甲骨文)

    假设我有一个带有自动递增代理键的表 这是使用反向索引的好例子吗 我的说法是否正确 插入 插入索引 会更快 因为新值将随机插入 而不是总是插入最右边的叶子 不断强制重新平衡 索引查找会稍微慢一些 因为数据库必须花费 一点 时间来反转索引 因为
  • 来自服务器的 HTML 响应

    我有一个应用程序将一些数据提交到本地服务器 结果服务器将发回 JSON 说 状态 成功 当我在 2 3 SDK 模拟器中运行该应用程序 但安装在 Galaxy Tab 2 2 SDK 中时 它可以正常工作 相同的响应采用 html 的形式
  • Spark中的FPGrowth算法

    我正在尝试在 Spark 中运行 FPGrowth 算法的示例 但是遇到错误 这是我的代码 import org apache spark rdd RDD import org apache spark mllib fpm FPGrowth
  • corePoolSize 0 的 ThreadPoolExecutor 在任务队列已满之前不应执行任务

    我正在经历Java 并发实践并被困在8 3 1 线程的创建和销毁话题 以下脚注警告不要保留corePoolSize为零 开发人员有时会试图将核心大小设置为零 以便工作线程 最终会被拆除 因此不会阻止 JVM 退出 但这可能会导致一些问题 不
  • WPF:如何使视图动态化?

    我有以下 xaml 以下 xaml 必须在运行时动态填充需要什么 但是如何填充 MainWorkspaceViewModel 有一个名为 View 的属性 该属性是对象类型 因此我可以设置其中的每个视图
  • 调试包含在 C++/CLI DLL 中的静态库时,调试器不会单步执行本机代码

    在 C 应用程序中 我引用了本机 C 静态库 我将其包装在 C CLI DLL 中 我选择静态库而不是 DLL 因为我还有与向用户发布应用程序的过程相关的其他限制 在该论坛上提供的许多主题中 我发现了以下实现 Main MyCLRDLL t