gdb ./objs/srs

set args -c ./conf/rtmp.conf

b SrsThreadContext::generate_id

r

第一次断下的bt输出(设置主线程的 cid  100)

#0  SrsThreadContext::generate_id (this=0x8d52b0) at src/app/srs_app_log.cpp:50
#1  0x0000000000475076 in SrsServer::initialize_st (this=0x8d53e0) at src/app/srs_app_server.cpp:638
#2  0x000000000053475a in run_master () at src/main/srs_main_server.cpp:386
#3  0x000000000053442b in run () at src/main/srs_main_server.cpp:341
#4  0x00000000005343a9 in main (argc=3, argv=0x7fffffffe618) at src/main/srs_main_server.cpp:334

主线程的cid为100

执行c命令后的输出

(gdb) c
Continuing.
[2017-05-12 02:44:08.931][trace][1974][100] server main cid=100, pid=1974, ppid=1927, asprocess=0
[2017-05-12 02:44:08.931][trace][1974][100] write pid=1974 to ./objs/srs.pid success!

可以看到输出 cid=100,即 _srs_context->get_id()

---------------------------------------------------------

第二次断下的bt输出(设置 rtmp监听线程的 cid 101)

#0  SrsThreadContext::generate_id (this=0x8d52b0) at src/app/srs_app_log.cpp:50
#1  0x00000000004accd3 in internal::SrsThread::thread_cycle (this=0x8f3040) at src/app/srs_app_thread.cpp:184
#2  0x00000000004ad049 in internal::SrsThread::thread_fun (arg=0x8f3040) at src/app/srs_app_thread.cpp:245
#3  0x0000000000535371 in _st_thread_main () at sched.c:327
#4  0x0000000000535ae1 in st_thread_create (start=0x536258 <st_usleep+197>, arg=0x7fffffffe270, joinable=32767, stk_size=-134365648) at sched.c:591
#5  0x00000000004acaba in internal::SrsThread::start (this=0x8f3040) at src/app/srs_app_thread.cpp:110
#6  0x00000000004ad9f3 in SrsReusableThread::start (this=0x8f3020) at src/app/srs_app_thread.cpp:437
#7  0x000000000052c9c8 in SrsTcpListener::listen (this=0x8f2fe0) at src/app/srs_app_listener.cpp:251
#8  0x0000000000471ee5 in SrsStreamListener::listen (this=0x8f2f80, i="0.0.0.0", p=1935) at src/app/srs_app_server.cpp:153
#9  0x0000000000477987 in SrsServer::listen_rtmp (this=0x8d53e0) at src/app/srs_app_server.cpp:1089
#10 0x0000000000475866 in SrsServer::listen (this=0x8d53e0) at src/app/srs_app_server.cpp:743
#11 0x000000000053480b in run_master () at src/main/srs_main_server.cpp:398
#12 0x000000000053442b in run () at src/main/srs_main_server.cpp:341
#13 0x00000000005343a9 in main (argc=3, argv=0x7fffffffe618) at src/main/srs_main_server.cpp:334

---------------------------------------------------------------

第三次断下的bt输出(设置 SignalManager 监听线程的 cid 102)

#0  SrsThreadContext::generate_id (this=0x8d52b0) at src/app/srs_app_log.cpp:50
#1  0x00000000004accd3 in internal::SrsThread::thread_cycle (this=0x8d6870) at src/app/srs_app_thread.cpp:184
#2  0x00000000004ad049 in internal::SrsThread::thread_fun (arg=0x8d6870) at src/app/srs_app_thread.cpp:245
#3  0x0000000000535371 in _st_thread_main () at sched.c:327
#4  0x0000000000535ae1 in st_thread_create (start=0x536258 <st_usleep+197>, arg=0x7fffffffe330, joinable=32767, stk_size=-134365648) at sched.c:591
#5  0x00000000004acaba in internal::SrsThread::start (this=0x8d6870) at src/app/srs_app_thread.cpp:110
#6  0x00000000004ad31d in SrsEndlessThread::start (this=0x8d5a90) at src/app/srs_app_thread.cpp:299
#7  0x00000000004740f5 in SrsSignalManager::start (this=0x8d6840) at src/app/srs_app_server.cpp:441
#8  0x0000000000475931 in SrsServer::register_signal (this=0x8d53e0) at src/app/srs_app_server.cpp:765
#9  0x0000000000534846 in run_master () at src/main/srs_main_server.cpp:402
#10 0x000000000053442b in run () at src/main/srs_main_server.cpp:341
#11 0x00000000005343a9 in main (argc=3, argv=0x7fffffffe618) at src/main/srs_main_server.cpp:334

------------------------------------------------------------------------

第四次断下的bt输出(设置 Ingester 监听线程的 cid 103)

