我有一個主機應用程序,我寫了一個插件。我將插件編譯到共享對象(比如foo.so),主機應用程序將通過dlopen加載它。在這種情況下,我的主機應用程序是來自llvm的選擇工具(儘管我不認爲這對於這個問題很重要)。如何在不分析主機應用程序的情況下剖析共享對象?
我想編譯我的插件啓用配置文件(即g++ -pg
,gprof
)。但是,當我這樣做時,配置文件輸出文件gmon.out永遠不會被創建。也許gprof希望有人叫一個安裝程序,或類似的東西。
由於各種原因,我想避免使用-pg重新編譯主機應用程序。我很好奇,如果可以在不分析主機應用程序選項的情況下分析共享對象foo.so。
我也研究過其他分析工具; HP的qprof應該能夠處理這種情況,但它無法解析共享對象中函數的名稱(它以非常幼稚的方式回退到addr2line)。
感謝, 尼克