1. 程式人生 > >在用gdb除錯正在執行的nginx woker程序時會產生exited on signal 9

在用gdb除錯正在執行的nginx woker程序時會產生exited on signal 9

由於nginx在執行的時候,用gdb執行nginx的woker程序引起的:

140:/var/log/nginx# ps aux|grep nginx
root     17915  0.0  0.2  40196  1048 ?        Ss   11:25   0:00 nginx: master process /usr/local/nginx/sbin/nginx
www-data 17990  1.1  0.3  40700  1444 ?        S    11:31   0:00 nginx: worker process     
root     18005  0.0  0.2   9724   796 pts/0    S+   11:32   0:00 grep nginx
140:/var/log/nginx# gdb -p 17915
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Attaching to process 17915
Reading symbols from /usr/local/nginx/sbin/nginx...done.
Reading symbols from /lib/libcrypt.so.1...done.
Loaded symbols for /lib/libcrypt.so.1
Reading symbols from /usr/lib/libmhash.so.2...done.
Loaded symbols for /usr/lib/libmhash.so.2
Reading symbols from /usr/lib/libpcre.so.3...done.
Loaded symbols for /usr/lib/libpcre.so.3
Reading symbols from /usr/lib/libssl.so.0.9.8...done.
Loaded symbols for /usr/lib/libssl.so.0.9.8
Reading symbols from /usr/lib/libcrypto.so.0.9.8...done.
Loaded symbols for /usr/lib/libcrypto.so.0.9.8
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /usr/lib/libz.so.1...done.
Loaded symbols for /usr/lib/libz.so.1
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux-x86-64.so.2...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from /lib/libnss_compat.so.2...done.
Loaded symbols for /lib/libnss_compat.so.2
Reading symbols from /lib/libnsl.so.1...done.
Loaded symbols for /lib/libnsl.so.1
Reading symbols from /lib/libnss_nis.so.2...done.
Loaded symbols for /lib/libnss_nis.so.2
Reading symbols from /lib/libnss_files.so.2...done.
Loaded symbols for /lib/libnss_files.so.2
0x00007f39380c926a in sigsuspend () from /lib/libc.so.6
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /usr/local/nginx/sbin/nginx
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
[emerg]: still could not bind()
Program exited with code 01.
(gdb) q

檢視error log

140:/var/log/nginx# tail -n 30 error.log

2010/03/02 11:31:48 [alert] 17915#0: worker process 17916 exited on signal 9
2010/03/02 11:31:48 [emerg] 17991#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2010/03/02 11:31:48 [emerg] 17991#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2010/03/02 11:31:48 [emerg] 17991#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2010/03/02 11:31:48 [emerg] 17991#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2010/03/02 11:31:48 [emerg] 17991#0: bind() to 0.0.0.0:80 failed (98: Address already in use)

相關推薦

gdb除錯正在執行nginx woker程序時會產生exited on signal 9

由於nginx在執行的時候,用gdb執行nginx的woker程序引起的: 140:/var/log/nginx# ps aux|grep nginx root     17915  0.0  0.2  40196  1048 ?        Ss   11:25   0:

linux gdb 除錯執行緒 多程序 顯示巨集

                一、gdb除錯多執行緒gdb)info thread 檢視當前程序的執行緒。 gdb)thread <ID> 切換除錯的執行緒為指定ID的執行緒。 gdb)break file.c:100 thread all  在file.c檔案第100行處為所有經過這裡的執行緒

使用gdb除錯執行緒多程序程式

GDB的基本介紹 GDB是GUN開源組織釋出的一個強大的UNIX下的程式除錯工具。或許,平時大家更加習慣圖形介面的除錯,比如VS上的IDE除錯;但是如果我們在UNIX或Linux下做軟體,我們呢就更加需要熟練GDB這個除錯工具。 一般來說,GDB主要能夠完成以下的幾個功能: ①啟動你的程式,可以按照你自己

【Linux】GDB除錯執行緒和多程序以及Core檔案

GDB偵錯程式 基本概念 GDB是GNU開源組織釋出的一個強大的UNIX下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像VC、BCB等IDE的除錯,但如果你是在UNIX平臺下做軟體,你會發現

gdb除錯正在執行程序

   有時會遇到一種很特殊的除錯需求,對當前正在執行的其它程序進行除錯(正是我今天遇到的情形)。這種情況有可能發生在那些無法直接在偵錯程式中執行的程序身上,例如有的程序 只能在系統啟動時執行。另外如果需要對程序產生的子程序進行除錯的話,也只能採用這種方式。GDB可以對正在執行

gdb除錯正在執行程序

用gdb可以除錯當前的程式的使用情況,讀出他的引數。 以下用一個簡單的程式做為例子:來說明gdb的除錯。第一步  編譯一個死迴圈程式。 /* File name malloc.c*/ #include   <stdio.h>                                     

