如何限制PDB文件中的0xFEEFEE行号

时间:2014-02-17 21:05:00

标签: 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设置或在注册表中)始终发出实际行号(当它有意义时 - 对于“真正的”源代码行)并且不要使用这些隐藏线标记?

1 个答案:

答案 0 :(得分:2)

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

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