我正在开发一个使用 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/