Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何限制PDB文件中的0xFEEFEE行号_C#_Visual Studio 2012_Visual Studio Debugging_Pdb Files_Mono.cecil - Fatal编程技术网

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

C# 如何限制PDB文件中的0xFEEFEE行号,c#,visual-studio-2012,visual-studio-debugging,pdb-files,mono.cecil,C#,Visual Studio 2012,Visual Studio Debugging,Pdb Files,Mono.cecil,我正在开发一个工具,它使用Mono.Cecil分析.NET二进制文件中的代码。作为这项工作的一部分,我还检查了.pdb文件中的二进制文件,以将发现的内容链接到源代码行 这在大多数情况下都适用:我从.pdb中获得正确的源文件路径和行号。但是,在某些情况下(我相信当代码位于#区域,但不确定),行号设置为16707566(0xFEEFEE)。这是一种不太为人所知的表示线对用户隐藏的方法。问题是,当.pdb包含0xFEEFEE作为行号时,我不能对它做太多处理-我不能(轻松地)将我的分析结果与源代码联系起

我正在开发一个工具,它使用Mono.Cecil分析.NET二进制文件中的代码。作为这项工作的一部分,我还检查了.pdb文件中的二进制文件,以将发现的内容链接到源代码行

这在大多数情况下都适用:我从.pdb中获得正确的源文件路径和行号。但是,在某些情况下(我相信当代码位于
#区域
,但不确定),行号设置为
16707566
(0xFEEFEE)。这是一种不太为人所知的表示线对用户隐藏的方法。问题是,当.pdb包含
0xFEEFEE
作为行号时,我不能对它做太多处理-我不能(轻松地)将我的分析结果与源代码联系起来

我尝试更改许多Visual Studio选项,然后重新生成我正在分析的代码,但我仍然将
0xFEEFEE
作为区域中代码的行号。(例如,我尝试禁用区域,但没有帮助。另外,分析的代码是从构建脚本生成的,而不是从IDE生成的。)


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

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

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