V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
LuckyPocketWatch
V2EX  ›  Linux

Linux 程序启动缓慢,如何查看缓慢在那里?

  •  
  •   LuckyPocketWatch · 229 天前 · 1703 次点击
    这是一个创建于 229 天前的主题,其中的信息可能已经有所发展或是发生改变。

    系统是 ubuntu,我用 C++写了一个程序

    int main(){
        std::cout<<get_current_time();  
        //do something..
        std::cout<<get_current_time();
        return 0;
    }
    

    编译的时候需要链接一些动态/静态库,然后运行的时候执行命令./T1,程序大约 10 秒后会打印

    11:58:43:389
    11:58:43:421
    

    我有没有办法知道,我输入./T1 命令到执行第一行代码 std::cout<<get_current_time();这段时间程序做了什么,有哪些步骤,每步耗时大概多少?

    我有 sudu 密码但没有 root 权限

    第 1 条附言  ·  229 天前
    我链接的那些库是第三方的库而且是闭源的,只有.so 文件
    8 条回复    2023-09-12 02:57:27 +08:00
    yanqiyu
        1
    yanqiyu  
       229 天前
    盲猜是你链接的库里面的全局/静态对象初始化的时间
    可以借助 gprof 这样的 profile 工具采样调查耗时
    或者-finstrument-functions 配合手写__cyg_profile_func_enter 以及__cyg_profile_func_exit 直接看每个函数的耗时(不知道有没有造好的轮子)
    Jirajine
        2
    Jirajine  
       229 天前 via Android   ❤️ 2
    strace 和 gdb
    LindsayZhou
        3
    LindsayZhou  
       229 天前
    uprobe
    LindsayZhou
        4
    LindsayZhou  
       229 天前
    https://v2ex.com/t/953231

    不太明白你说的有 sudo 密码没 root 权限是什么意思,只允许 sudo 切换到非特权用户?
    uprobe 目前应该还是要 root 权限。
    passive
        7
    passive  
       228 天前 via Android   ❤️ 1
    之前遇到过一次图形驱动没设置好,gui 库走 mesa 加载了 opencl 还是 cuda 的 so ,每次启动先检测硬件,超时了才继续。
    GeekGao
        8
    GeekGao  
       228 天前
    5 楼已经提及了,perf report
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2808 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:03 · PVG 23:03 · LAX 08:03 · JFK 11:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.