#1  0x00000000004accd3 in internal::SrsThread::thread_cycle (this=0x8d6bb0) at src/app/srs_app_thread.cpp:184
#2  0x00000000004ad049 in internal::SrsThread::thread_fun (arg=0x8d6bb0) at src/app/srs_app_thread.cpp:245
#3  0x0000000000535371 in _st_thread_main () at sched.c:327
#4  0x0000000000535ae1 in st_thread_create (start=0x536258 <st_usleep+197>, arg=0x7fffffffe390, joinable=32767, stk_size=-134439376) at sched.c:591
#5  0x00000000004acaba in internal::SrsThread::start (this=0x8d6bb0) at src/app/srs_app_thread.cpp:110
#6  0x00000000004ad9f3 in SrsReusableThread::start (this=0x8d6b90) at src/app/srs_app_thread.cpp:437
#7  0x00000000004f0016 in SrsIngester::start (this=0x8d6b50) at src/app/srs_app_ingest.cpp:135
#8  0x0000000000476d69 in SrsServer::ingest (this=0x8d53e0) at src/app/srs_app_server.cpp:852
#9  0x00000000005348b9 in run_master () at src/main/srs_main_server.cpp:410
#10 0x000000000053442b in run () at src/main/srs_main_server.cpp:341
#11 0x00000000005343a9 in main (argc=3, argv=0x7fffffffe618) at src/main/srs_main_server.cpp:334

执行c命令后的输出

Continuing.
[2017-05-12 02:56:27.779][trace][1974][100] ingest thread cid=103, current_cid=100

这条输出的代码如下

int SrsIngester::start()
{
    int ret = ERROR_SUCCESS;
    
    if ((ret = parse()) != ERROR_SUCCESS) {
        clear_engines();
        ret = ERROR_SUCCESS;
        return ret;
    }
    
    // even no ingesters, we must also start it,
    // for the reload may add more ingesters.
    
    // start thread to run all encoding engines.
    if ((ret = pthread->start()) != ERROR_SUCCESS) {
        srs_error("st_thread_create failed. ret=%d", ret);
        return ret;
    }
    srs_trace("ingest thread cid=%d, current_cid=%d", pthread->cid(), _srs_context->get_id());
    
    return ret;
}
_srs_context->get_id返回的是当前st线程的cid(100),根据上面的调用堆栈可以
看到是从main函数运行到此处的
int SrsThreadContext::get_id()
{
    return cache[st_thread_self()];
}
//返回当前st线程的cid

------------------------------------------------------------------------

至此在初始化过程不会再命中断点

-------------------------------------------------------------------------

开始推流到rtmp://192.168.151.151/live/marstv

后再次断下

#0  SrsThreadContext::generate_id (this=0x8d52b0) at src/app/srs_app_log.cpp:50
#1  0x00000000004accd3 in internal::SrsThread::thread_cycle (this=0x8f4fb0) at src/app/srs_app_thread.cpp:184
#2  0x00000000004ad049 in internal::SrsThread::thread_fun (arg=0x8f4fb0) at src/app/srs_app_thread.cpp:245
#3  0x0000000000535371 in _st_thread_main () at sched.c:327
#4  0x0000000000535ae1 in st_thread_create (start=0x536258 <st_usleep+197>, arg=0x7ffff7fdbb60, joinable=32767, stk_size=-134722000) at sched.c:591
#5  0x00000000004acaba in internal::SrsThread::start (this=0x8f4fb0) at src/app/srs_app_thread.cpp:110
#6  0x00000000004ad675 in SrsOneCycleThread::start (this=0x8f4f90) at src/app/srs_app_thread.cpp:367
#7  0x000000000047bbad in SrsConnection::start (this=0x8f4f48) at src/app/srs_app_conn.cpp:77
#8  0x0000000000478bc9 in SrsServer::accept_client (this=0x8d53e0, type=SrsListenerRtmpStream, client_stfd=0x8f4b70) at src/app/srs_app_server.cpp:1304
#9  0x0000000000472150 in SrsStreamListener::on_tcp_client (this=0x8f2f80, stfd=0x8f4b70) at src/app/srs_app_server.cpp:171
#10 0x000000000052cb49 in SrsTcpListener::cycle (this=0x8f2fe0) at src/app/srs_app_listener.cpp:275
#11 0x00000000004ada7d in SrsReusableThread::cycle (this=0x8f3020) at src/app/srs_app_thread.cpp:452
#12 0x00000000004ace3b in internal::SrsThread::thread_cycle (this=0x8f3040) at src/app/srs_app_thread.cpp:207
#13 0x00000000004ad049 in internal::SrsThread::thread_fun (arg=0x8f3040) at src/app/srs_app_thread.cpp:245
#14 0x0000000000535371 in _st_thread_main () at sched.c:327
#15 0x0000000000535ae1 in st_thread_create (start=0x915000, arg=0x3e8, joinable=32767, stk_size=-150456151) at sched.c:591
#16 0x000000000001ff40 in ?? ()
#17 0x0000000000000000 in ?? ()

#12 处 this=0x8f3040

前面创建rtmp监听线程的#1 处  this=0x8f3040

从中可以看出是在rtmp监听线程里创建一个新的st线程来处理这个推流

新st线程的cid 为104,推流SrsThread对象地址为  this=0x8f4fb0