C# 预处理器指令中的源代码和 PDB 文件中的行号

Posted

技术标签:

【中文标题】C# 预处理器指令中的源代码和 PDB 文件中的行号【英文标题】:Source code in C# preprocessor directives and Line numbers from the PDB file 【发布时间】:2015-09-14 12:03:10 【问题描述】:

我项目中的一个第三方开源库在使用 Veracode 扫描时引发了安全问题。但是,当我检查源代码中出现问题的行号时,它们的代码完全不同,没有任何漏洞。

即使符号未定义,从 PDB 文件推断的行号是否包括预处理器指令中存在的源代码?

【问题讨论】:

C# 在不能更改行号的预处理器中的一大优点。所以你的猜测并不接近准确。正确标记您的问题并显示准确警告和源代码。 @HansPassant 这是否包括编译器优化,就像提到的另一条评论(现已删除)? @ganeshran 这是我删除的评论,但它不准确,AFAIK C# 编译器不会内联调用,只有 JIT 会这样做,然后静态分析不会被它欺骗 @HansPassant 您能否发表您的评论作为答案,以便我将问题标记为已回答? #line (C# Reference) - #line 允许您修改编译器的行号和(可选)错误和警告的文件名输出。此示例显示如何报告与行号相关的两个警告。 #line 200 指令强制行号为 200(尽管默认值为 #7),直到下一个 #line 指令,文件名将被报告为“特殊”。 #line 默认指令将行编号返回为其默认编号,该编号计算由前一个指令重新编号的行。 【参考方案1】:

C# 的一大优点是预处理器不能更改行号。

P.S:这个问题已经在 cmets 中回答了

【讨论】:

以上是关于C# 预处理器指令中的源代码和 PDB 文件中的行号的主要内容,如果未能解决你的问题,请参考以下文章

C#预处理器指令

有没有比 C# 中的预处理器指令(#if 等)更好的东西?

C#-#define条件编译

C#-C#-#define条件编译

在 C# 的 #if 中使用 #define 预处理器指令是不是有效

用于区分 Visual Studio 2012 和 2010 的 C# 预处理器指令或条件?