V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
PepperEgg
V2EX  ›  程序员

有个需求,不知有没有这种工具。C++调试相关。

  •  
  •   PepperEgg · 2022-10-18 16:40:49 +08:00 · 1366 次点击
    这是一个创建于 517 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如现在有个程序,比较大,大概几千 or 几万个 cpp 文件这种。 现在 ui 上有个按钮,我点下按钮,想快速知道从开始到结束都“经过”了哪写 cpp 。 比如输出日志:func A () a.cpp line:80 , func B () b.cpp line:100 这样。

    12 条回复    2022-10-19 13:18:38 +08:00
    sillydaddy
        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).
    402124773
        2
    402124773  
       2022-10-18 17:18:49 +08:00
    你用 windbg 就可以做得到啊
    导入下 pdb 即可,windows 平台上面,windbg 是个上古神器。你这个需求属于比较简单的。导入 pdb ,下个断点,点击按钮,触发即可。
    402124773
        3
    402124773  
       2022-10-18 17:26:35 +08:00
    你说的是经过了哪些程序啊,这个我搞错了,我还以为是你要打印 stack 。
    我说错了
    weidaizi
        4
    weidaizi  
       2022-10-18 17:39:53 +08:00
    哈哈哈,很有意思的问题。 但是 OP 想错了一点,点击之后出来的不是栈,而是树,所以打印日志跳出来的函数可能会非常多,且不能一眼看出顺序。
    回到需求本身,把函数都显示出来是可以的,还可以图形化的把树打出来,以及显示耗时比例,参考: https://gperftools.github.io/gperftools/cpuprofile.html
    786375312123
        5
    786375312123  
       2022-10-18 18:23:41 +08:00
    VS 的 debugger 不是就有 stack 的功能吗?
    loken2020
        6
    loken2020  
       2022-10-18 18:32:28 +08:00
    有一本书叫《软件调试》,张银奎写的
    tool2d
        7
    tool2d  
       2022-10-18 18:35:47 +08:00
    intel 可以把函数耗时给打出来,而函数对于的具体文件名和行号,可以通过编译器生成。

    生成文件可以是 map 或者 pdb 。

    自己写个工具组合一下就可以了。都用 c++了,不自己造一点轮子,是不太可能的。
    wxchen
        8
    wxchen  
       2022-10-18 18:59:43 +08:00
    Sourcetrail 可以看看,不过从去年开始不更新了
    dearmymy
        9
    dearmymy  
       2022-10-18 19:11:57 +08:00
    指望第三方调试工具不可能的。配合 windbg 下,提前下断点,最多给你打出堆栈信息
    自己源码编译,添加代码倒是可以应该。
    ylhawj
        10
    ylhawj  
       2022-10-18 19:21:16 +08:00 via iPhone
    Sourcetrail ,一目了然,可以试试
    janxin
        11
    janxin  
       2022-10-19 09:52:08 +08:00
    搜索关键词 code coverage tool

    不过可能不是所有的都是支持所有场景的,你自己看着改一下
    654656413245
        12
    654656413245  
       2022-10-19 13:18:38 +08:00
    Clion: 对函数右键-Find Usages-Call Hireachy
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5877 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:00 · PVG 11:00 · LAX 20:00 · JFK 23:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.