【问题标题】:Placing breakpoints in DLL's Visual Studio instance and breaking in .exe's*在 DLL 的 Visual Studio 实例中放置断点并中断 .exe 的*
【发布时间】:2017-02-18 17:19:47
【问题描述】:

情况:

我正在开发一组 DLL 库,并在我测试它们的项目中单独使用它们。我经常需要在错误点中断,但通常我还是会遇到异常,VS 会为我找到源文件和正确的位置,允许我在那里中断,但有时没有错误但不需要的结果,所以我需要窥视内部并查看实际数据,我当然可以从 .exe 解决方案中的调试模式开始导航到该点,但它隐藏了一些函数调用,我可能最终会得到 5-6 个文件打开比我需要的,加上找到它的时间。 问题:

有没有办法通过另一个实例中的断点使 VS 的一个实例在特定点中断?鉴于他们都在 DLL 中看到用于调试信息的相同 .pdb 文件,我想他们也可以共享此类信息,但显然不是(?)。我确实记得看到一个关于在 DLL 中跳过断点的问题,所以我想 是可行的。

当前替代方案:

到目前为止,我仅限于故意注入错误的代码位以使第二个实例在正确的位置打开文件,通常除以零就可以了,但它仍然有点来回。请注意,它现在是 VS2010,尽管我想他们在后续版本中并没有对此进行任何更改。

提前致谢。

【问题讨论】:

  • 不确定你在问什么。顺便说一句,你最好使用 DebugBreak 然后除以零。
  • 我想让 .exe 的调试器查看来自其他(DLL 的)解决方案的断点,仅此而已。
  • 为什么不把所有东西都放在一个解决方案中呢? (这就是他们称之为“解决方案”的原因。)
  • 嗯,我希望我会尽可能地分离 DLL,这样我就不会无意识地修改通用 DLL 以适应特定的项目。实际上,这是迄今为止我看到的将所有内容都放在一个解决方案中的唯一原因。所以我承认这是一个偏好和舒适的问题:)
  • 断点属于解决方案,而不是 .pdb(符号)文件,由附加的调试器设置。只能将一个调试器附加到进程。在 Visual Studio 中添加断点时,它们不会持久保存到磁盘,除非您保存解决方案(或显式导出断点)。

标签: .net visual-studio-2010 debugging dll


【解决方案1】:

你可以使用this:

Debugger.Break();

它向附加的调试器发出断点信号。只需将其放入您要调试的库中,启动您的程序,它就会停在这一行。

【讨论】:

  • 您始终可以将程序集包含到 System.Debugging ;) 顺便说一下@Damian,我在这里很少得到不尝试改变问题以适应它的答案,我向你致敬!
  • 请在帖子中添加语言标签。请注意,System.Debugging 和 Debugger.Break 不适用于 C。
  • 我认为这与语言无关,您可以从任何面向对象的语言、C#、VB、C++ 等调用 Debugger.break(),因为它位于 DLL 文件本身中因此可以以与语言无关的方式从外部访问。但是,我建议@Damian 添加它在 System.Diagnostics 程序集中的详细信息,以便其他人可以找到它,以获得防弹答案。
  • Debugger.Break 是 .NET 框架的一部分。对于非托管代码,您将使用 DebugBreak。
猜你喜欢
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
相关资源
最近更新 更多