如何在运行时中收集执行的行号

I was researching on topic to analyze the codes that are executed with different inputs in Go. Assuming I have following code:

1  package main
2  import "fmt"
3  func main() {
4      var i int
5      _, err := fmt.Scanf("%d", &i)
6      if i%2 == 0 {
7         fmt.Println("input is even")
8      } else {
9         fmt.Println("input is odd")
10     }
11  }

The codes that are executed are based on the value of input. If your input is an even number, like 20, then the output should be [1, 2, 3, 4, 5, 6, 7, 11]. Otherwise, if the value of input is odd, like 21, then output will be [1, 2, 3, 4, 5, 6, 8, 9, 10, 11].

I am looking for a way in Go to print out the line numbers executed in runtime. If there are other imported go files, the line numbers that are executed in those files should be also printed out.

douhanzhuo6905
douhanzhuo6905 谢谢你的建议。我将检查他们是否可以从他们的源代码中获得一些想法。
大约一年之前 回复
dqsong2010
dqsong2010 我尝试使用“测试”包来收集使用“执行测试”命令进行测试的代码行,并且该行有效。谢谢你的建议。这应该是一个候选解决方案。我将继续寻找另一种更简单的方式来在运行时执行期间收集这些信息,而无需使用“gotest”
大约一年之前 回复
dongxiequ3724
dongxiequ3724 查看程序在做什么的另一种方法是它的调用表。看看github.com/protolambda/gocyto和github.com/TrueFurby/go-callvis
大约一年之前 回复
dongyu1918
dongyu1918 它不适合在正常执行中运行。这是一个配置工具,旨在偶尔运行(在测试过程中)。但是也许您可以强迫它做您想做的事。
大约一年之前 回复
dtup3446
dtup3446 谢谢你的建议。我想我明白了。我需要做的是将覆盖率工具集成到我的代码中,并确保在每次执行中都生成了覆盖率报告。然后,我可以在每次执行中获得行号。非常感谢。
大约一年之前 回复
dongzantai7570
dongzantai7570 也许我理解...您本质上不是在谈论该代码...您想知道执行了哪些代码行。您需要的是覆盖率工具。
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