3

我对 Dotpeek 非常陌生。也许我错过了一些东西,但一切似乎都井井有条:

我想要的模块已加载: 在此处输入图像描述

Dotpeek 中的一切看起来都不错: 在此处输入图像描述

我的断点已设置: 在此处输入图像描述

然而,当我在反编译的 pdb 中遇到断点时,我不断收到此消息: 在此处输入图像描述

我能想到的唯一原因是这是微软的专有软件,他们必须有办法阻止人们这样做。是这样吗?如果没有,我怎样才能让它工作?

我已经搜索并找到了类似的帖子,但由于某种原因,解决方案在这里不起作用......

4

2 回答 2

0

从编译代码 (DLL) 创建源代码是 dotPeek 的一项功能。Visual Studio 没有该功能。

一些工具可以集成到 Visual Studio 中(例如Red Gate Reflector,一个商业工具),但是 AFAIK、dotPeek 直到现在还没有集成到 VS 中。

所以,不,你不能在 Visual Studio 中看到任意 DLL 的源代码。

我们通常不在这里推荐软件,但也许dnSpy有您正在寻找的东西:调试和反编译功能。

于 2020-06-26T17:25:40.597 回答
0

根据文档,您可能错过了这一步:

确保“在 Visual Studio 选项中,转到调试 | 常规页面并清除启用仅我的代码复选框。

通过反复试验,我发现即使一切设置正确,使用“New > Function Breakpoint”手动创建断点也并不总是有效。断点在预期时触发,但我像你一样得到“源不可用”。

解决方法

我的解决方法是找到一种方法来进入我需要的位置,然后正常设置断点(单击 gutter 或 F9)。有时我可以从我自己的代码中执行此操作,有时我必须在库中找到另一种方法,其中手动断点确实有效。

很容易判断手动断点是否可以工作,甚至无需点击它:连接调试器后,使用“New > Function Breakpoint”创建断点后,如果“Language”和“File”正确,它将工作。或者双击断点时,如果它带你到文件,它会起作用。

细节

这是我的断点的比较,一个是通过步进设置的,另一个是手动设置的。一组手动显示没有文件,当点击显示“源不可用”: 断点创建

当我将这些断点导出到 XML 时,我注意到以下差异:

有效的断点(步入,然后设置):

      <LocationType>SourceLocation</LocationType>
      ...
        <FileName>C:\Users\MyUser\AppData\Local\JetBrains\Shared\vAny\DecompilerCache\decompiler\7391115F-C184-4D01-A933-DF771669B14D\0f\2317d014\HttpCacheAttribute.cs</FileName>
      ...
      <BreakpointType>PendingBreakpoint</BreakpointType>

不起作用的断点(手动创建):

      <LocationType>NamedLocation</LocationType>
      ...
      <BreakpointType>BoundBreakpoint</BreakpointType>
      ...
      <ModuleName>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\e1238e8c\6a0ff27b\assembly\dl3\a01be3d2\00ba5bf4_8fe7d601\CacheCow.Server.WebApi.dll</ModuleName>
于 2021-03-29T23:13:47.607 回答