簡體   English   中英

GDB在非線程應用程序中顯示1個線程

[英]GDB is showing 1 Thread in non threaded application

我正在用gdb調試我的應用程序。 我使用了break main,所以在調用main時可以中斷。 知道我是否使用thread info它表明線程數為1。

線程如何在main之前啟動? 我的通話中沒有任何線程調用,因此從哪里創建線程。 我正在使用這些庫

sqlite,curl,pcre,客戶

更新我已經編寫了一個示例程序來測試所有程序是否都從單個線程開始

 #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表現得像那樣?

所有程序都有至少1個線程,即主線程。 該程序在main之前啟動,因為C ++運行時在main()啟動之前進行了一些初始化,例如調用具有構造函數的所有全局對象。

操作系統使用一個線程創建一個進程空間,然后調用應用程序加載器以在該線程中執行應用程序,該線程依次執行一些初始設置(例如,將命令行參數收集到argcargv )並調用main

對於示例應用程序,當我使用-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) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM