在纯本机模式下开始调试 C# 启动项目
Posted
技术标签:
【中文标题】在纯本机模式下开始调试 C# 启动项目【英文标题】:Start debugging on C# startup project in native-only mode 【发布时间】:2015-10-23 12:00:16 【问题描述】:我有一个带有 C#(托管)和 C++(本机)项目的 MSVC2013 解决方案。一个C#项目被设置为启动项目。我想从调试开始这个项目,通常在 devenv 中只需按 F5 即可实现。
但是,我想在 native-only 模式下启动调试器(即无托管调试)。我无法通过更改 C# 项目的设置来实现此行为:它只有一个选项“启用本机代码调试”,它允许启用或禁用本机调试。我知道的唯一标准方法是在不调试的情况下启动应用程序,然后在只选择本机调试的情况下附加到进程。
有没有办法自动化这个过程?理想情况下,按下一个按钮就足以启动纯本机调试。也许一些扩展可以简化这个任务。
P.S. 我在混合模式调试中遇到了一个令人讨厌的错误,这在我的情况下完全破坏了调试。这个错误本身不是问题的主题,它只是解释了为什么使用 C# 启动项目进行纯本机调试可能有用(并且对我个人有用)。
【问题讨论】:
【参考方案1】:不清楚为什么不能简单地使用项目>属性>调试选项卡>勾选“启用本机代码调试”。如果您使用 VS2012 及更高版本,请注意您必须禁用新的托管调试引擎,它不再与 C++/CLI 代码兼容。使用工具 > 选项 > 调试 > 常规 > 勾选“使用托管兼容模式”。
但是你可以实现你想要的,只需选择一个原生代码项目作为你的启动项目。右键单击 > 设置为启动项目。并且必须选择启动EXE,右键>属性>调试>命令,将其更改为C#可执行文件。一旦 C# 代码加载您的 DLL,断点就会变为活动状态(红色实心)。
【讨论】:
听起来像是我自己发明的一个简单的解决方案 =) 谢谢你的回答!我会研究“使用托管兼容模式”,也许它会解决我试图规避的所有问题。 根据您的项目,附加到正在运行的流程实例是一种解决方案。这是我通常为混合 C++ 和 C#(有时是 C++/CLI)的项目所做的:附加时,您可以轻松地强制“仅本机”,因为它可以作为复选框使用。 “使用托管兼容模式”设置确实解决了我遇到的所有问题!我打算发布一个大问题,请求调试帮助,包括图表、表格、赏金和大量文本……现在问题已经解决,甚至没有被发现。就我而言,行为非常奇怪:在来自 C++ 项目调试器的 COM 调用完全失去执行线程之后(断点不再命中任何地方,输出中出现奇怪的消息)。也许我仍然应该将具有确切症状的大问题发布为社区 wiki(以及您的答案)? 我已经发布了完整的问题here。以上是关于在纯本机模式下开始调试 C# 启动项目的主要内容,如果未能解决你的问题,请参考以下文章
本机方法中的致命错误:在调试模式下启动 hybris 服务器时,JDWP 没有传输初始化错误
在调试C#的程序的时候弹出一个框说 无法直接启动带有“类库输出类型”的项目,这个怎么解决哦!