【问题标题】:GDB is showing 1 Thread in non threaded applicationGDB 在非线程应用程序中显示 1 个线程
【发布时间】:2011-02-25 09:56:05
【问题描述】:

我正在使用 gdb 调试我的应用程序。 我用过主要休息 所以当 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 的行为是这样的?

【问题讨论】:

  • 会不会,这个线程是你的主线程?

标签: c++ multithreading gdb


【解决方案1】:

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

【讨论】:

  • 当我在示例程序 gdb 中使用 -lpthread 链接时显示 1 个线程。但是当它不显示一个过程时。那么当我们使用 lpthread 时程序从一个线程开始?还是 GDB 的行为是这样的?
  • 进程中总是有一个线程(主线程,正如@Maister 提到的)。但是 GDB 不能告诉你任何关于线程的信息,除非你链接到一个线程库。
【解决方案2】:

操作系统创建一个带有一个线程的进程空间并调用应用程序加载器以在该线程中执行应用程序,然后执行一些初始设置(例如,将命令行参数收集到argcargv)并致电main

【讨论】:

    【解决方案3】:

    对于示例应用程序,当我使用 -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) 
    

    【讨论】:

      猜你喜欢
      • 2022-08-18
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      相关资源
      最近更新 更多