2017-09-01 97 views
0

我目前正在使用Ubuntu上的SDL在C++中編寫遊戲。我最近多線程化了我的引擎,所以我從用valgrind/callgrind進行分析轉換爲gperftools。我已經得到它的工作,但它不會打印我自己的函數名稱。奇怪的是,它識別SDL函數名稱(我在一些線程上看到了相反的情況;共享庫函數沒有找到它們的名字)。gperftools和pprof不打印我的函數名稱。需要關於如何解決此問題的建議

kcachegrind Output

我跑我的程序,而且爲了得到執行以下兩條命令是:

pprof --callgrind /斌/ 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庫的副本。這不是一個錯字。

如果有什麼不清楚的地方,我很樂意回答,或者在需要時提供更多源代碼。任何事情都可以解決這個問題

謝謝!

+0

不能確定沒有完整的makefile(甚至更好的全'make'輸出,沒有編譯器警告,如果有的話)。 CC/CFLAGS似乎是可疑的,因爲它打算用於C代碼,而不是C++,但這取決於makefile的其餘部分。而且,你的非錯字路徑仍然會以'/'(文件系統根目錄)開頭,而不是'。/'(當前目錄)開頭,但與當前問題無關。 – keltar

回答

0

您似乎在沒有調試符號的情況下鏈接您的程序。添加-g(或者我傾向於將-ggdb3添加到標誌)。

相關問題