我尝试了以下步骤来调试特定的自定义计时器(已安装并激活):
- 复制了GAC 中的
.dll
和.pdb
文件。 - 重新启动计时器服务。
- 附上
w3wp
和OWSTimer.exe
过程。
但是调试仍然没有发生。放置的调试器是显示此消息的空圆圈:
当前不会命中断点。没有为此文档加载任何符号。
OWSTimer 显示在差异用户名中。它需要从我的帐户运行吗?
为什么调试不起作用?
我尝试了以下步骤来调试特定的自定义计时器(已安装并激活):
.dll
和.pdb
文件。w3wp
和OWSTimer.exe
过程。但是调试仍然没有发生。放置的调试器是显示此消息的空圆圈:
当前不会命中断点。没有为此文档加载任何符号。
OWSTimer 显示在差异用户名中。它需要从我的帐户运行吗?
为什么调试不起作用?
调试计时器作业可能很难......您采取的步骤听起来很正确,但您还可以做更多:
iisreset
;-)如果你的断点仍然没有命中,做一些丑陋的事情:在你的代码中使用Debugger.Launch()
orDebugger.Break()
或者一个总是失败的断言:System.Diagnostics.Trace.Assert(false);
然后是MSDN 的救援。
尝试手动加载调试符号并查看它的内容:
以中断模式或运行模式显示模块窗口
在“调试”菜单上,选择“ Windows ”,然后单击“模块” 。
默认情况下,模块窗口按加载顺序对模块进行排序。但是,您可以选择按任何列排序。
在 Modules 窗口中,您可以查看哪些模块已加载了调试符号。此信息出现在符号状态列中。如果状态显示跳过加载无法找到或打开 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
只是添加到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
...
检查以确保您的区域设置正确 - 附加/_layouts/15/regionalsetng.aspx
到 CA URL。如果您的时区错误,您的工作可能会安排在过去的某个时间。这让我不止一次挂断电话。如果是这种情况,请设置正确的时区(使用上面的 url),停止并启动计时器服务(服务工具或打开命令行 - net stop sptimerv4
then net start sptimerv4
)。然后附加到 OWSTIMER 并调试。