比如现在有个程序,比较大,大概几千 or 几万个 cpp 文件这种。 现在 ui 上有个按钮,我点下按钮,想快速知道从开始到结束都“经过”了哪写 cpp 。 比如输出日志:func A () a.cpp line:80 , func B () b.cpp line:100 这样。
1
sillydaddy 2022-10-18 17:09:35 +08:00
需求挺有意思的,应该跟下面这个帖子是一个意思:
https://stackoverflow.com/questions/59745860/how-to-print-all-line-numbers-in-the-source-file-associated-with-the-flow-of-a-p 没有用过这样的工具。不过关键词应该就是这个:code coverage 这有个帖子: https://www.reddit.com/r/cpp/comments/daghzh/code_coverage_tools_for_c/ 这有个开源工具: https://github.com/OpenCppCoverage/OpenCppCoverage > Visual Studio support: Support compiler with program database file (.pdb). |
2
402124773 2022-10-18 17:18:49 +08:00
你用 windbg 就可以做得到啊
导入下 pdb 即可,windows 平台上面,windbg 是个上古神器。你这个需求属于比较简单的。导入 pdb ,下个断点,点击按钮,触发即可。 |
3
402124773 2022-10-18 17:26:35 +08:00
你说的是经过了哪些程序啊,这个我搞错了,我还以为是你要打印 stack 。
我说错了 |
4
weidaizi 2022-10-18 17:39:53 +08:00
哈哈哈,很有意思的问题。 但是 OP 想错了一点,点击之后出来的不是栈,而是树,所以打印日志跳出来的函数可能会非常多,且不能一眼看出顺序。
回到需求本身,把函数都显示出来是可以的,还可以图形化的把树打出来,以及显示耗时比例,参考: https://gperftools.github.io/gperftools/cpuprofile.html |
5
786375312123 2022-10-18 18:23:41 +08:00
VS 的 debugger 不是就有 stack 的功能吗?
|
6
loken2020 2022-10-18 18:32:28 +08:00
有一本书叫《软件调试》,张银奎写的
|
7
tool2d 2022-10-18 18:35:47 +08:00
intel 可以把函数耗时给打出来,而函数对于的具体文件名和行号,可以通过编译器生成。
生成文件可以是 map 或者 pdb 。 自己写个工具组合一下就可以了。都用 c++了,不自己造一点轮子,是不太可能的。 |
8
wxchen 2022-10-18 18:59:43 +08:00
Sourcetrail 可以看看,不过从去年开始不更新了
|
9
dearmymy 2022-10-18 19:11:57 +08:00
指望第三方调试工具不可能的。配合 windbg 下,提前下断点,最多给你打出堆栈信息
自己源码编译,添加代码倒是可以应该。 |
10
ylhawj 2022-10-18 19:21:16 +08:00 via iPhone
Sourcetrail ,一目了然,可以试试
|
11
janxin 2022-10-19 09:52:08 +08:00
搜索关键词 code coverage tool
不过可能不是所有的都是支持所有场景的,你自己看着改一下 |
12
654656413245 2022-10-19 13:18:38 +08:00
Clion: 对函数右键-Find Usages-Call Hireachy
|