簡介
本檔案介紹有關使用的一般准則 debug
命令,包括 debug ip packet
命令在Cisco IOS®平台上可用。
必要條件
需求
思科建議您瞭解以下主題:
-
使用控制檯、輔助埠和vty埠連線到路由器
-
常規Cisco IOS配置問題
-
解釋Cisco IOS調試輸出
採用元件
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
慣例
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
背景資訊
本頁提供在Cisco IOS平台上使用可用調試程式的一些一般指南,以及正確使用 debug ip packet
命令和條件調試。
注意:本文檔不介紹如何使用和解釋特定調試命令和輸出。有關特定debug命令的資訊,請參閱相應的Cisco Debug命令參考文檔。
輸出來自 debug
特權EXEC命令提供診斷資訊,包括與協定狀態和一般網路活動相關的各種網路互連事件。
警告
使用 debug
命令時需小心。通常,在排除特定故障時,建議僅在路由器技術支援代表的指導下使用這些命令。
當網際網路遇到高負載情況時,啟用調試可能會中斷路由器的運行。因此,如果啟用日誌記錄,則一旦控制檯埠因日誌消息而超載,訪問伺服器就會間歇性地凍結。
開始之前 debug
命令,請始終考慮此命令可生成的輸出以及此命令可花費的時間。例如,如果您的路由器具有一個基本速率介面(BRI), debug isdn q931
可能不會對系統造成危害。但是,在採用完整E1配置的AS5800上執行相同的調試可能會生成大量輸入,導致其掛起並停止響應。
在調試之前,請使用 show processes cpu
指令。在開始調試之前,請確認是否有足夠的CPU可用。有關如何處理高CPU負載的詳細資訊,請參閱對Cisco路由器上的高CPU利用率進行故障排除。例如,如果您的Cisco 7200路由器的ATM介面正在進行橋接,則根據配置的子介面數量,重新啟動路由器可能會使用大量CPU。原因是,對於每個虛電路(VC),需要生成橋接協定資料單元(BPDU)資料包。在此關鍵時間啟動調試可能會導致CPU利用率大幅提高,並導致掛起或網路連線丟失。
注意:當調試運行時,通常不會看到路由器提示,尤其是在調試密集的情況下。但是,在大多數情況下,您可以使用no debug all或undebug all命令來停止調試。有關安全使用調試的詳細資訊,請參閱獲取調試輸出部分。
調試之前
除了上面提到的幾點之外,請務必了解調試對平台穩定性產生的影響。您還必須考慮必須在路由器上連線哪個介面。本節有一些指導原則。
獲取調試輸出
路由器可以顯示到各種介面的調試輸出,包括控制檯、aux和vty埠。路由器也可以將消息記錄到外部unix syslog伺服器的內部緩衝區。下面將討論每種方法的說明和警告:
控制檯埠
如果是在控制檯上連線的,在正常配置下,無需額外工作。必須自動顯示調試輸出。但是,確保 logging console level
設定且日誌記錄尚未被禁用 no logging console
指令。
警告:對路由器的控制檯埠進行過多調試會導致其掛起。這是因為路由器自動優先處理控制檯輸出,優先於其他路由器功能。因此,如果路由器正在處理指向控制檯埠的大型調試輸出,它可能會掛起。因此,如果調試輸出過大,請使用vty(telnet)埠或日誌緩衝區來獲取調試。下面提供了更多資訊。
注意:預設情況下,在控制檯埠上啟用日誌記錄。因此,即使您實際使用的是其他埠或方法(例如Aux、vty或緩衝區)來捕獲輸出,控制檯埠始終會處理調試輸出。因此,思科建議在正常操作條件下,始終啟用no logging console命令並使用其他方法捕獲調試。在需要使用控制檯的情況下,臨時重新開啟日誌記錄控制檯。
輔助埠
如果通過輔助埠連線,請鍵入 terminal monitor
指令。此外,請驗證 no logging on
尚未在路由器上啟用命令。
註:如果使用Aux埠監控路由器,請記住,當路由器重新啟動時,Aux埠不會顯示啟動順序輸出。連線到主控台連線埠才能檢視開機順序。
VTY埠
如果通過輔助埠或telnet連線,請鍵入 terminal monitor
指令。此外,請驗證 no logging on
命令尚未使用。
將消息記錄到內部緩衝區
預設日誌記錄裝置是控制檯;除非另有指定,所有消息都顯示在控制檯上。
要將消息記錄到內部緩衝區,請使用 logging buffered
路由器配置命令。以下是此命令的完整語法:
logging buffered
no logging buffered
其 logging buffered
命令將日誌消息複製到內部緩衝區,而不是將它們寫入控制檯。緩衝區實際上是循環的,因此較新的消息會覆蓋較舊的消息。要顯示緩衝區中記錄的消息,請使用特權EXEC命令 show logging
.顯示的第一個消息是緩衝區中最早的消息。您可以指定緩衝區大小以及要記錄的消息的嚴重性級別。
註:輸入緩衝區大小之前,請確保機箱中有足夠的可用記憶體。使用Cisco IOS show proc mem
命令,以便檢視可用的記憶體。
其 no logging buffered
命令取消緩衝區的使用並將消息寫入控制檯(預設)。
將消息記錄到UNIX系統日誌伺服器
要將消息記錄到syslog伺服器主機,請使用logging router配置命令。此命令的完整語法如下:
logging
no logging
其logging
命令用於識別接收日誌記錄消息的系統日誌伺服器主機。<ip-address>引數是主機的IP地址。通過多次發出此命令,可以構建接收日誌記錄消息的系統日誌伺服器清單。
其 no logging
command從syslogs清單中刪除具有指定地址的syslog伺服器。
其他調試前任務
-
設定終端模擬器軟體(例如,超級終端機),以便它能夠將調試輸出捕獲到檔案中。例如,在「超級終端機」中,按一下Transfer
,然後按一下 Capture Text
,然後選擇適當的選項。有關詳細資訊,請參閱從超級終端捕獲文本輸出。有關其他終端模擬器軟體,請參閱軟體文檔。
-
使用啟用毫秒(msec)時間戳 service timestamps
指令:
router(config)#service timestamps debug datetime msec
router(config)#service timestamps log datetime msec
這些命令以MMM DD HH:MM:SS格式將時間戳新增到調試,根據系統時鐘指示日期和時間。如果尚未設定系統時鐘,日期和時間前面加星號(*),表示日期和時間可能不正確。
通常建議配置毫秒時間戳,因為這樣在檢視調試輸出時可提供高級別的清晰度。毫秒時間戳可以更好地指示各種調試事件的相對時間。但是請注意,當控制檯埠輸出大量消息時,它們不能與事件的實際時間相關聯。例如,如果啟用 debug x25
全部位於具有200個VC的框中,並且輸出將記錄到緩衝區(使用 no logging console
和 logging buffered
命令),debug輸出(緩衝區內)中顯示的時間戳不能是資料包通過介面的準確時間。因此,不要使用msec時間戳來證明效能問題,而要獲取有關事件發生時間的相關資訊。
停止調試
要停止調試,請使用no debug all
或undebug all
指令。使用命令驗證調試是否已關閉show debug
.
請記住,這些命令 no logging console
和 terminal no monitor
僅阻止輸出分別輸出到控制檯、Aux或vty上。它不會停止調試,因此會耗盡路由器資源。
使用debug ip packet指令
其 debug ip packet
命令會產生有關路由器無法快速交換的封包的資訊。但是,由於它為每個資料包生成輸出,因此輸出可能很長,從而導致路由器掛起。因此,僅使用 debug ip packet
受本節所述的最嚴格控制。
限制輸出的最佳方法 debug ip packet
是建立連結到調試的訪問清單。只有符合存取清單條件的資料包才能遵守 debug ip packet
.此訪問清單不需要應用於任何介面,而是應用於調試操作。
使用前 debugging ip packet
請注意,預設情況下路由器正在進行快速交換,或者如果配置為進行CEF交換,則可能正在進行CEF交換。這意味著,一旦這些技術到位,資料包就不會提供給處理器,因此調試不會顯示任何內容。若要讓此指令正常運作,您需要在路由器上停用快速交換功能,方式為 no ip route-cache
(對於單播資料包)或 no ip mroute-cache
(對於組播資料包)。這必須應用到流量應該流動的介面上。使用 show ip route
指令。
警告
請考慮以下範例情境:
router_122上設定的存取清單為:
access-list 105 permit icmp host 10.10.10.2 host 10.1.1.1
access-list 105 permit icmp host 10.1.1.1 host 10.10.10.2
此存取清單允許從主機router_121(IP位址為10.10.10.2)到主機router_123(IP位址為10.1.1.1)的任何網際網路控制訊息通訊協定(ICMP)封包,以及在另一個方向允許該封包。請務必允許兩個方向上的封包,否則路由器可以捨棄傳回的ICMP封包。
只在router_122的一個介面上刪除快速交換。這表示您只能看到目的地為該介面的封包的偵錯,從擷取封包的Cisco IOS的角度來看。在調試中,此類資料包顯示為"d="。由於您尚未關閉另一個介面上的快速交換,因此返回資料包不受 debug ip packet
.以下輸出顯示如何停用快速交換:
router_122(config)#interface virtual-template 1
router_122(config-if)#no ip route-cache
router_122(config-if)#end
現在必須啟用 debug ip packet
存取清單(access-list 105)時,才能停用自動交涉。
router_122# debug ip packet detail 105
IP packet debugging is on (detailed) for access list 105
router_122#
00:10:01: IP: s=10.1.1.1 (Serial3/0), d=10.10.10.2 (Virtual-Access1),
g=10.10.10.2, len 100, forward
00:10:01: ICMP type=0, code=0
! -- ICMP packet from 10.1.1.1 to 10.10.10.2.
! -- This packet is displayed because it matches the
! -- source and destination requirements in access list 105
00:10:01: IP: s=10.1.1.1 (Serial3/0), d=10.10.10.2 (Virtual-Access1),
g=10.10.10.2, len 100, forward
00:10:01: ICMP type=0, code=0
00:10:01: IP: s=10.1.1.1 (Serial3/0), d=10.10.10.2 (Virtual-Access1),
g=10.10.10.2, len 100, forward
00:10:01: ICMP type=0, code=0
現在刪除另一個介面(router_122上)上的快速交換。這表示經過這兩個介面的所有封包現在都已進行封包交換(這是 debug ip packet
router_122(config)#interface serial 3/0
router_122(config-if)#no ip route-cache
router_122(config-if)#end
router_122#
00:11:57: IP: s=10.10.10.2 (Virtual-Access1), d=10.1.1.1
(Serial3/0), g=172.16.1.6, len 100, forward
00:11:57: ICMP type=8, code=0
! -- ICMP packet (echo) from 10.10.10.2 to 10.1.1.1
00:11:57: IP: s=10.1.1.1 (Serial3/0), d=10.10.10.2 (Virtual-Access1),
g=10.10.10.2, len 100, forward
00:11:57: ICMP type=0, code=0
! -- ICMP return packet (echo-reply) from 10.1.1.1 to 10.10.10.2
00:11:57: IP: s=10.10.10.2 (Virtual-Access1), d=10.1.1.1 (Serial3/0),
g=172.16.1.6, len 100, forward
00:11:57: ICMP type=8, code=0
00:11:57: IP: s=10.1.1.1 (Serial3/0), d=10.10.10.2 (Virtual-Access1),
g=10.10.10.2, len 100, forward
00:11:57: ICMP type=0, code=0
請注意,debug ip packet輸出不會顯示任何與存取清單標準不符的封包。有關此過程的其他資訊,請參閱瞭解Ping和Traceroute命令。
有關如何構建存取清單的詳細資訊,請參閱標準IP存取清單記錄。
有條件觸發的調試
啟用條件觸發調試功能時,路由器為進入或離開指定介面上的路由器的資料包生成調試消息;路由器不會為通過其他介面進入或離開路由器的資料包生成調試輸出。
請看條件調試的簡單實現。請考慮以下情況:下面顯示的路由器(trabol)有兩個介面(serial 0和serial 3),均運行HDLC封裝。
你可以使用 debug serial interface
命令以觀察所有介面上接收到的HDLC keepalive。您可以觀察兩個介面上的keepalive。
traxbol#debug serial interface
Serial network interface debugging is on
traxbol#
*Mar 8 09:42:34.851: Serial0: HDLC myseq 28, mineseen 28*, yourseen 41, line up
! -- HDLC keeplaive on interface Serial 0
*Mar 8 09:42:34.855: Serial3: HDLC myseq 26, mineseen 26*, yourseen 27, line up
! -- HDLC keeplaive on interface Serial 3
*Mar 8 09:42:44.851: Serial0: HDLC myseq 29, mineseen 29*, yourseen 42, line up
*Mar 8 09:42:44.855: Serial3: HDLC myseq 27, mineseen 27*, yourseen 28, line up
為介面serial 3啟用條件調試。這意味著只顯示介面serial 3的調試。使用 debug interface <interface_type interface_number >
指令。
traxbol#debug interface serial 3
Condition 1 set
使用 show debug condition
命令,確認條件式偵錯處於使用中狀態。請注意,介面serial 3的條件處於活動狀態。
traxbol#show debug condition
Condition 1: interface Se3 (1 flags triggered)
Flags: Se3
traxbol#
請注意,現在只顯示介面serial 3的調試
*Mar 8 09:43:04.855: Serial3: HDLC myseq 29, mineseen 29*, yourseen 30, line up
*Mar 8 09:43:14.855: Serial3: HDLC myseq 30, mineseen 30*, yourseen 31, line up
使用 undebug interface <interface_type interface_number>
命令刪除條件式偵錯。建議您在刪除條件觸發器之前關閉debug(例如,使用undebug all)。這是為了避免移除條件時產生大量偵錯輸出。
traxbol#undebug interface serial 3
This condition is the last interface condition set.
Removing all conditions can cause a flood of debugging
messages to result, unless specific debugging flags
are first removed.
Proceed with removal? [yes/no]: y
Condition 1 has been removed
traxbol
現在,您可以觀察是否同時顯示介面serial 0和介面serial 3的調試。
*Mar 8 09:43:34.927: Serial3: HDLC myseq 32, mineseen 32*, yourseen 33, line up
*Mar 8 09:43:44.923: Serial0: HDLC myseq 35, mineseen 35*, yourseen 48, line up
警告:某些調試操作本身是有條件的。例如atm調試。使用ATM偵錯時,必須明確指定必須為其啟用偵錯的介面,而不是在所有atm介面上啟用偵錯並指定條件。
本節介紹將ATM封包偵錯限制在一個子介面的正確方法:
arielle-nrp2#debug atm packet interface atm 0/0/0.1
!--- Note that you explicitly specify the sub-interface to be used for debugging
ATM packets debugging is on
Displaying packets on interface ATM0/0/0.1 only
arielle-nrp2#
*Dec 21 10:16:51.891: ATM0/0/0.1(O):
VCD:0x1 VPI:0x1 VCI:0x21 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2 TYPE:0007
Length:0x278
*Dec 21 10:16:51.891: 0000 FFFF FFFF FFFF 0010 7BB9 BDC4 0800 4500 025C 01FE
0000 FF11 61C8 0A30
*Dec 21 10:16:51.891: 4B9B FFFF FFFF 0044 0043 0248 0000 0101 0600 0015 23B7
0000 8000 0000 0000
*Dec 21 10:16:51.891: 0000 0000 0000 0000 0000 0000 0010 7BB9 BDC3 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.891: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.891: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.891: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.891: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.895: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000
*Dec 21 10:16:51.895:
arielle-nrp2#
如果您嘗試啟用 atm debugging
在所有介面上(具有應用條件),如果路由器具有大量ATM子介面,則它可能掛起。圖中所示為atm偵錯方法錯誤的例子。
這樣您會看到應用了某個條件,但是也看到這樣做沒有效果。您仍然可以看到來自另一個介面的資料包。在本實驗場景中,您只有兩個介面,流量非常小。如果介面數很高,則所有介面的調試輸出都非常高,這可能會導致路由器掛起。
arielle-nrp2#show debugging condition
Condition 1: interface AT0/0/0.1 (1 flags triggered)
Flags: AT0/0/0.1
! -- A condition for a specific interface.
arielle-nrp2#debug atm packet
ATM packets debugging is on
Displaying all ATM packets
arielle-nrp2#
*Dec 21 10:22:06.727: ATM0/0/0.2(O):
! -- You see debugs from interface ATM0/0/0/.2, even though the condition
! -- specified ONLY AT0/0/0.1
VCD:0x2 VPI:0x5 VCI:0x37 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2
TYPE:000E Length:0x2F
*Dec 21 10:22:06.727: 0000 0000 0180 0000 107B B9BD C400 0000 0080
0000 107B B9BD C480 0800 0014
*Dec 21 10:22:06.727: 0002 000F 0000
*Dec 21 10:22:06.727: un a
*Dec 21 10:22:08.727: ATM0/0/0.2(O):
VCD:0x2 VPI:0x5 VCI:0x37 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2
TYPE:000E Length:0x2F
*Dec 21 10:22:08.727: 0000 0000 0180 0000 107B B9BD C400 0000 0080
0000 107B B9BD C480 0800 0014
*Dec 21 10:22:08.727: 0002 000F 0000
*Dec 21 10:22:08.727: ll
*Dec 21 10:22:10.727: ATM0/0/0.2(O):
VCD:0x2 VPI:0x5 VCI:0x37 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2
TYPE:000E Length:0x2F
*Dec 21 10:22:10.727: 0000 0000 0080 0000 107B B9BD C400 0000 0080
0000 107B B9BD C480 0800 0014
*Dec 21 10:22:10.727: 0002 000F 0000
*Dec 21 10:22:10.727:
*Dec 21 10:22:12.727: ATM0/0/0.2(O):
VCD:0x2 VPI:0x5 VCI:0x37 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2
TYPE:000E Length:0x2F
*Dec 21 10:22:12.727: 0000 0000 0080 0000 107B B9BD C400 0000 0080
0000 107B B9BD C480 0800 0014
*Dec 21 10:22:12.727: 0002 000F 0000
*Dec 21 10:22:12.727:
*Dec 21 10:22:13.931: ATM0/0/0.1(O):
!--- You also see debugs for interface ATM0/0/0.1 as you wanted.
VCD:0x1 VPI:0x1 VCI:0x21 DM:0x100 SAP:AAAA CTL:03 OUI:0080C2
TYPE:0007 Length:0x278
*Dec 21 10:22:13.931: 0000 FFFF FFFF FFFF 0010 7BB9 BDC4 0800 4500
025C 027F 0000 FF11 6147 0A30
*Dec 21 10:22:13.931: 4B9B FFFF FFFF 0044 0043 0248 0000 0101 0600
001A 4481 0000 8000 0000 0000
*Dec 21 10:22:13.931: 0000 0000 0000 0000 0000 0000 0010 7BB9 BDC3
0000 0000 0000 0000 0000 0000
*Dec 21 10:22:13.931: 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000
*Dec 21 10:22:13.931: 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000
*Dec 21 10:22:13.931: 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000
*Dec 21 10:22:13.931: 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000
*Dec 21 10:22:13.935: 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000
相關資訊