【问题标题】:Unable to debug a custom timer job in sharepoint无法在 sharepoint 中调试自定义计时器作业
【发布时间】:2011-09-20 04:40:49
【问题描述】:

我尝试了以下步骤来调试特定的自定义计时器(已安装并激活):

  1. 复制了 GAC 中的 .dll.pdb 文件。
  2. 重新启动定时器服务。
  3. 附加w3wpOWSTimer.exe 进程。

但是调试仍然没有进行。放置的调试器是显示此消息的空圆圈:

当前不会命中断点。没有为此文档加载任何符号。

OWSTimer 以不同的用户名显示。是否需要从我的帐户运行?

为什么调试不起作用?

【问题讨论】:

  • 你为什么要问一个新问题——你甚至在previous one中标明你得到了答案。
  • @JanisVeinbergs:之前的问题是关于在 GAC 中复制 pdb 文件。接受的答案只是为了这个。如果有冗余,我一定会删除它。
  • 但是您实际上并没有得到有效的解决方案,所以问题可能出在将文件复制到 gac 上?我从来没有这样做过。但这可能是因为我使用 WSPBuilder Visual Studio 插件将 dll 复制到 gac,实际上我不知道它是否也复制 pdb 文件。
  • 顺便说一下,我刚刚检查了 GAC_MSIL 文件夹,但那里没有任何 pdb 文件

标签: visual-studio debugging sharepoint sharepoint-2007 timer-jobs


【解决方案1】:

调试计时器作业可能很难...您采取的步骤听起来很正确,但您还可以做更多:

  1. 计时器作业在 OWSTimer.exe 中运行 - 您只需附加到那个
  2. 重新启动定时器服务。为了更好的措施,重新启动,部署,重新启动,iisreset ;-)
  3. 您是进行了 DEBUG 构建还是 RELEASE 构建?
  4. 确保您确实运行您的计时器作业(如触发它)

如果您的断点仍未命中,请做一些丑陋的事情:在您的代码中使用 Debugger.Launch()Debugger.Break() 或始终失败的断言:System.Diagnostics.Trace.Assert(false);

然后是MSDN for the rescue

【讨论】:

  • 感谢丹尼斯的补充,我发现,由于某种原因,解决方案配置是“发布”模式而不是“调试”模式。我改回“调试”,它工作得很好。
【解决方案2】:

尝试手动加载调试符号,看看它是什么意思:

以中断模式或运行模式显示模块窗口

调试菜单上,选择Windows,然后点击Modules

默认情况下,“模块”窗口按加载顺序对模块进行排序。然而, 您可以选择按任何列排序。

在模块窗口中,您可以看到哪些模块有调试 符号加载。此信息出现在符号状态列中。 如果状态为 Skipped loading 无法找到或打开 PDB 文件, 或通过包含/排除设置禁用加载,您可以直接 用于从 Microsoft 公共符号服务器下载符号的调试器 或从计算机上的符号目录加载符号。更多 信息,请参阅如何:使用符号服务器和如何:指定 符号位置和加载行为。

手动加载符号

在“模块”窗口中,右键单击没有符号的模块 已加载。

指向从中加载符号,然后单击 Microsoft 符号服务器或 符号路径。

复制自MSDN

您也可以尝试删除 Visual Studio 缓存以确保(从命令提示符):

del /Q %LOCALAPPDATA%\Microsoft\WebsiteCache
del /Q %LOCALAPPDATA%\Temp\VWDWebCache
del /Q %LOCALAPPDATA%\Microsoft\Team Foundation\1.0\Cache

【讨论】:

    【解决方案3】:

    只是添加到moontear的帖子中。

    在我将此代码添加到我的 Execute 方法的第一行之前,我遇到了相同的加载调试符号问题。

        public override void Execute(Guid contentDbId)
        {
            // If in debug mode, trigger a false assertion to give time 
            // to attach the debugger to the OWSTIMER.EXE process.
            #if (DEBUG)
                System.Diagnostics.Trace.Assert(false);
            #endif
            ...
    

    【讨论】:

      【解决方案4】:

      检查以确保您的区域设置正确 - 将 /_layouts/15/regionalsetng.aspx 附加到 CA URL。如果您的时区错误,您的工作可能会安排在过去的某个时间。这让我不止一次挂断电话。如果是这种情况,请设置正确的时区(使用上面的 url),停止并启动计时器服务(服务工具或打开命令行 - net stop sptimerv4 然后 net start sptimerv4)。然后附加到 OWSTIMER 并进行调试。

      【讨论】:

        【解决方案5】:
        1. 在“开始”菜单上,指向“管理工具”,然后单击“服务”。
        2. 在“服务”窗口中,确保 SharePoint 2010 计时器服务已启动。
        3. 打开包含您的计时器作业的 Visual Studio 2010 项目。
        4. 在作业定义类的 Execute 方法中设置断点。
        5. 在“调试”菜单上,单击“附加到进程”。
        6. 在“附加到进程”对话框中,c
        7. 如果显示附加安全警告对话框,请单击附加。
        8. 在 SharePoint 管理中心网站中,单击“监视”,然后单击“查看作业定义”。
        9. 单击您的作业名称,然后单击“编辑计时器作业”页面上的立即运行。
        10. 验证 Visual Studio 2010 调试器是否在您的断点上停止执行。单击 OWSTIMER.EXE,然后单击附加。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多