草庐IT

c# - 从 VS2010 调试在远程 IIS 服务器上运行的 ASP.NET 应用程序

coder 2024-05-21 原文

只是想知道是否有人可以在这里指出正确的方向?

我正在尝试调试已部署的 Web 应用程序,但似乎无法使附件正常工作。
这是场景:

VS2010 安装在我的机器上 - 带有所有源代码。

我的机器上的 IE8 浏览到生产 IIS 服务器上的 ASP.NET 站点(生产站点上的 FWIW .pdb 文件。)

当我将调试器附加到 IE session 并继续浏览站点时,没有断点被击中......所以我不认为我真的在调试站点!??

我猜我需要某种远程调试设置?如果是这种情况,如果有人知道任何帮助的 URL,将不胜感激!

提前致谢!

吉姆

最佳答案

这是一个完整的分步指南,因为有很多分散的信息,并且链接的 Microsoft 文章假设了很多信息。

首先,让我们澄清本指南其余部分中使用的术语:



客户端 是您进行开发的计算机
远程 是代码已部署到并在 IIS 上运行的计算机

  • 安装msvsmon.exe(中号 ICRO 小号经常 V isual 小号 tudio 星期一 itor)在远程计算机上。
    您可以在客户端上的以下路径中找到与 Visual Studio 一起安装的可执行文件:
    VS 2010: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger\x86 
    VS 2017: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Packages\Debugger\X64

    当该工具启动并运行时,您应该会看到以下应用程序:



    调试监视器创建了一个可以远程连接的服务器。如果您使用的是 Windows 计算机,则名称可能是 User@Remote 。记住这个名字,因为你以后会用到它。如果你想直接复制它,你可以去工具>选项,你会看到服务器名称。如果您愿意,您甚至可以将其更改为其他内容。
  • 从这里您可以尝试霰弹枪方法,看看是否一切正常,但根据您的网络配置,可能会出现一些额外的问题。要尝试远程调试,请在 Visual Studio 中打开项目。这应该与部署在 IIS 上的项目完全相同。

    在 Visual Studio 中,您需要附加到新服务器上的进程。转到“工具”>“附加到进程”或按 Ctrl + Alt + P

  • 在“附加到进程”对话框中,将限定符从当前计算机的名称更改为新的服务器名称 (User@Remote),然后按 Enter 键以查看远程计算机上可用进程的列表:

  • 如果一切都立即恢复,那么您将得到妥善处理。这意味着没有防火墙策略阻止您连接远程服务器,您可以跳到第 6 步。

    或者,如果您收到以下消息,则表示您的防火墙正在阻止客户端和远程设备进行通信。

  • 如果您无法连接,则可能会出现一系列问题,具体取决于您的域策略。对于官方防火墙设置,您可以查看 Microsoft 的 Configure the Windows 7 Firewall for Remote Debugging ,但我发现它缺乏详细信息。

    如果附加失败,但您仍会收到一条消息,指出用户已像这样连接:



    那么这意味着问题不在于客户端上的出站规则或远程服务器上的入站规则。问题很可能出在客户端计算机上的入站规则上。

    要解决此问题,请在客户端计算机上,转到控制面板 > Windows 防火墙 > 高级设置,这将打开具有高级安全性的 Windows 防火墙。选择入站规则并右键单击以输入新规则:



    为规则指定任何名称。根据 this SO question 中的建议,我们将允许所有流量通过任何 Visual Studio 可执行文件,而不是免除特定端口。转到“程序和服务”并选择 Visual Studio 2010 安装的完整文件夹路径:%ProgramFiles% (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
    然后确保该规则仅适用于域内的计算机(确保未选中私有(private)和公共(public))。



    幸运的话,当您返回附加进程时,您应该能够进入远程机器。
  • 此时,您应该会看到远程机器上所有进程的列表。如果您想调试 Windows 应用程序,您只需选择进程的名称。对于 ASP.NET,我们希望附加到 w3wp.exe(WWW W orker P 进程)。如果您没有在列表中看到它,请尝试通过打开您要调试的应用程序的网页来启动服务器。您可以在本地主机上执行此操作,也可以通过从任何计算机导航到 IIS 中的地址来执行此操作。



    确保为您的应用程序附加正确类型的代码。您可以在 native (C++ 等)或托管(VB、C# 等)之间进行选择,或者选择自动并让 Visual Studio 决定。
  • 如果出现以下错误,我发现使用管理员权限重新打开 Visual Studio 和 msvsmon.exe 修复了该问题

  • 您将看到一个安全警告,您可以通过单击附加来接受该警告:

  • 我遇到的最后一个问题是加载调试器文件。您需要确保正在执行的库与当前在 Visual Studio 中加载的库完全匹配,并且它们在客户端计算机上的解决方案中具有正确的 .pdb 文件。您可以通过转到 Debug > Windows > Modules 或按 Ctrl + Alt + U 来检查加载了哪些模块以及它们从哪里加载。
    有关加载调试器文件的更多信息,您还可以尝试以下任何资源:
  • Stopping The "Breakpoint Will Not Currently Be Hit" Message
  • Fixing "The breakpoint will not currently be hit. No symbols have been loaded for this document."

  • 希望此时它已启动并为您工作。现在,您可以捕获对 IIS 托管代码进行的任何调用,并像在开发过程中一样逐步执行它们。



    进一步阅读 :
  • How to: Set Up Remote Debugging
  • Remote IIS Debugging : Debug your ASP.NET Application which is hosted on "Remote IIS Server"
  • 关于c# - 从 VS2010 调试在远程 IIS 服务器上运行的 ASP.NET 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4124952/

    有关c# - 从 VS2010 调试在远程 IIS 服务器上运行的 ASP.NET 应用程序的更多相关文章

    1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

      作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

    2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

      我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

    3. ruby-on-rails - Railstutorial : db:populate vs. 工厂女孩 - 2

      在railstutorial中,作者为什么选择使用这个(代码list10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersnamespace:dbdodesc"Filldatabasewithsampledata"task:populate=>:environmentdoRake::Task['db:reset'].invokeUser.create!(:name=>"ExampleUser",:email=>"example@railstutorial.org",:passwo

    4. ruby - 如何模拟 Net::HTTP::Post? - 2

      是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

    5. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

      最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

    6. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

      在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

    7. ruby-on-rails - 无法让 rspec、spork 和调试器正常运行 - 2

      GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'

    8. c# - 如何在 ruby​​ 中调用 C# dll? - 2

      如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

    9. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

      您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

    10. C# 到 Ruby sha1 base64 编码 - 2

      我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

    随机推荐