“附加到流程”作为构建后事件

2024-03-06

我有一个在“w3wp.exe”进程下托管的应用程序。

在调试时,我经常发现自己遵循以下步骤:

1 - 做一些改变

2 - 构建项目

3 - 使用“工具”菜单下的“附加到进程”对话框附加到“w3wp.exe”。

4 - 在应用程序中执行一些操作以使我的代码执行,这样我就可以在调试器中单步执行它

我想在构建后脚本中自动执行第 3 步,以便 IDE 在构建完成后自动附加到该进程。请注意,我已经将应用程序作为构建后流程的一部分启动,因此我可以依靠此时现有的流程。

有谁知道如何自动执行“附加到进程”命令?来自命令行的东西会特别好,但宏也可以。

我在 Windows 7 64 位下使用 Visual Studio 2008。

Edit@InSane 基本上给了我正确的答案,但它不起作用,因为我需要调试托管代码,而不是本机代码。看来 vsjitdebugger 默认为 Native 代码,因此我的断点没有被命中。从 IDE 内部,我可以指定“托管代码”,调试器将按预期附加。那么有没有办法让 vsjitdebugger 指向托管代码呢?


我终于能够通过在互联网上其他地方找到的示例来解决这个问题。我在这里分享它,因为这对我很有帮助。

1 - 使用以下代码创建一个新的命令行应用程序(此示例位于 VB.NET 中)。

Option Strict Off
Option Explicit Off
Imports System
'On my machine, these EnvDTE* assemblies were here:
'C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\PublicAssemblies
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics
Imports System.Threading

Module modMain
    Function AttachToProcess(ByVal processName As String, _
                             ByVal Timeout As Integer) As Boolean
        Dim proc As EnvDTE.Process
        Dim attached As Boolean
        Dim DTE2 As EnvDTE80.DTE2

        Try
            DTE2 = _
            System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.9.0")

            For Each proc In DTE2.Debugger.LocalProcesses
                If (Right(proc.Name, Len(processName)).ToUpper = processName.ToUpper) Then
                    proc.Attach()
                    System.Threading.Thread.Sleep(Timeout)
                    attached = True
                End If
            Next
        Catch Ex As Exception
            Console.Write("Unable to Attach to Debugger : " & Ex.Message)
        End Try

        Return attached
    End Function

    Sub Main()
        'to call w/ Command Line arguments follow this syntax
        'AttachProcess <<ProcessName>> <<TimeOut>>
        'AttachProcess app.exe 2000
        Dim AppName As String = "w3wp.exe"
        Dim TimeOut As Integer = 20000 '20 Seconds
        Try
            If Environment.GetCommandLineArgs().Length > 1 Then
                AppName = Environment.GetCommandLineArgs(1)
            End If

            If Environment.GetCommandLineArgs().Length > 2 Then
                If IsNumeric(Environment.GetCommandLineArgs(2)) Then
                    TimeOut = Environment.GetCommandLineArgs(2)
                End If
            End If
            Environment.GetCommandLineArgs()
            AttachToProcess(AppName, TimeOut)
            Console.WriteLine("Attached!!")

        Catch Ex As Exception
            Console.Write("Unable to Attach to Debugger : " & Ex.Message)
        End Try
    End Sub
End Module

2 - 在 Visual Studio 中打开要调试的解决方案

3 - 在“构建后”事件结束时,输入对此新实用程序的调用,如下所示:

c:\AutoAttach.exe w3wp.exe 20000

4 - 构建您的应用程序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“附加到流程”作为构建后事件 的相关文章

  • vs2008循环引用(c#)

    这是我在 vs2008 解决方案中的设置 名为 MyProject Data 的项目中的数据层 名为 MyProject Web 的项目中的 Web 应用程序 MyProject Web 引用了 MyProject Data 在 MyPro
  • 要发布哪些运行时库?

    我使用 Visual Studio 2008 进行 C C 工作 我相信我并不关心我的代码使用了哪些运行时库 因为我有开发人员设置 但是 当交付可执行文件时 所使用的运行时库也需要一起交付 我对吗 如果是 我如何确定实际使用了哪些共享库 或
  • 使用 python 和 selenium 自动化 Google 登录显示“此浏览器或应用程序可能不安全”

    我尝试使用 Gmail 或任何 Google 服务登录 但显示以下 此浏览器或应用程序可能不安全 消息 我还尝试执行诸如在我的 acc 中启用不太安全的应用程序之类的选项 但它不起作用 然后我创建了一个新的谷歌帐户 它对我有用 但我的旧配件
  • 如何解释“错误C2018:未知字符'0x40'?[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 在编译一些代码时 我收到以下信息 错误 C2018 未知字符 0x40 我想知道如何解决这样的问题 这是我要开始的地方
  • vs2008中的线程窗口在哪里

    我试图在 VS 2008 中找到描述的线程窗口here http www wintellect com cs blogs jrobbins archive 2007 08 01 neat new multithreaded debuggin
  • 根据 VS2008 中的构建配置排除整个文件

    我的项目有三种不同的配置 这三种配置不需要将所有文件构建到应用程序中 实际上 我更希望能够从构建中排除这些文件 这将使我的应用程序更加轻量级 我正在寻找的是 if MYCONFIG or if DEBUG声明但用于文件 我已经读到这可以通过
  • Visual Studio 项目有简单的自动备份系统吗?

    我正在使用 Visual Studio 2008 Express 我希望 Visual Studio 或者可能是外接程序 将我的整个项目保存到某种自动增量存档或任何可以帮助我从灾难中恢复的文件中 我对 SVN 或复杂的版本控制系统没有太多需
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • VB无法访问不同项目中的类,相同的解决方案

    我正在使用 VB for Visual Studio 工作 并且项目中有一个类需要将变量声明为另一个项目中的类 对于可视化 解决方案 A 包含 Project1 和 Project2 在 Project1 的类中 我需要声明一个变量作为 P
  • 使用 Selenium 导航时的陈旧对象引用

    我一直在尝试一个简单的程序 它可以从新页面导航和获取数据 返回历史记录并打开其他页面并获取数据等等 直到访问所有链接并获取数据 在以下网站上获得结果后 我尝试循环浏览第一列中获得的所有链接 并逐个打开这些链接并从每个页面中提取文本 但下面的
  • 如何避免用户帐户控制或在Win7中始终以管理员模式运行Windows应用程序

    在 WinForms 应用程序中 当我的应用程序启动时 将出现 用户帐户控制 对话框 仅在 Windows 7 中 任何人都可以建议我如何以编程方式避免这种情况 也就是说我的应用程序应该始终以管理模式启动 或者是否有任何选项可以阻止此对话框
  • Azure Runbook 输出到电子邮件

    我正在尝试将 VM 状态的输出从 Azure 自动化 Runbook 发送到电子邮件中 我使用以下代码 function Send EMail Param Parameter Mandatory true String EmailTo Pa
  • 创建单个随机 Magento 优惠券

    我遇到了一些麻烦 我想要做的是每次有人订阅我们的时事通讯时 在 Magento 中自动生成一个随机优惠券代码 这张优惠券可减 10 美元 并且有exp 订阅后两周的日期 因此 我正在尝试编写一个简单的脚本 当提交 订阅我们的时事通讯 表单时
  • 本地提交推送到中央服务器

    在工作中 我们使用 perforce 并被鼓励定期对其进行承诺 我对此很满意 然而 我想运行像 Mercurial 这样的东西 这样我就可以在本地提交正在进行的工作并且不一定编译 运行的东西 然后从中定期提交到中央 perforce 服务器
  • 如何获取 3G 调制解调器的 IP 地址?

    我的 GPRS 调制解调器有一张 SIM 卡 它可以连接Web Web 服务给它一个 IP 号码 我需要它 像那样 http www your ip address com http www your ip address com 我怎样才
  • 可以让 ReSharper 在 Intellisense 中显示异常吗?

    我很喜欢 ReSharper 提供的重写智能感知行为 但是 我似乎无法让它显示异常 任何带有
  • 如何从 Visual Studio 以调试模式运行 NUnit?

    我最近正在为我一直在研究的一些 C 构建一个测试框架 我在工作区中设置了 NUnit 和一个新项目来测试该组件 如果我从 Nunit v2 4 加载单元测试 一切都会很好 但我已经到了在调试模式下运行并设置一些断点非常有用的地步 我已经尝试
  • 在没有 Resharper 的情况下删除 C# 项目中未使用的引用 (!= usings)?

    有没有办法在 C 项目中删除未使用的程序集引用 而不需要 Resharper 的帮助 这MSDN 文档确实概述了 Visual Basic 的一些内容 http msdn microsoft com en us library 7sfxaf
  • 使用 ASP.NET 开发服务器测试多个域

    我正在开发一个 Web 应用程序 该应用程序将根据用于访问该网站的域名动态更改其内容 多个域将指向同一个应用程序 我希望使用以下代码 或类似的代码 来检测域名并执行自定义 string theDomainName Request Url H
  • Android 报告“Error=Unable to find Instrumentation info for: ComponentInfo {}”

    stackoverflow 上有很多关于这个问题的主题 问题 例如错误 无法找到以下仪器信息 ComponentInfo https stackoverflow com q 21294945 513413 和其他网站 但使我的问题与其他网站

随机推荐