7

我一直在尝试 Azure 网站的新远程调试功能,但我想我可能遇到了一个问题:只有使用 Web Publish 才能使其正常工作。如果我使用本地 git deploy 部署站点,调试器会附加,但不会加载调试符号(断点显示警告)。

我尝试将发布配置设置为包含 PDB 文件(因为 Azure 的 git deploy 默认使用发布配置),并使用此处azure site deploymentscript详述的命令生成的自定义部署脚本并将构建命令设置为使用调试配置。在这两种情况下,我仍然遇到未加载符号的相同问题。

我觉得问题可能是以下之一:

  1. Azure 在 Web 发布后运行某种自定义操作,必须运行该操作才能允许远程调试
  2. git 部署脚本使用的构建选项缺少某种标志,导致 Web 应用程序不存在 PDB 输出(我认为这不太可能)
  3. 当站点实际运行和按需编译时,Azure 不遵守我在部署脚本中使用的配置

最终,我希望编写一些自动化部署脚本,我更愿意使用 git 部署而不是 Web Publish 来实现这一点。真正让我感到困惑的是,即使将发布配置设置为包含 PDB 文件,它也会失败。这真的让我觉得必须在 Azure for Web Publish 上做一些额外的事情,而这不是为 git 部署做的。有没有人知道是什么导致了这里的差异?

自定义 Git 部署脚本

我包括生成的自定义部署脚本以azure site deploymentscript供参考并显示它使用的构建标志。相关部分在本:: Deployment节之后。

@if "%SCM_TRACE_LEVEL%" NEQ "4" @echo off

:: ----------------------
:: KUDU Deployment Script
:: Version: 0.1.5
:: ----------------------

:: Prerequisites
:: -------------

:: Verify node.js installed
where node 2>nul >nul
IF %ERRORLEVEL% NEQ 0 (
  echo Missing node.js executable, please install node.js, if already installed make sure it can be reached from current environment.
  goto error
)

:: Setup
:: -----

setlocal enabledelayedexpansion

SET ARTIFACTS=%~dp0%..\artifacts

IF NOT DEFINED DEPLOYMENT_SOURCE (
  SET DEPLOYMENT_SOURCE=%~dp0%.
)

IF NOT DEFINED DEPLOYMENT_TARGET (
  SET DEPLOYMENT_TARGET=%ARTIFACTS%\wwwroot
)

IF NOT DEFINED NEXT_MANIFEST_PATH (
  SET NEXT_MANIFEST_PATH=%ARTIFACTS%\manifest

  IF NOT DEFINED PREVIOUS_MANIFEST_PATH (
    SET PREVIOUS_MANIFEST_PATH=%ARTIFACTS%\manifest
  )
)

IF NOT DEFINED KUDU_SYNC_CMD (
  :: Install kudu sync
  echo Installing Kudu Sync
  call npm install kudusync -g --silent
  IF !ERRORLEVEL! NEQ 0 goto error

  :: Locally just running "kuduSync" would also work
  SET KUDU_SYNC_CMD=node "%appdata%\npm\node_modules\kuduSync\bin\kuduSync"
)
IF NOT DEFINED DEPLOYMENT_TEMP (
  SET DEPLOYMENT_TEMP=%temp%\___deployTemp%random%
  SET CLEAN_LOCAL_DEPLOYMENT_TEMP=true
)

IF DEFINED CLEAN_LOCAL_DEPLOYMENT_TEMP (
  IF EXIST "%DEPLOYMENT_TEMP%" rd /s /q "%DEPLOYMENT_TEMP%"
  mkdir "%DEPLOYMENT_TEMP%"
)

IF NOT DEFINED MSBUILD_PATH (
  SET MSBUILD_PATH=%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe
)

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Deployment
:: ----------

echo Handling .NET Web Application deployment.

:: 1. Restore NuGet packages
IF /I "azure-test.sln" NEQ "" (
  call "%NUGET_EXE%" restore "%DEPLOYMENT_SOURCE%\azure-test.sln"
  IF !ERRORLEVEL! NEQ 0 goto error
)

:: 2. Build to the temporary path
IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
  %MSBUILD_PATH% "%DEPLOYMENT_SOURCE%\azure-test\azure-test.csproj" /nologo /verbosity:m /t:Build /t:pipelinePreDeployCopyAllFilesToOneFolder     /p:_PackageTempDir="%DEPLOYMENT_TEMP%";AutoParameterizationWebConfigConnectionStrings=false;Configuration=Debug /p:SolutionDir="%DEPLOYMENT_SOURCE%\.\\"     %SCM_BUILD_ARGS%
) ELSE (
  %MSBUILD_PATH% "%DEPLOYMENT_SOURCE%\azure-test\azure-test.csproj" /nologo /verbosity:m /t:Build     /p:AutoParameterizationWebConfigConnectionStrings=false;Configuration=Debug /p:SolutionDir="%DEPLOYMENT_SOURCE%\.\\" %SCM_BUILD_ARGS%
)

IF !ERRORLEVEL! NEQ 0 goto error

:: 3. KuduSync
IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
  call %KUDU_SYNC_CMD% -v 50 -f "%DEPLOYMENT_TEMP%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd"
  IF !ERRORLEVEL! NEQ 0 goto error
)

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: Post deployment stub
call %POST_DEPLOYMENT_ACTION%
IF !ERRORLEVEL! NEQ 0 goto error

goto end

:error
echo An error has occurred during web site deployment.
call :exitSetErrorLevel
call :exitFromFunction 2>nul

:exitSetErrorLevel
exit /b 1

:exitFromFunction
()

:end
echo Finished successfully.
4

2 回答 2

28

2014 年 2 月 8 日更新

在 WAWS 中进行了一些修复,现在可以在使用 git 时通过让 VS 正确加载服务器端 PDB 来进行调试。要让它工作,你需要做两件事之一(即你不需要同时做这两件事)。它可以在 VS 2012 和 2013 中运行。

  1. 关闭 Just My Code 调试:只需在 VS 调试器设置中关闭该设置,然后尝试调试您的 Azure 网站。
  2. 以调试模式构建:要在服务器构建上执行此操作,您可以转到 Azure 门户并添加一个名为 ApSettingSCM_BUILD_ARGS的值-p:Configuration=Debug此处有更多详细信息)。然后转到部署页面并点击重新部署按钮(对于当前部署)。然后从VS附加,它应该一切正常!

原始答案

事实上,这在今天是行不通的,我们正试图看看如何让它发挥作用。从根本上讲,问题似乎是 Visual Studio 调试器希望在客户端上找到 PDB,而在 git 情况下它们只存在于服务器上。

本文讨论了调试器在 2010 和较新版本之间工作方式的变化,这可能会影响一些事情。

需要进行更多调查,但这是目前的情况。

于 2013-11-08T22:23:09.907 回答
1

我在 .Net Core Azure Function 项目中遇到了这个问题,使用 Cloud Explorer 右键单击​​功能进行附加。以下 github 问题说明了它,但解决方案没有解决我的问题:

https://github.com/Azure/Azure-Functions/issues/872

我终于在这里偶然发现了答案:

http://dontcodetired.com/blog/post/Remote-Debugging-Azure-Functions-V2-The-breakpoint-will-not-currently-be-hit-No-symbols-have-been-loaded-for-this-文档

它归结为手动附加到 Azure 中的进程,而不是依赖于 Cloud Explorer 右键单击​​功能。

于 2019-01-11T17:43:24.160 回答