gpt4 book ai didi

c++ - 使用 uftrace 分析 C++ 程序后如何理解 2 个 main() 函数?

转载 作者:行者123 更新时间:2023-11-30 05:14:56 26 4
gpt4 key购买 nike

我正在尝试 uftrace分析以下简单的 C++ 程序:

#include <iostream>

class A {
public:
A() {std::cout << "A is created" << std::endl;}
~A() {std::cout << "A is destroyed" << std::endl;}
};

int main() {
A a;
return 0;
}

配置文件结果是这样的:

# uftrace a.out
A is created
A is destroyed
# DURATION TID FUNCTION
2.026 us [ 4828] | __cxa_atexit();
[ 4828] | main() {
[ 4828] | __static_initialization_and_destruction_0() {
89.397 us [ 4828] | std::ios_base::Init::Init();
0.768 us [ 4828] | __cxa_atexit();
93.029 us [ 4828] | } /* __static_initialization_and_destruction_0 */
94.425 us [ 4828] | } /* main */
[ 4828] | main() {
[ 4828] | A::A() {
11.104 us [ 4828] | std::operator <<();
10.825 us [ 4828] | std::basic_ostream::operator <<();
24.514 us [ 4828] | } /* A::A */
[ 4828] | A::~A() {
0.978 us [ 4828] | std::operator <<();
1.676 us [ 4828] | std::basic_ostream::operator <<();
4.819 us [ 4828] | } /* A::~A */
31.428 us [ 4828] | } /* main */
2.095 us [ 4828] | std::ios_base::Init::~Init();

让我感到困惑的是有 2 个 main() 函数。从痕迹来看,我猜它们与 iostream 初始化有关,但尽管如此,我认为每个可执行文件应该只有 1 main() 条目。如何解读?

最佳答案

uftrace 用于删除符号 demangler 中的一些前缀,但它可能会让一些用户感到困惑,所以我提交了一个补丁来保留它,现在它被合并了 - https://github.com/namhyung/uftrace/pull/87

因此,如果您将 uftrace 更新为当前主控。您将看到第一个 main() 现在是 _GLOBAL__sub_I_main()

感谢您的反馈!

关于c++ - 使用 uftrace 分析 C++ 程序后如何理解 2 个 main() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43268745/

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