调试本机代码

我有一个C#服务,它调用最初用VC6编写的C DLL。

我试图检查DLL中有一个错误。

在尝试调试工作的噩梦之后,我最终将dll添加到包含C#服务的VS2005解决方案中,并添加了必要的_CRT_SECURE_NO_WARNINGS

使用’installutil.exe’工具注册该服务的调试版本。

通过调用System.Diagnostics.Debugger.Break();我可以让调试器在输入dll的行之前中断System.Diagnostics.Debugger.Break();

我在网上发现了一些关于调试非托管代码的指令,并启用了“启用非托管代码调试”复选框,我还尝试打开选项 – >调试 – >本机’加载DLL导出’和’启用RPC调试’(即使它不是COM)。 我还将debug dll和.pdb复制到与服务相同的bin目录中。

但是,非托管代码没有进入我真正需要的代码。

更新 :我在DLL属性中找到了调试类型,并根据几个站点上的建议将其设置为“混合”,但无济于事。

UPDATE2 :我的项目现在将调试dll和pdb发送到与调试服务相同的目录。 仍然无法调试DLL。

尝试将非托管代码设置为启动项目。 我知道这没有意义,但我记得这适用于一个非常类似的项目。

由于DLL没有关联的可执行文件,当您尝试运行它时会弹出询问要运行的应用程序。 浏览到您的C#应用​​程序,然后您应该很高兴。

快乐的调试!

编辑:已经有一段时间了,但我认为混合的调试类型是正确的

最后,我创建了一个控制台应用程序并重新创建了所有先前的调用,以确保调用将像实际服务中的实际参数一样完成。

我在我的网站上记录了我的修复和结果代码。

Visual Studio 2013中有一种解决方法。从cmd行运行应用程序。 当System.Diagnostics.Debugger.Break(); 如果命中,则会弹出Visual Studio Just-In-Time Debugger窗口。 选中“手动选择调试引擎”,单击“是”并确保选中“本机”引擎。 单击“确定”。 现在,您应该可以通过在VS中运行代码来进入本机代码。