gpt4 book ai didi

c++ - 如何找到在 g++ 代码中调用给定成员函数或 ctor 的所有位置?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:09 28 4
gpt4 key购买 nike

我试图在一个庞大而陈旧的代码库中找到所有调用了某些构造函数或函数的地方。具体来说,这些是 std::string 中的某些构造函数和成员函数。类(即 basic_string<char> )。例如,假设有一行代码:

std::string foo(fiddle->faddle(k, 9).snark);

在这个例子中,看这个并不明显 snark可能是 char * ,这是我感兴趣的。

目前尝试解决这个问题

我研究了 gcc 的一些转储功能,并生成了其中一些功能,但我没能找到任何告诉我给定代码行将生成对 string 的调用的信息。构造函数采用 const char * .我还使用 -s 编译了一些代码以保存生成的等效汇编代码。但这有两个问题:函数名称被“破坏”,因此不可能知道用 C++ 术语调用了什么;并且没有任何类型的行号,因此即使在源文件中找到相同的位置也很困难。

动机和背景

在我的项目中,我们将一个大型的旧代码库从 HP-UX(及其 aCC C++ 编译器)移植到 RedHat Linux 和 gcc/g++ v.4.8.5。 HP 工具链允许一个人初始化 stringNULL指针,将其视为空字符串。 Gnu 工具生成的代码失败,并带有某种 null 取消引用错误。所以我们需要找到所有可能的情况,并加以补救。 (例如,通过添加代码来检查 NULL 并改为使用指向 "" 字符串的指针。)

因此,如果有人不得不处理基本问题并可以提供其他建议,我们也将受到欢迎。

最佳答案

您是否考虑过使用静态分析?

Clang 有一个名为 clang 分析器的可扩展分析器。

您可以编写一个自定义插件来检查此特定行为,方法是实现一个 clang ast 访问者,该访问者查找字符串变量声明并检查是否将其设置为 null。

有一个手册 here .

另请参阅:https://github.com/facebook/facebook-clang-plugins/blob/master/analyzer/DanglingDelegateFactFinder.cpp

关于c++ - 如何找到在 g++ 代码中调用给定成员函数或 ctor 的所有位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41007994/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com