c# - 如何限制 PDB 文件中的 0xFEEFEE 行数

标签 c# visual-studio-2012 visual-studio-debugging pdb-files mono.cecil

我正在开发一个使用 Mono.Cecil 分析 .NET 二进制文件中的代码的工具。作为此过程的一部分,我还检查 .pdb 文件中的二进制文件,以将结果链接到源代码行。

这在大多数情况下都可以正常工作:我从 .pdb 中获得了正确的源文件路径和行号。但是,在某些情况下(我相信当代码位于 #region 内时,但不确定),行号设置为 16707566 (0xFEEFEE)。这是一个鲜为人知的compiler feature指示该线路对用户隐藏。问题是,当 .pdb 包含 0xFEEFEE 作为行号时,我无法用它做太多事情 - 我无法(轻松)将我的分析结果与源联系起来。

我尝试更改一些 Visual Studio 选项,然后重建我正在分析的代码,但我仍然得到 0xFEEFEE 作为区域中代码的行号。 (例如,我尝试禁用区域,但没有帮助。而且分析的代码是从构建脚本构建的,而不是从 IDE 构建的。)

是否可以告诉 C# 编译器(可能通过 .csproj 设置或在注册表中)始终发出真实行号(当有意义时 - 对于“真实”源代码行)并且不要使用这些隐藏的行号线标记?

最佳答案

事实证明,这是我的代码中的一个问题 - 由于对 PDB 文件缺乏经验,我假设编译器会在方法主体中的第一条指令上输出第一个序列点。情况并非如此:有时编译器生成的函数代码并不直接映射到原始源代码,因此第一个“用户”序列点可能不是方法主体中的第一条指令。

我必须循环遍历方法体中的所有指令,并查找具有有意义的行号的第一个序列点 - 这从根本上减少了我得到的隐藏行的数量。

关于c# - 如何限制 PDB 文件中的 0xFEEFEE 行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21839237/

相关文章:

c# - 使用 Lambda 表达式的高级搜索

c++ - 如何找出我的代码的哪一部分正在减慢我的 C++ 程序

.net - 如何将 Xamarin android 应用程序发布或部署到我的手机三星 Galaxy s3

c++ - 为什么本地 .NET 程序集在我每次构建时(几乎)在引用列表中都出现损坏?

c++ - 调试从托管应用程序调用的 C++ 代码时看不到变量内容

c# - ASP.NET 身份角色已存在

c# - Sharepoint 服务将子站点从私有(private)站点复制到另一个站点

c# - 如何使用可读/可写的本地 XML 设置?

visual-studio - 禁用调试输出窗口中的噪音消息 - Visual Studio 2012

visual-studio - 有什么方法可以检查 Visual Studio 中当前正在执行的代码吗?