如何检查第三个 API 是否在 Linux 中为 c/c++ 程序创建了一个新线程?
How to check if a 3rd API create a new thread for c/c++ program in linux?
只是想问一下有什么方法可以检查第三个 API 是否会在 Linux 中为 c/c++ 程序创建一个新线程?如下所示,假设do_something_API是第三个 API 并且我们不知道实现,那么如何知道该功能是否会创建一个新线程?使用 gdb 或其他工具?
int main() {
...
//call 3rd party API
do_something_API();
...
}
如何知道功能是否会创建一个新线程?
只需在 gdb 中main
函数中的do_something_API()
行停止,然后使用next
命令一次即可执行do_something_API()
函数。如果该函数创建任何新线程,您将看到来自 gdb 的消息,例如:
[New Thread 0x41e02940 (LWP 25582)]
请参阅文档中:
每当 GDB 在程序中检测到新线程时,它都会显示 目标系统对线程的标识,其中有一条消息 形式 '[New systag]',其中 systag 是一个线程标识符,其形式 因特定系统而异。例如,在 GNU/Linux 上, 您可能会看到
[新线程0x41e02940 (LWP 25582(]
如何知道功能是否会创建一个新线程?
- 您可能遇到 XY 问题。你到底想实现什么?
- 阅读文档或询问第三方开发人员。如果他们承诺永远不会创建线程,那么这就是答案。否则,假设它们可以(如果不是在当前版本中,那么在下一个版本中(。
- 您可以运行
nm libsomething.{a,so} | grep pthread_create
和strings libsomething.{a,so} | grep pthread_create
。如果这两个命令都没有产生任何输出,则可以非常确定当前版本的库不会创建新线程。 -
如果在 GDB 下运行测试程序,并通过
do_something_API()
调用next
,GDB 将使用类似于[New thread ...]
的消息报告新线程创建。如果您没有看到此类消息,则表示未创建新线程。您还可以在
pthread_create
上设置断点,或者在调用前后使用info thread
。注意:如果没有创建新线程,这是一个非常弱的指标:
do_something_API()
可能会根据运行时环境(例如环境变量、当前目录或一天中的时间(决定是否创建新线程,因此下次运行测试时,答案可能会改变。
您可以尝试在 gdb 中运行代码并使用"info threads"查看程序中所有正在运行的线程。
或者您也可以使用/proc/进行检查
- 试图在visual studio上用C++创建一个桌面应用程序
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- 修改创建帐户程序
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 试图创建流或fopen时程序崩溃
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- 如何创建事件驱动的 SDL2 应用程序
- 用于创建/注册虚拟存储设备的 IOKit 驱动程序
- 亲.InsertAtHead() 调用创建程序崩溃
- 创建程序以从给定的.txt文件中查找文本,替换并计算单词
- 使用OpenCV为使用GENICAM API和C++的各种相机创建程序
- C++帐户创建程序崩溃
- Qt 创建程序 5.10 无法检索 MSVC 环境错误
- 用户创建程序失败
- C++创建程序文件中文件的进程
- 正在创建C++程序以运行shell脚本
- 创建c++程序
- 如果一个函数从未被调用,编译器是否在创建程序时省略它?
- 如何在vc++中使用netstat命令创建程序