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

时间:2017-09-01 21:09:33

标签: sdl profiler gperftools

我目前正在Ubuntu上使用SDL用C ++编写游戏。我最近多线程我的引擎,所以我从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 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

Aegis: $(OBJS)
    $(CC) $(OBJS) -I/sdlLib -lSDL2  -I/sdlLib -lSDL2_image -I/sdlLib -lSDL2_mixer -lX11 -pthread -lprofiler -o Aegis

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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