我正在实施性能分析工具。我正在做的一件事是估计函数调用的成本。为了做到这一点,我需要知道给定的函数是否在共享库中是虚拟的。如何从共享库中提取虚拟表信息?
为此,我可以访问共享库程序集。我也有一个执行的调用图。在执行过程中我不能做任何事情,分析必须在执行后使用我可以从调用图和共享库中获得的信息来完成。
我想过的唯一方法是从库中提取vtable并查看我的函数是否在vtable中,但我没有找到从程序集中提取类的vtable的方法。
我试图
readelf -s -W lib.so | c++filt | grep vtable
但只要你给我很好的虚函数表的地址(至少我认为这是一个),而这个地址会导致我一事无成。
共享库是用gcc编译4.3.5
是否有人知道一种方式来获得这种虚函数表?或者至少有人知道一种方法来知道函数是否在共享库中是虚拟的?
非常感谢
出于好奇,为什么你需要知道,除非你试图从一个特定的类继承并重写一个方法? (在这种情况下,您可以在标题定义中找到信息) – totowtwo 2011-06-16 22:05:31
我正在使用性能分析工具,并且需要知道函数是否为虚拟来分析对此函数的调用的开销。我无法访问源文件 – 2011-06-16 22:13:28
@Baptiste - 为什么不尝试跟踪调用的实际执行,并查看它是直接链接还是使用函数地址的指针引用? – littleadv 2011-06-16 22:27:22