我正在用gdb调试我的应用程序。
我用break break
所以它可以在调用main时断开。
知道我是否使用thread info
它表明线程数是1.
线程如何在main之前启动? 我的调用中没有任何线程调用,因此从创建线程的地方开始。我正在使用这些库
sqlite,curl,pcre,c-client
更新 我编写了一个示例程序来测试所有程序是否以单线程开始
#include<iostream>
int main(int argc,char *argv[]){
std:: cout<<"Will I have any thread";
return 0;
}
但是当我用gdb调试它时
(gdb) break main
Breakpoint 1 at 0x400783: file threadtest.cpp, line 3.
(gdb) run
Starting program: /home/vivek/Desktop/a.out
Breakpoint 1, main (argc=1, argv=0x7fffffffe728) at threadtest.cpp:3
3 std:: cout<<"Will I have any thread";
(gdb) info threads
* 1 process 21608 main (argc=1, argv=0x7fffffffe728) at threadtest.cpp:3
(gdb)
它没有显示相同的信息。它显示1个进程而不是1个线程。
当我使用-lpthread编译它时,它会显示1个线程。
所以当我们使用lpthread时程序从一个线程开始? 或者GDB的表现如此?
答案 0 :(得分:2)
所有程序至少有一个主线程。该程序在main之前启动,因为C ++运行时在main()
启动之前进行了一些初始化,比如调用所有具有构造函数的全局对象。
答案 1 :(得分:1)
操作系统用一个线程创建一个进程空间,并调用应用程序加载器来执行该线程中的应用程序,然后执行一些初始设置(将命令行参数收集到argc
和argv
,例如)并调用main
。
答案 2 :(得分:0)
对于示例应用程序,当我使用-lpthread编译它时,它显示1个线程正在运行。 所以lpthread在这里发挥关键作用。
(gdb) break main
Breakpoint 1 at 0x400793: file threadtest.cpp, line 3.
(gdb) run
Starting program: /home/vivek/Desktop/a.out
[Thread debugging using libthread_db enabled]
Breakpoint 1, main (argc=1, argv=0x7fffffffe728) at threadtest.cpp:3
3 std:: cout<<"Will I have any thread";
(gdb) info threads
* 1 Thread 0x2aaaaaac8bb0 (LWP 21649) main (argc=1, argv=0x7fffffffe728)
at threadtest.cpp:3
(gdb)