2010-01-23 42 views
2

我有一個主機應用程序,我寫了一個插件。我將插件編譯到共享對象(比如foo.so),主機應用程序將通過dlopen加載它。在這種情況下,我的主機應用程序是來自llvm的選擇工具(儘管我不認爲這對於這個問題很重要)。如何在不分析主機應用程序的情況下剖析共享對象?

我想編譯我的插件啓用配置文件(即g++ -pg,gprof)。但是,當我這樣做時,配置文件輸出文件gmon.out永遠不會被創建。也許gprof希望有人叫一個安裝程序,或類似的東西。

由於各種原因,我想避免使用-pg重新編譯主機應用程序。我很好奇,如果可以在不分析主機應用程序選項的情況下分析共享對象foo.so。

我也研究過其他分析工具; HP的qprof應該能夠處理這種情況,但它無法解析共享對象中函數的名稱(它以非常幼稚的方式回退到addr2line)。

感謝, 尼克

回答

0

我假設你想這樣做是想辦法優化插件(而不是剛開定時信息)的原因。

您可以在調試器或IDE下運行主機應用程序嗎? IDE是否有暫停按鈕,或者您是否可以用Ctrl-C或其他鍵來中斷它?

然後,您可以使用this technique快速找到代價高昂的代碼。只有在插件運行時才採樣,或者如果您不能這樣做,只需忽略不會在插件中結束的示例。

即使你得到gprof工作,或類似的分析器,you're likely to be disappointed

相關問題