【问题标题】:gprof not showing call graphgprof 不显示调用图
【发布时间】:2013-01-16 08:29:25
【问题描述】:

我正在使用 -pg 选项运行我的程序。当我打开输出 gmon.out 时,它只是累积列表而不是调用图表。我该如何解决?

我知道之前有人问过这个问题:gprof - File is missing call-graph data 但实际上没有人回答这个问题,只给出了 gprof 替代方案的建议。

【问题讨论】:

    标签: profiling gprof


    【解决方案1】:

    我在寻找答案时也有过令人失望的经历。

    特别是:以下内容对我有帮助(最新的 Ubuntu 2013 年 5 月)。尝试-fno-reorder-functions-fno-inline。例如,在 cmake 下,这是有效的:

    if(CMAKE_COMPILER_IS_GNUCXX)
      add_definitions(${CMAKE_CXX_FLAGS} "-Ofast")
      add_definitions(${CMAKE_CXX_FLAGS} "-fno-reorder-functions")
      add_definitions(${CMAKE_CXX_FLAGS} "-fno-inline")
    endif()
    

    一般: 尝试查看编译器优化文档。找到一个有效的优化级别,然后为下一个级别添加所有列出的选项。尝试使用二分法进行添加和删除。同样,在 cmake 中类似:

      add_definitions(${CMAKE_CXX_FLAGS} "-O1")
      add_definitions(${CMAKE_CXX_FLAGS} "-fthread-jumps")
      add_definitions(${CMAKE_CXX_FLAGS} "-falign-functions  -falign-jumps")
      add_definitions(${CMAKE_CXX_FLAGS} "-falign-loops  -falign-labels")
      # add_definitions(${CMAKE_CXX_FLAGS} "-fcaller-saves")
      # add_definitions(${CMAKE_CXX_FLAGS} "-fcrossjumping")
      # add_definitions(${CMAKE_CXX_FLAGS} "-fcse-follow-jumps  -fcse-skip-blocks")
      # add_definitions(${CMAKE_CXX_FLAGS} "-fdelete-null-pointer-checks")
    

    很可能是一两个优化选项导致了所有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      • 2018-06-03
      相关资源
      最近更新 更多