【问题标题】:How can I see what functions I call from a c++ standard library?如何查看我从 C++ 标准库调用的函数?
【发布时间】:2019-06-13 18:15:52
【问题描述】:

假设我使用了一个 c++ stl 列表,我声明它并用它做一些操作。我如何查看我的程序正在调用的 stl 列表模板中的特定函数。例如,如果我有这个代码:

 std::list<std::string> someList;
 someList = someOtherList;

如何在 stl list 中准确打印程序调用的构造函数?

【问题讨论】:

  • 你不能打印它,但你可以通过调试器来检查它。编辑:也许一个好的分析器可以为您提供示例堆栈跟踪。
  • 另外,该代码应该有一个构造函数调用,一个单独的复制赋值调用。
  • 或 grep 符号,如果没有内联...
  • 您也可以创建自己的头文件来覆盖 stl 头文件并查看编译器抱怨的地方
  • 看看组装会告诉你。也就是说,这听起来像是一个 XY 问题。你想通过知道调用哪个构造函数来解决什么问题?

标签: c++ debugging terminal c++-standard-library


【解决方案1】:

您的问题有两个答案:

  • 你不能。
  • 你仍然可以做一点。

c++ 标准只定义了 STL 应该做什么,而不是如何做。根据定义,你应该不可能从外面知道发生了什么。

因此,实现定义了您的库实际执行的操作。它可以只创建您的列表,也可以编写一个 Java 网络服务器来生成 c++ 列表,执行它并返回结果。你无法区分。

但是,不要害怕。仍然有两种可能性可以获得您想要的一些信息。首先,您可以购买 c++ 标准并查看 STL 的示例实现。 (幸运的是,您实际上可以在 cppreference 免费获得大部分内容。)或者,您可以使用调试器在执行代码时单步执行以查看调用了哪些函数。

但请注意,第一个答案不仅仅是为了咯咯笑。使用调试方法可能会遇到严重问题。一些 STL 实现不关心可读性。他们使用最快的任何丑陋的c ++,因此可能很难理解。此外,一些库只提供编译后的二进制文件和头文件,因此无法查看代码。

尽管如此,试试吧。也许你会知道你想要什么。如果没有,您仍然可以通过正确使用调试器来学习。 :D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-26
    • 2015-03-15
    • 2018-08-08
    • 2017-10-08
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    相关资源
    最近更新 更多