GDB在非线程应用程序中显示1个线程

时间:2011-02-25 09:56:06

标签: c++ multithreading gdb

我正在用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的表现如此?

3 个答案:

答案 0 :(得分:2)

所有程序至少有一个主线程。该程序在main之前启动,因为C ++运行时在main()启动之前进行了一些初始化,比如调用所有具有构造函数的全局对象。

答案 1 :(得分:1)

操作系统用一个线程创建一个进程空间,并调用应用程序加载器来执行该线程中的应用程序,然后执行一些初始设置(将命令行参数收集到argcargv ,例如)并调用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)