簡體   English   中英

如何識別源代碼中的所有 C++ 標准庫調用?

[英]How to identify all C++ standard library calls in source code?

我想獲取有關我的應用程序源代碼中使用了多少種 C++ 標准庫功能的信息,例如,是使用矢量還是使用了某些 STL 算法? 對於 C 庫,我知道我可以use objdump -T | grep GLIBC 已編譯二進制文件上的use objdump -T | grep GLIBC作為帖子如何在編譯時識別所有 libc 調用? 顯示。 但是這種方法不適用於 C++,例如,作為objdump -T | grep GLIBCxx的結果。 objdump -T | grep GLIBCxx不是我所期望的,如下所示:

0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _Znam
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareERKS4_
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.19 _ZNSt6chrono3_V212system_clock3nowEv
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.15 _ZNSt8__detail15_List_node_base7_M_hookEPS0_
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4.22 _ZTINSt6thread6_StateE
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt14overflow_errorC1EPKc
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4 _ZTVSt9basic_iosIcSt11char_traitsIcEE
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.14 _ZSt20__throw_future_errori
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4 _ZSt7nothrow
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZSt9terminatev
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE7compareEPKc
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZNSt8ios_baseC2Ev
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZNSt8ios_baseD2Ev
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4.21 _ZTTNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZSt17__throw_bad_allocv
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.14 _ZSt25__throw_bad_function_callv
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.15 _ZNSt16invalid_argumentD2Ev
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt13runtime_errorC1EPKc

我想我可以使用 libclang 對源代碼進行靜態分析以獲取此類信息,但是還有其他方法嗎? 謝謝!

C++ 標准庫的許多組件都是模板。 其他非模板函數可以聲明為inline 無論哪種情況,都不能保證調用程序集中可見的函數。 編譯器可以輕松地內聯所有這些,並且幾乎沒有辦法告訴這已經發生了。

只有對文字源文本的分析才能告訴您您在尋找什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM