在 Visual Studio 2008 上设置预调试事件

Posted

技术标签:

【中文标题】在 Visual Studio 2008 上设置预调试事件【英文标题】:Set a pre debug event on Visual Studio 2008 【发布时间】:2011-05-06 08:55:22 【问题描述】:

我想在开始在 Visual Studio 中调试我的程序之前运行一个任务。 每次调试程序时,我都需要运行此任务,因此构建后事件还不够好。

我查看了设置的“调试”选项卡,但没有这样的选项。

有什么办法吗?

【问题讨论】:

【参考方案1】:

您可以尝试的唯一方法 (IMO) 是在 Project Properties 的 Debugging 页面中试验 Command 属性,但我认为不会起作用。

编辑:如果你想启动一个批处理文件,这样做,

yourbatch.bat $(targetPath)

在 yourbatch.bat 中你可以这样称呼你的程序,

call %1 %2 %3 %4 %5 %6 %7 %8 %9

其中 %2 ... %3 代表可能的程序参数(由您的 IDE 提供)

我唯一想知道的是您的程序是否会直接调试(我认为您可能必须在 IDE 中手动附加)

【讨论】:

这听起来是个好主意,但是如何将两个命令放在同一行上呢?假设我想调用myscript.bat,然后调用$(TargetPath),你将如何在同一命令行上调用它们。调试器也不会尝试调试myscript.bat 吗? @jules 将所有命令放在 .cmd/.bat 文件中。您可以使用 CALL 命令从 .bat 文件中调用 .bat 文件(请参阅computerhope.com/batch.htm 以获得帮助)。 有没有人知道是否会直接调试项目?【参考方案2】:

在“调试”版本的编译选项中添加预构建步骤,并且在“发布”版本中没有它。 (编辑:预构建步骤在项目属性的构建事件部分中设置)

如果您在谈论代码中的函数或其他内容,请使用预编译器标志。例如,在您的调试版本中,您可能有“_DEBUG”或类似编译器标志的东西......所以在代码中您可以这样做

#ifdef _DEBUG
doMySpecialTask();
#endif

它只会在使用调试版本时被调用。

编辑:从下面的评论中上移信息: 要在运行时动态检测调试器,您可以在 Windows 中使用 IsDebuggerPresent() 函数。 Mac 也有一个AmIBeingDebugged()。如果您希望程序在调试时表现不同,这很有用,但我不建议这样做,除非没有其他选项有用。在调试时修改程序的行为可能会导致问题消失,或以不同的方式表现出来。

【讨论】:

但是即使我不需要构建应用程序也会调用预构建事件吗? @jules 不,如果您不构建应用程序,则不会。在这种情况下,您可以改用#ifdef 语句。例如doMySpecialTask() 可以运行 .bat 文件或 .cmd 文件来启动应用程序,甚至启动应用程序。这将在您使用调试版本时起作用,而不仅仅是在您构建它时。如果您需要始终动态检测调试器,请在 Windows 中使用 IsDebuggerPresent 函数。见msdn.microsoft.com/en-us/library/ms680345%28v=vs.85%29.aspx

以上是关于在 Visual Studio 2008 上设置预调试事件的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2008 C#控件textbox背景如何设置为透明?

如何在 Visual Studio 2008 的整个解决方案上运行 FxCop

Visual Studio 2008 网络驱动器信任和 .NET 4.0

Visual Studio 2003 预构建脚本找不到“svn”命令

装了visual studio2008,怎么设置c#的系统环境变量

在 Visual Studio 2008 中配置 FxCop 以运行规则子集