gdb除錯執行緒出現的死鎖

   多執行緒的條件下,程式很容易出現死鎖,此時各個執行緒處於等待狀態,可以通過gdb除錯找到死鎖出現的地方。 例子: #include <stdio.h> #include <pthread.h> #include <uni

在arm-linux上gdb除錯程式,出現“Program received signal SIGPIPE, Broken pipe”

        出現這種情況大多是因為程式採用CS架構(伺服器/客戶端)在讀寫操作時出現,我第一次也是在這樣的情況下遇到的。首先我們都知道套接字的通訊方式是雙工的,同端即可寫也可讀。而出現Broken pipe這種情況的原因是寫段正在寫入時,另一端已關閉套接字,這樣程序就會向

GDB除錯程式 Ubuntu中文

                導讀: 用GDB除錯程式出自Ubuntu中文目錄[隱藏]1 GDB概述 2 一個除錯示例 3 使用GDB 4 GDB的命令概貌 5 GDB中執行UNIX的shell程式 6 在GDB中執行程式 7 除錯已執行的程式 8 暫停/恢復程式執行 8.1 設定斷點(Break Poin

gdb 除錯執行

如果目標程序已經core dump了,那麼 gdb -c core xxx   xxx是對應的程式檔案。 如果目標程序還在執行,通常此時用於除錯執行緒死鎖的情況。有兩種方法 一是 gdb -p xxx  xxx是該程序的程序ID 或者用gcore xxx先獲取對應

使用gdb除錯正在執行的程式

一般來說GDB主要除錯的是C/C++的程式。要除錯C/C++的程式,首先在編譯時,我們必須要把除錯資訊加到可執行檔案中。使用編譯器(cc/gcc/g++)的 -g 引數可以做到這一點。如: $gcc -g -Wall hello.c -o hello $g++ -g -

gdb除錯當前執行的程式

為什麼使用gdb除錯正在執行的程式?      因為有時候bug很難復現、或者環境搭建起來比較困難,所以在出現bug的時候可以使用gdb的attach功能除錯正在執行的GCC編譯出來的程式,注意編譯選項要加-g,否則沒有符號表。 除錯步驟?      1. 編譯時

GDB除錯程式

hchen/test> gdb tst  <---------- 啟動GDB GNU gdb 5.1.1 Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by the GNU General P

GDB除錯正在執行的程式

      有時會遇到一種很特殊的除錯需求,對當前正在執行的其它程序進行除錯(正是我今天遇到的情形)。這種情況有可能發生在那些無法直接在偵錯程式中執行的程序身上,例如有的程序 只能在系統啟動時執行。另外如果需要對程序產生的子程序進行除錯的話,也只能採用這種方式。GDB可以

使用gdb除錯當前執行的程式

用gdb可以除錯當前的程式的使用情況,讀出他的引數。 以下用一個簡單的程式做為例子:來說明gdb的除錯。第一步  編譯一個死迴圈程式。 /* File name malloc.c*/ #include   <stdio.h>                    

Linux下gdb除錯執行

gdb除錯多執行緒,目前我知道的就以下幾條指令,當然編譯的時候需要加-g選項。 info threads 顯示所有執行緒,系統會給每個執行緒都分配一個編號,編號前帶“*”的,是當前正在除錯的執行緒

gdb除錯C++程式時列印變數的值

如果這個值是本地變數,那麼沒有任何的問題。gud-tooltip-mode也能正確顯示。不過如果是類裡的成員,有的時候就麻煩了。據我目前的觀察,有的時候gdb可以正確的找到當前類的繼承關係,可以直接使用this來訪問相關資訊:p *this: 打印出當前類裡所有的成員的值p this->member:

GDB除錯程式(五)

在GDB中,你可以隨時檢視以下三種變數的值: 1、全域性變數(所有檔案可見的) 2、靜態全域性變數(當前檔案可見的) 3、區域性變數(當前Scope可見的) 如果你的區域性變數和全域性變數發生衝突(也就是重名),一般情況下是區域性變數會隱藏全域性變數,也就是說,如果一個全域性變數和一個函式中的區域性變數同名時

GDB除錯程式(四)

        (gdb) disassemble func        Dump of assembler code for function func:        0x8048450 <func>:       push   %ebp        0x8048451 <func+

vlc編譯:GDB除錯vlc

    採用另外的方式,b fine_name:line_number的形式,vlc裡面重名的檔名是很少的,所以這樣的方法可以很有效的設定斷點。一開始設定會提示找不到,輸入y讓其記錄就行了。此處舉例設定avcodec.c的211行,OpenDecoder函式,即除錯plugins/libavcodec_plu