首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gperftools和pprof不打印我的函数名。我需要关于如何解决这个问题的建议

gperftools和pprof不打印我的函数名。我需要关于如何解决这个问题的建议
EN

Stack Overflow用户
提问于 2017-09-02 05:09:33
回答 1查看 1K关注 0票数 1

我目前正在用C++在Ubuntu上写一个游戏。我最近对引擎进行了多线程处理,所以我从使用valgrind/callgrind进行性能分析切换到了使用gperftools。我已经让它工作了,但它不会打印我自己的函数名。奇怪的是,它可以识别SDL函数的名称(我在一些线程上看到了相反的情况;共享库函数没有找到它们的名称)。

kcachegrind Output

我运行我的程序,并执行以下两个命令以获得此结果:

pprof --callgrind /bin/ls ls.prof > ls.callgrind

kcachegrind ls.callgrind

我知道有几种方法可以使用gperftools;我已经通过包含"gperftools/profiler.h“以及使用ProfilerStart("ls.prof")和ProfilerStop()函数实现了这一点。

作为参考,下面是我的Makefile的一部分,以防万一:

OBJS = background.o .o gameObject.o uGrid.o main.o Timer.o sdlHandlers.o player.o handleEvents.o handleAllStateChanges.o enactAllStateChanges.o cleanLoop.o renderAll.o loadAllFiles.o loop.o inputHandler.o loopWrite.o loopDebug.o loopDebugSingleStep.o loopDebug_SDLDecoupled.o CC = g++ CFLAGS = -std=c++11 -Wall -O3 -c -g

代码语言:javascript
复制
Aegis: $(OBJS)
    $(CC) $(OBJS) -I/sdlLib -lSDL2  -I/sdlLib -lSDL2_image -I/sdlLib -lSDL2_mixer -lX11 -pthread -lprofiler -o Aegis

我删除了对目标文件等的所有引用;这不是整个文件。根据请求,我可以发布整个Makefile。

另外,因为人们在过去会感到困惑,所以我在项目的文件夹中使用了SDl2库的副本。这不是打字错误。

如果有任何不清楚的地方,我很乐意回答或提供更多的源代码,如果需要。任何解决此问题的方法

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-09-17 08:07:19

您似乎在没有调试符号的情况下链接程序。将-g (或者我倾向于添加-ggdb3)添加到标志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46007988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档