如果一个启动另一个,您如何在 VB.Net 中跨项目进行调试?
Posted
技术标签:
【中文标题】如果一个启动另一个,您如何在 VB.Net 中跨项目进行调试?【英文标题】:How can you debug across projects in VB.Net if one launches the other? 【发布时间】:2011-03-24 22:54:39 【问题描述】:我在 VB.Net 中有一个 VS 2008 解决方案,它有 2 个项目 - 一个启动器和应用程序。启动器首先运行,检查以确保应用程序具有来自网络等的所有最新文件,然后启动应用程序。 Launcher 允许用户选择他们的环境(测试、生产),然后将这些值作为命令行参数传递到 App.exe。
这在正常运行时工作正常,但在尝试调试时,我试图弄清楚如何从启动器启动调试,然后将选定的环境传递给另一个项目,以便它可以将它们作为命令行参数读取.谢谢。
【问题讨论】:
关于为什么 VS 可能不支持自动附加到子进程的一些背景信息:wintellect.com/CS/blogs/jrobbins/archive/2009/07/20/… 【参考方案1】:一种可能的解决方案是在不调试的情况下启动可执行文件,然后将调试器附加到它启动的第二个进程。
http://msdn.microsoft.com/en-us/library/c6wf8e4z.aspx
【讨论】:
您可以附加到多个进程,因此您可以根据需要实际调试它们。 是的,我知道如何以这种方式附加到进程,只是在我需要测试的代码立即运行时无济于事。不过,感谢您的建议。 你看过这篇文章吗? ***.com/questions/361077/… 如果可以选择,您可以添加等待调试器附加的代码。 谢谢 Greg,这似乎是最好的选择。等待调试器附加效果最好,谢谢!【参考方案2】:我认为您必须将调试器附加到新进程。如果您想手动操作,可以使用Tools => Attach to Process
。
我认为可以以编程方式附加调试器,请参阅下面的一些解决此问题的 SO 问题:
Is it possible to communicate with the Visual Studio debugger programmatically while debugging? How do I attach a process to the debugger in Visual Studio?【讨论】:
谢谢,但不确定这是我要找的。一定有办法通过创建新对象或其他东西来启动解决方案中的另一个项目,对吧? 如果您在加载时在其他进程中启动调试器会怎样?这样它几乎会立即运行(在主构造函数中或其他) - System.Diagnostics.Debugger.Launch() --- msdn.microsoft.com/en-us/library/…【参考方案3】:如果这只是一次性的事情,最简单的选择可能是在其初始化的早期在子进程的源代码中添加对System.Diagnostics.Debugger.Break()
的调用。验证您要验证的内容,然后删除 Break()
调用。
如果您只是想验证一组命令行参数,那么我可能只是使用您可能用于日志记录的任何工具来记录它们 - 您甚至可能希望保留该日志记录。很好很简单。
【讨论】:
以上是关于如果一个启动另一个,您如何在 VB.Net 中跨项目进行调试?的主要内容,如果未能解决你的问题,请参考以下文章
如何创建按钮以在VB.Net 2003中打开另一个apx.net网页