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 文件中的行号的主要内容,如果未能解决你的问题,请参考以下文章