【发布时间】:2021-08-30 16:23:07
【问题描述】:
我使用 Opensplice DDS 6.7 创建了一个工具来创建读取器,等待回调对读取的消息执行,并打印消息的值。我们将 Google Protobuf 用于我们的消息结构。打印出消息的值并执行return 0;后,程序需要将近5秒才能真正终止。
单步执行 GDB 显示了对 Protobuf 中的析构函数的许多调用以及来自 opensplice 的线程连接。是否有 unix 工具或 GDB 工具来分析线程/函数的挂钟执行时间或函数被调用的次数,以帮助缩小导致破坏挂起的库或包装器的范围?
【问题讨论】:
-
你开启优化了吗?
-
使用 -O3 编译对这种行为没有明显的影响。我在没有优化的情况下进行调试,所以我可以看到这些符号,但是在优化程序时也会发生同样的事情。
-
在strace下运行,看看程序挂起的地方是否有系统调用。
-
谢谢!这正是我一直在寻找的,请随时回答,我会接受。很长一段时间都在调用睡眠并使用 GDB 我缩小了哪些线程是最后加入的。
标签: c++ protocol-buffers opensplice