- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我花了一整天的时间试图制作 gperftools工作:/
我厌倦了不同的 libunwind 版本,但是当我成功安装它时,每当我使用 std::system 时,我都会收到以下错误“Profiling timer expired”。
主要.cpp:
#include <cstdlib>
int main(int argc, char** argv) {
std::system("cut -f1 anyExistingFile | sort > newSortedFile");
return 0;
}
我厌倦了执行如下分析:
$ g++ main.cpp -o myApp -std=c++11
$ env CPUPROFILE=out.prof LD_PRELOAD="/usr/local/lib/libprofiler.so" ./myApp
Profiling timer expired
PROFILE: interrupts/evictions/bytes = 0/0/64
然后我做了:
$ env LD_PRELOAD="/usr/local/lib/libprofiler.so"
$ sort file
$ env LD_PRELOAD=
$ sort file
当我将 LD_PRELOAD 设置为“/usr/local/lib/libprofiler.so”时,排序不起作用!!
然后我尝试使用库的静态版本:
$ g++ main.cpp -o myApp -std=c++11 /usr/local/lib/libtcmalloc_and_profiler.a
$ env CPUPROFILE=out.prof ./myApp
什么都没发生,out.prof 没有创建!
所以我想知道为什么我在使用 std::system(sort) 时会收到“分析计时器已过期”?这是使用静态版本的 gperftools 库的正确方法吗?
附:64位,gperftools=2.5,libunwind=1.1,linux Ubuntu 16.04.1
最佳答案
问题似乎是,当您设置 LD_PRELOAD 时,您实际上为当前 shell 作业中的所有内容都设置了它,包括您的程序产生的子进程。 CPUPROFILE 环境变量也是如此。因此 cpu 分析器也被激活以进行排序。看起来排序程序中的某些东西正在将 SIGPROF 信号处理程序重置为默认值,而没有实际重置相应的间隔计时器。因此,当排序完成足够的工作时,它会收到信号并且默认处理程序会退出程序。简单的解决方法是在您的排序程序周围取消设置 CPUPROFILE。例如:
#include <cstdlib>
int main(int argc, char** argv) {
std::system("cut -f1 /usr/share/dict/american-english-insane | CPUPROFILE='' sort > /tmp/insane");
return 0;
}
至于为什么静态链接不起作用,这是因为您的程序中没有任何内容会引入分析器符号,因此实际上变成了空操作 w.r.t.分析。
关于c++ - 将 gperftools 与排序一起使用时分析计时器已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42024496/
我已经配置并构建了gpreftools 。但是,我似乎找不到我的程序生成的配置文件来显示它。 我采取了以下行动: 添加 -lprofiler链接器标志到我的 .pro ,构建程序并在链接阶段正确添加标
在运行一个使用地址清理器构建的程序时出现这个问题,这让我很好奇。 The gperftools source code包含以下功能: void MallocExtension::Register(Ma
gperftools documentation说 libprofiler应该链接到目标程序中: $ gcc myprogram.c -lprofiler (不改变程序的代码)。 然后程序应该使用特定
我正在寻找如何gperftools的简单解释作品。到目前为止,这是我学到的: 它运行一个 stop-the-world 采样器。换句话说,它会定期停止正在分析的程序以收集信息。 Golang 的 pp
我花了一整天的时间试图制作 gperftools工作:/ 我厌倦了不同的 libunwind 版本,但是当我成功安装它时,每当我使用 std::system 时,我都会收到以下错误“Profiling
我正在使用 gperftools用于分析我的 C 代码。结果我无法使用 pprof 应用程序分析配置文件。 $ gcc -g prog.c -o prog -lprofiler $ export CP
我正在尝试使用 gperftools 分析多线程工作负载,但在解释生成的输出时遇到困难。我编写了一个简单的程序,它启动两个具有相同工作负载的线程,并使用 gperftools cpu 分析器进行分析。
我正在尝试为我使用 gperftools 的代码生成分析(逐行源代码)。 gcc a.c -lprofiler -Wl,--no-as-needed -lprofiler -Wl,--as-neede
我有一个任务 gprof 似乎无法使用。 Callgrind 在这里提供了很多帮助,但是当找到更像 gprof 的解决方案时,我。例如,gperftools,深入其中进行尝试。 所以我写了一个虚拟程序
我正在尝试在 unix 平台上对 C++ 应用程序进行堆分析。我已经尝试过 valgrind 的 massif,但它会使应用程序非常慢并影响应用程序的行为。 我正在寻找其他选项并遇到了 gperfto
我正在安装 gperftools: https://code.google.com/p/gperftools/ 一切正常,我看到该项目链接到/usr/local/lib 我想将库放在我项目的本地文件夹
我正在尝试使用 mod_fascgi 和 perftools 分析在 apache 中运行的 fcgi 应用程序 (C++) >。所以是 Centos 6 x86_64。 问题如下。根据gperfto
根据文档,http://gperftools.googlecode.com/svn/trunk/doc/cpuprofile.html , cpu profiles 确实支持多进程并且会生成独立的输出
我已阅读相关帖子 here和 here ,并查看了 Dirk Eddelbuettel 的演讲 here然而,我什至无法从 gperftools 获取 .log 文件。这是我的 R 文件,名为 Rcp
我正在尝试分析应用程序以比较其使用不同分配策略的性能。 我在使用 tcmalloc 时可以毫无困难地分析它,但是如何使用 libc 的分配函数来分析它呢?事实上,启用 gperftool 的堆分析器需
我想分析一个在 ARM 设备中运行的 C++ 应用程序。我运行了我的应用程序并使用 ProfilerStart("googleProfBL.prof") 对其进行了分析,因此生成了文件。当我在本地计算
我正在尝试对回调驱动的系统进行 CPU 分析,我只对分析回调导致我以某种方式使用react时的分析感兴趣?我可以使用 gperftools 来完成这个吗? ProfilerEnable()/Profi
我想分析我的守护程序,它会暂停主线程: sigset_t signal_mask; sigemptyset(&signal_mask); sigaddset(&signal_mask, SIGTERM
当您在 GPerfTool 的 pprof 命令中使用“--gv”选项时,您会得到一个非常漂亮的图表。是的。 线条可以是粗线、细线、虚线或实线。我认为厚/薄是基于该行之后的样本条目数。 但我既没有弄清
我在 ubuntu 16.04 上。 这是我做的: 已安装 gperftools: sudo apt-get install google-perftools libgoogle-perftools-
我是一名优秀的程序员,十分优秀!