Unix調試工具dbx使用方法

 dbx 命令

用途
提供了一個調試和運行程序的環境。

語法
dbx [ -a ProcessID ] [ -c CommandFile ] [ -d NestingDepth ] [ -I Directory ] [ -E DebugEnvironment ] [ -p oldpath=newpath:...| pathfile ] [ -k ] [ -u ] [ -F ] [ -r ] [ -x ] [ ObjectFile [ CoreFile ] ]

 描述
dbx 命令爲 C、C++、Pascal 和 FORTRAN 語言程序提供了一個符號性的調試程序,容許您按照下面的內容執行操做:

檢驗對象和核心文件。 
爲程序運行提供一個控制環境。 
在選中的語句處設置斷點或單步執行程序。 
使用符號變量進行調試並將它們以正確的格式顯示出來。
ObjectFile 參數是一個由編譯器產生的目標(可執行)文件。在編譯您的程序時,使用 -g(生成符號表)標誌產生 dbx 命令須要的信息。


注:cc 命令的 -g 標誌應該在對象文件進行編譯時使用。若是沒有使用 -g 標誌或者若是符號引用被 strip 命令從 xcoff 文件中刪除了,則 dbx 命令的符號性能將受到限制。
若是沒有指定 -c 標誌,dbx 命令將會在用戶的 $HOME 目錄中檢查 .dbxinit 文件。而後它在用戶當前目錄中檢查  .dbxinit 文件。若是在當前目錄中存在一個 .dbxinit文件,該文件將覆蓋用戶的 $HOME 目錄中的 .dbxinit 文件。若是在發現了 .dbxinit 文件存在於用戶的 $HOME 目錄中或者當前目錄中,該文件的子命令將在調試部分開始時運行。使用編輯器建立一個  .dbxinit 文件。

若是沒有指定 ObjectFile,那麼 dbx 將詢問要進行檢查的目標文件的名稱。缺省值是 a.out。若是當前目錄中存在 core  文件或者指定了 CoreFile 參數,那麼 dbx 將報告程序發生錯誤的位置。保留在覈心映像中的變量、寄存器和內存能夠被檢查直到開始執行  ObjectFile。那時 dbx 調試程序提示輸入命令。

表達式句柄
dbx 程序能夠顯示各類各樣的表達式。您能夠在 dbx 調試程序中使用 C 和 Pascal 語法的公共子集和一些 FORTRAN 擴展的子集來指定表達式。

如下運算符在調試程序中是有效的:

*(星號)或者 ^ (脫字符號) 表示正在取消引用間接尋址或者指針。 
[ ](方括號)或者( )(圓括號) 表示數組表達式的下標。 
. (句點) 經過指針和結構來使用該字段引用運算符。這將使得 C 運算符 ->;(箭頭)變得沒有必要,儘管它仍容許使用。 
&(與符號) 得到變量的地址。 
.. (兩個句點) 在指定數組子部分時將上下界分開。例如:n[1..4]。 

如下類型的運算在調試程序的表達式中是有效的:

代數運算 =、-、*、/(浮點運算的除法)、div(整數運算的除法)、mod 和 exp(乘冪運算)。 
按位運算 -, I, bitand, xor, ~, << 和 >;>; 
邏輯運算 or、and、not、II 和 && 
比較運算 <、>;、<=、>;=、< >; 或 !=、= 或 == 
其它 (類型名),sizeof 

邏輯和比較表達式在 stop 和 trace 中做爲條件使用的。

檢驗表達式類型。您能夠經過重命名或者重載運算符的方式重設一個表達式類型。三種重命名的格式分別是:類型名(表達式),表達式 |類型名以及 (類型名)表達式。如下是一個示例,其中 x 變量是一個值爲 97 的整數:


(dbx) print x
97
(dbx) print char (x), x / char, (char) x, x
'a' 'a' 'a' 97命令行編輯
dbx 命令提供一種命令行編輯功能相似於由 Korn Shell 提供的功能。vi 模式提供 相似 vi 的編輯功能,而 emacs 模式賦予您相似於 emacs 的控制功能。

這些功能能夠經過使用 dbx 子命令 set -o 或者 set edit 來開啓。要打開 vi 風格的命令行編輯,您能夠輸入子命令 set edit vi 或者 set -o vi。

您也可使用 EDITOR 環境變量來設置編輯模式。

dbx 命令將保存輸入到歷史文件 .dbxhistory 當中的命令。若是沒有設置 DBXHISTFILE 環境變量,使用的歷史文件是 $HOME/.dbxhistory。

按照缺省值,dbx 將保存最近輸入的 128 個命令。DBXHISTSIZE 環境變量能夠歷來增長這一限制。

標誌

-a ProcessID 將調試程序和正在運行的進程鏈接起來。爲了鏈接調試程序,您須要擁有對該進程使用 kill 命令的權限。使用 ps 命令來決定進程的 ID。若是您得到許可,dbx 程序中斷該進程,決定目標文件的完整名稱,讀入符號信息和提示輸入命令。 
-c CommandFile 讀入標準輸入以前,在文件中運行 dbx 子命令。$HOME 目錄中指定的文件將首先被處理;而後處理當前目錄中的文件。當前目錄中的命令文件將會覆蓋 $HOME 目錄中的命令文件。若是指定的文件既不存在於 $HOME 目錄也不存在於當前目錄,將會顯示警告消息。source 子命令能夠在 dbx 程序運行後使用。 
-d NestingDepth 設置程序塊的嵌套限制。缺省的嵌套深度限制爲 25。 
-E DebugEnvironment 指定調試程序的環境變量。 
-p oldpath=newpath:...| pathfile 以 oldpath=newpath 的格式在檢查覈心文件時指定替換的庫的路徑。oldpath 指定了將被替換的值(存儲在覈心文件中)而 newpath 指定了將要替換的新的值。這些多是所有或者部分的,絕對路徑或者相對路徑。能夠指定若干個替換,它們之間用冒號隔開。相反 -p 標誌能夠指定文件名,映射之前讀入的描述格式。每行中只容許有一個映射從文件中讀出。 
-F 能夠用來關閉緩慢讀入模式並使 dbx 命令在啓動時就讀入所有符號。缺省狀況下,緩慢讀入模式是打開的:它在 dbx 會話初始化時讀入須要的符號表信息。。在該模式下,dbx 將不會讀入那些符號信息還沒有被讀入的變量和類型。所以,諸如 whereis i 等命令並不列出在全部函數中的變量 i 的所有實例。 
-I Directory (大寫 i)將 Directory 變量指定的目錄包含到搜索源文件目錄列表中。搜索源文件的缺省目錄爲: 
文件編譯時該源文件所在的目錄。只有編譯器設置了對象中的源路徑時才能搜索目錄。 
當前目錄。 
當前程序所在的目錄。
 
-k 映射內存地址;這對於內核調試是很是有用的。 
-r 當即運行對象文件。若是它成功結束,dbx 調試程序將會退出。不然,將會進入調試程序並報告中斷的緣由。 

注意:除非指定了 -r,dbx 命令將會提示用戶並等待命令輸入。 
-u 讓 dbx 命令爲文件名加上 @ (at 符號) 前綴。該標誌減小符號名混淆的可能性。 
-x 防止 dbx 命令跳過來自於 FORTRAN 源代碼的 _(下劃線)字符。該符號容許 dbx 在符號之間區別哪些除了下劃線之外都是相同的,例如 xxx 和xxx_。 

示例
下列示例解釋如何在啓動 dbx 調試程序時同時啓動一個進程。本例使用了一個名爲 samp.c 的程序。該 C 程序首先通過 -g 標誌的編譯生成一個包含符號列表引用的目標文件。在此狀況下,該程序命名爲:samp: 

$ cc -g samp.c -o sampsamp 程序運行後,操做系統會報告一個總線錯誤並將核心映像寫入到您當前的工做目錄當中,以下所示:

$ samp
Bus Error - core dumped要肯定發生錯誤的位置,請輸入:

$ dbx samp系統將會返回以下信息:

dbx version 3.1
Type 'help' for help.
reading symbolic information . . . [
using memory image in core]
  25   x  = 0;
(dbx) quit該示例解釋瞭如何將 dbx 鏈接到進程當中去。該示例使用了以下程序 looper.c: 

main()
{
      int i,x[10];
       
      for (i = 0; i < 10;);
}該程序將不會停止由於 i 不會增長。使用 -g 標誌編譯 looper.c 獲得符號調試能力:

$ cc -g looper.c -o looper在命令行中運行 looper 並執行如下步驟就會在它運行的時候將 dbx 鏈接到程序中去:

要將 dbx 鏈接到 looper,您必須肯定進程的 ID。若是您沒有運行 looper 做爲後臺程序,您必須啓動另一個 Xwindow 窗口。在該 Xwindow 窗口中,輸入: 

ps -u UserID其中 UserID 是您的登陸標識。全部屬於您的活動的進程將會顯示以下:

PID     TTY      TIME    COMMAND
68      console   0:04    sh
467     lft3     10:48    looper在該示例中和 looper 相關的進程 ID 是 467。

要將 dbx 鏈接到 looper中,請輸入: 

$ dbx -a 467系統將返回以下的信息:


Waiting to attach to process 467 . . .
Successfully attached to /tmp/looper.
dbx is initializing
Type 'help' for help.
reading symbolic information . . .
 
attached in main at line 5
5     for (i = 0; i < 10;);
(dbx) 如今您能夠查詢並調試進程如同該程序最初就是由 dbx 來啓動的。

要將目錄添加到搜索可執行文件 objefile 的源文件的目錄清單中,能夠輸入: 

$dbx -I /home/user/src -I /home/group/src 
objfileuse 子命令能夠在 dbx 啓動以後用來實現此功能。use 命令從新設置目錄清單而 -I 標誌則向清單中添加目錄。

要使用 -r 標誌,輸入: 

$ dbx -r samp 系統將會返回以下信息:

Entering debug program . . .
dbx version 3.1
Type 'help' for help.
reading symbolic information . . .
bus error in main at line 25
  25   x = 0; (dbx) quit-r 標誌容許您在儘管沒有設置核心映像的狀況下在內存中檢查您的進程的狀態。 要指定調試程序的環境變量,輸入:  dbx -E LIBPATH=/home/user/lib -E LANG=Ja_JP objfiledbx 子命令 注意:這些子命令只能在運行 dbx 調試程序時使用。 / 在當前源文件中向前搜索某種模式。  ? 在當前源文件中向後搜索某種模式。  alias(別名) 建立 dbx 子命令的別名。  assign(賦值) 爲一個變量賦值。  attribute(屬性) 顯示全部或者選中屬性對象的信息。  call(調用) 運行與指定的過程或函數相關的對象代碼。  case(格式) 修改 dbx 調試程序解釋符號的方式。  catch(捕捉) 在一個信號送到應用程序以前啓動捕獲這個信號。  clear(清除) 刪除全部源指定行的中止線。  cleari 除去地址中全部的斷點。  condition(條件) 顯示所有或者選中的條件變量的信息。  cont 從當前中止點繼續應用程序的執行直到程序終止或者遇到下一個斷點。  delete(刪除) 刪除與指定事件數對應的跟蹤和中止線。  detach(拆分) 繼續應用程序的執行並退出調試程序。  display memory(顯示內存) 顯示內存中的內容。  down(降下) 將當前函數在堆棧中向下移動。  dump(轉存) 顯示指定過程當中的變量的名稱和值。  edit(編輯) 啓動編輯器編輯指定文件。  file(文件) 將當前源文件修改爲指定的文件。  func(函數) 將當前函數修改爲指定的過程或者函數。  goto(跳轉到) 使指定行成爲下一個運行的行。  gotoi 修改程序計數器地址。  help(幫助) 顯示 dbx 子命令或主題的幫助信息。  ignore(忽略) 在一個信號送到應用程序以前中止捕獲這個信號。  list(列表) 顯示當前源文件的行。  listi 列出應用程序的指令清單。  map(映射) 顯示關於應用程序裝入特徵的信息。  move(移動) 跳到下一行並顯示。  multproc(多線程) 啓用或禁用多線程調試。  mutex(互斥) 顯示所有或者選中的互斥信息。  next(下一個) 運行應用程序直到下一個源程序行。  nexti 運行應用程序直到下一個機器指令。  print(打印) 打印表達式的值或運行一個過程並打印過程的返回代碼。  prompt(提示符) 修改 dbx 命令提示符。  quit(退出) 中止 dbx 調試程序。  registers(寄存器) 顯示全部通用寄存器、系統控制寄存器、浮點寄存器和當前指令寄存器的值。  rerun(從新運行) 按照之前設置的參數開始運行應用程序。  return(返回) 繼續應用程序的運行直到達到返回一個指定的過程。  rwlock 顯示 rwlocks 的信息。  run(運行) 開始運行一個應用程序。  screen(屏幕) 打開一個 Xwindow 做爲 dbx 命令的交互。  set(設置) 爲 dbx 調試程序變量定義一個值。  sh 傳遞命令到 shell 去運行。  skip(跳過) 從當前的中止處繼續運行應用程序。  source(源) 從文件中讀入 dbx 子命令。  status(狀態) 顯示活動的跟蹤和中止子命令。  step(單步) 運行一個源命令行。  stepi 運行一個機器指令。  stophwp 設置一個硬件的觀察點中止。  stop(中止) 中止運行應用程序。  stopi 在指定位置設置中止點。  thread(線程) 顯示和控制線程。  trace(跟蹤) 打印跟蹤信息。  tracehwp 設置硬件觀察點跟蹤。  tracei 打開跟蹤。  unalias(取消別名) 刪除別名。  unset(取消設置) 刪除一個變量。  up(上升) 將當前函數在堆棧中向上移動。  use(使用) 設置在搜索源文件時要搜索的目錄列表。  whatis 顯示應用程序組件的聲明。  where 顯示活動過程和函數的清單。  whereis 顯示全部名字匹配指定標識符的符號的全限定。  which 顯示給定標識符的全限定。  / 子命令 / [ RegularExpression [ / ] ] / 子命令在當前源文件中向前搜索由 RegularExpression 參數指定的模式。不帶參數輸入 / 子命令將會使 dbx 命令向前搜索之前的正則表達式。搜索將會在文件的結尾折返。 示例 要向前搜索當前源文件中 12 這個數字,請輸入:  / 12要重複之前的搜索,請輸入:  /請參閱 ?(搜索)子命令和 regcmp 子例程。 ? 子命令 ? [ RegularExpression [ ? ] ] ? 子命令在當前源文件中向後搜索由 RegularExpression 參數指定的模式。不帶參數輸入 ? 子命令將會使 dbx 命令向後搜索之前的正則表達式。搜索將會在文件的結尾折返。 示例 要向後搜索當前源文件中的 z 字符,請輸入:  ?z要重複之前的搜索,請輸入:  ?參見 / (搜索)子命令和 regcmp 子例程。 alias 子命令 alias [ Name [ [ (Arglist) ] String | Subcommand ] ] alias 子命令爲 dbx 子命令建立別名。Name 參數是要建立的別名。String 參數是 dbx 子命令的序列,在執行完該子命令後能夠經過 Name 引用這些序列。若是 alias 子命令沒有指定參數,它將顯示全部當前的別名。 示例 要用 rr 替換 rerun,請輸入:  alias rr rerun要在命令行輸入 printandstep 時運行 print n 和 step 兩個子命令,輸入:  alias printandstep "print n; step"alias 子命令也能夠用做一個有限的宏工具。例如:  (dbx) alias px(n) "set $hexints; print n; unset $hexints" (dbx) alias a(x,y) "print symname[x]->;symvalue._n_n.name.Id[y]" (dbx) px(126) 0x7e在本示例中,別名 px 打印了一個十六進制的值而不會永久影響到調試環境。 assign 子命令 assign Variable =Expression assign 子命令分配由 Expression 參數指定的值到 Variable 參數指定的變量當中去。 示例 要將數值 5 分配到 x 變量中,請輸入:  assign x = 5要將變量 y 的值分配到變量 x 中,請輸入:  assign x =  y要將字符值 'z' 分配到變量 z 中,請輸入:  assign  z  =  'z'要將布爾值 false 分配到邏輯類型變量 B 中,請輸入:  assign  B  =  false要將字符串 "Hello World" 分配到字符指針 Y 中,請輸入:  assign  Y  =  "Hello  World"要禁用類型檢查,將 dbx 調試程序變量 $unsafeassign 進行設置,輸入:  set $unsafeassign參見 Displaying and Modifying Variables。 attribute 子命令 attribute [ AttributeNumber ... ] attribute 子命令顯示關於 AttributeNumber 參數定義的用戶線程、互斥或者條件屬性對象的相關信息。若是沒有指定參數,將會列出全部的屬性對象。 對於列出的每一個屬性對象,將會顯示以下信息: attr 按照 $aAttributeNumber 格式指出屬性對象的符號名。  obj_addr 指出屬性對象的地址。  type 指出屬性對象的類型;對於用戶線程、互斥以及條件變量的類型分別是 thr、mutex 或者 cond。  state 指出屬性對象的狀態。該狀態多是 valid 或者 inval。  stack 指出一個線程屬性對象的堆棧大小屬性。  scope 指出線程屬性對象的做用域屬性。這將決定線程的爭用域並定義必須爭用進程資源的線程的集合。對於系統或者進程爭用域,做用域的值能夠是 sys 或者 pro。  prio 指出線程屬性對象的優先級屬性。  sched 指出一個線程屬性對象的調度策略屬性。該屬性控制了調度策略,可選的值爲 fifo、rr(循環法)或者 other。  p-shar 指定互斥或者條件屬性對象的進程共享屬性。若是能夠由不一樣進程的線程訪問,該互斥或者條件是進程共享的。該屬性值能夠是 yes 或者 no。  protocol 指出互斥的協議屬性。該屬性決定了保持線程優先級互斥的做用。可選的值有 no_prio、prio 或者 protect。  注意:  dbx 調試程序的 print 子命令能夠識別符號屬性名稱並能夠用來顯示相應對象的狀態。  可用的屬性取決於 POSIX 選項的實現。 示例 要列出全部的屬性的信息,請輸入:  attribute輸出相似於: attr   obj_addr   type  state  stack   scope    prio  sched p-shar $a1   0x200035c8  mutex valid                                no  $a2   0x20003628  cond  valid                                no $a3   0x200037c8  thr   valid  57344    sys      126 other $a4   0x200050f8  thr   valid  57344    pro      126 other   要列出屬性 1 和 3 的信息,請輸入:  attribute 1 3  輸出相似於: attr   obj_addr   type  state  stack   scope    prio  sched p-shar $a1   0x200035c8  mutex valid                                no  $a3   0x200037c8  thr   valid  57344    sys      126 other   參見 dbx 命令中 condition 子命令、mutex 子命令、 print 子命令和 thread 子命令。 另見 AIX 5L Version 5.2 General Programming Concepts:  Writing and Debugging Programs 中的 Creating Threads、Using Mutexes 和  Using Condition Variables。 call 子命令 call Procedure ( [ Parameters ] ) call 子命令運行由 Procedure 參數指定的過程。返回代碼不會打印出來。若是指定了參數,它們將傳給正在運行的過程。 例子 運行 dbx 時要調用一個命令,請輸入: (dbx) call printf("hello") helloprintf 成功返回。 case 子命令 case [ default | mixed | lower | upper ] case 子命令修改 dbx 調試程序解釋符號的方式。缺省的符號處理視當前使用的語言而定。若是當前的語言是 C、C++ 或者沒有定義,這些符號將不會合並;若是當前的語言是 FORTRAN 或者 Pascal,這些符號就會合併成小寫格式。若是符號須要使用與當前語言不一致的方法解釋,則使用該子命令。 不帶參數輸入 case 子命令將會顯示當前的 case 模式。 標誌 default 隨當前語言變化。  mixed 按實際顯示的狀況解釋符號。  lower 按小寫來解釋符號。  upper 按大寫來解釋符號。  示例 要顯示當前的大小寫模式,請輸入:  case要指示 dbx 命令按照符號實際形式解釋符號,請輸入:  case mixed要指示 dbx 按照大寫形式解釋符號,請輸入:  case upper參見 Folding Variables to Lowercase and Uppercase。 catch 子命令 catch [ SignalNumber | SignalName ] catch 子命令在信號送到應用程序以前啓動捕獲這個信號。該子命令在被調試的應用程序處理諸如中斷之類的信號時很是有用。待捕獲的信號能夠分別用 SignalNumber 參數按號碼或者用 SignalName 參數按名稱來指定。信號名是不區分大小寫的,而前綴 SIG 是可選的。若是既沒有指定 SignalNumber 也沒有指定 SignalName 參數,則將缺省捕獲除了 SIGHUP、SIGCLD、SIGALARM 和  SIGKILL 以外的全部信號。若是沒有指定參數,將顯示當前可以捕獲的信號的列表。 示例 要顯示當前可以被 dbx 捕獲的信號的列表,請輸入:  catch要捕獲 SIGALARM 信號,請輸入:  catch SIGALARM參見ignore 子命令和信號處理。 clear 子命令 clear SourceLine clear 子命令刪除全部給定源文件行的中止。SourceLine 參數能夠按照兩種格式指定: 看成一個整數  看成一個文件名字符串,後面跟一個:(冒號)和一個整數 示例 要刪除第 19 行中設置的斷點,請輸入: clear 19參見 cleari 子命令和 delete 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Setting and Deleting Breakpoints。 cleari 子命令 cleari Address cleari 子命令清除由 Address 參數指定的地址的全部斷點。 示例 要刪除設置在地址 0x100001b4處的斷點,請輸入:  cleari 0x100001b4要刪除設置在 main() 過程地址處的斷點,輸入:  cleari &main請參閱 clear 子命令、delete 子命令和  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Setting and Deleting Breakpoints。 condition 子命令 condition [ wait | nowait | ConditionNumber ... ] condition 子命令顯示一個或多個條件變量的相關信息。若是指定了一個或多個 ConditionNumber 參數,condition 子命令將會顯示指定條件變量的信息。若是沒有指定標誌或者參數,condition 子命令列出全部條件變量的清單。 各個條件的信息列表以下: cv 按照 $cConditionNumber 的格式指出條件變量的符號名稱。  obj_addr 設定條件變量的內存地址。  num_wait 設定條件變量中等待的線程的數量。  waiters 列出等待條件變量的用戶線程。  注意: dbx 調試程序的print 子命令識別符號條件變量名稱並用來顯示相應對象的狀態。 標誌 wait 顯示有等待線程的條件變量。  nowait 顯示沒有等待線程的條件變量。  示例 要顯示關於全部條件變量的信息,請輸入:  condition要顯示有等待線程的條件變量的信息,請輸入:  condition wait 要顯示關於條件變量 3 的信息,請輸入:  condition 3相似的輸出爲: cv      obj_addr     num_wait  waiters $c3     0x20003290         0參見 attribute 子命令、mutex 子命令、print 子命令以及thread 子命令。 另見 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Using Condition Variables。 cont 子命令 cont [ SignalNumber | SignalName ] cont 子命令從當前的斷點開始繼續執行應用程序直到該程序結束或者遇到另一個斷點。若是經過 SignalNumber 參數(指定信號數)或者 SignalName 參數(指定信號名),該程序將假定已經收到該信號並繼續執行。信號名不區分大小寫而且其前綴 SIG 是可選的。若是沒有指定信號,該程序將如同沒有中止下來過同樣繼續執行。 示例 要從當前斷點位置繼續執行程序,請輸入:  cont要如同收到 SIGQUIT 信號同樣繼續執行程序,請輸入:  cont SIGQUIT請參閱 dbx 命令的 detach 子命令、dbx 的 goto子命令、dbx 的 next 子命令、dbx 的 skip 子命令、dbx 的 step 子命令。 delete 子命令 delete { Number ... | all } delete 子命令從應用程序中刪除跟蹤和中止。能夠經過 Number 參數來刪除指定跟蹤和中止,或者經過 all 標誌來刪除全部跟蹤和中止。使用 status 子命令來顯示 dbx 調試程序爲跟蹤和中止生成的相應跟蹤號和中止號。 標誌 all 刪除全部的跟蹤和中止。  示例 要從應用程序中刪除全部的跟蹤和中止,請輸入:  delete all要刪除事件號爲 4 的跟蹤和中止,請輸入:  delete 4請參閱 clear 子命令、cleari 子命令、status 子命令和  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Setting and Deleting Breakpoints。 detach 子命令 detach [ SignalNumber | SignalName ] detach 子命令將繼續應用程序的執行並退出調試程序。信號能夠經過如下任意一項指定: 名稱,使用SignalName 參數  序號,使用SignalNumber 參數  信號名不區分大小寫並且前綴 SIG 是可選的。 若是指定了信號,程序將如同接收到該信號同樣繼續執行。若是沒有指定信號,該程序將如同沒有中止下來過同樣繼續執行。 示例 要退出 dbx而繼續執行應用程序,請輸入:  detach要退出 dbx 並如同收到 SIGREQUEST 信號那樣繼續執行程序,請輸入:  detach SIGREQUEST參見 Using dbx Debug Program。 display memory 子命令 { Address,Address/ | Address/ [ Count ] } [ Mode ] [ >;File ] 不帶任何關鍵字進行初始化的 display memory 子命令將顯示由以下因素控制的內存的部份內容: 顯示內存的範圍是由下面兩種方法之一指定的: 兩個 Address 參數,則這兩個地址之間的內容都將顯示出來,  或者 一個 Address 參數指定顯示起始地址以及一個 Count 參數指定從 Address 開始顯示的行數。 在名稱以前加上一個 &(與符號)指定符號地址。地址能夠是其它地址和 +(加號)、 -(減號)以及 *(間接乘法)運算組成的表達式。任何包含在括號中間的表達式都將認爲是一個地址。 顯示內存的格式是由 Mode 參數控制的。Mode 參數的缺省值爲當前模式。 Mode 參數的初始值爲 X。可能存在的模式包括: b 打印八進制的字節。  c 按字符打印一個字節。  d 按十進制打印一個短字。  D 按十進制打印一個長字。  f 打印單精度的實數。  g 打印一個雙精度的實數。  h 按照十六進制打印一個字節。  i 打印機器指令。  lld 打印帶符號的 8 字節十進制數。  llu 打印無符號的 8 字節十進制數。  llx 打印無符號的 8 字節十六進制數。  llo 打印無符號的 8 字節八進制數。  o 按八進制打印一個短字。  O 按八進制打印一個長字。  q 打印一個擴展精度的浮點數。  s 打印一個空字節結尾的字符串。  x 按十六進制打印一個短字。  X 按十六進制打印一個長字。  標誌 >;File 重定向輸出到指定的文件。  示例 要按十六進制顯示一個內存起始地址爲 0x3fffe460 的一個長字的內容,請輸入:  0x3fffe460 / X要按照字符顯示起始地址由變量 y 決定的兩個字節內存內容,請輸入:  &y / 2c要顯示 FORTRAN 字符串 a_string 中的第六個到第八個元素,請輸入:  &a_string + 5, &a_string + 7/c請參閱  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Examining Memory Addresses。 down 子命令 down [ Count ] down 子命令將當前函數在堆棧中向下移動 Count 級。當前函數用來解析名稱。Count 參數的缺省值爲 1。 示例 要在堆棧中向下移動一級,請輸入:  down要在堆棧中向下移動三級,請輸入:  down 3請參閱 up 子命令、where 子命令和  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Displaying a Stack Trace。 dump 子命令 dump [ Procedure ] [ >;File ] dump 子命令顯示指定過程當中的全部變量的名稱和數值。若是 Procedure 參數爲 . (週期),則全部活動的變量將會被顯示。若是沒有指定 Procedure 參數,則使用當前的過程。若是使用>;File 標誌,輸出將會重定向到指定的文件。 標誌 >;File 重定向輸出到指定的文件。  示例 要顯示當前過程當中的變量的名稱和值,請輸入:  dump要顯示過程 add_count 中的變量的名稱和值,請輸入:  dump add_count要將當前過程當中的變量的名稱和值重定向輸出到 var.list 文件中,請輸入:  dump >; var.list請參閱  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Displaying and Modifying Variables。 edit 子命令 edit [ Procedure | File ] edit 子命令爲指定文件啓動編輯器。文件能夠經過 File 參數或者指定 Procedure 參數來指定,其中編輯器將啓動並打開包含該過程的文件中。若是沒有指定文件,則編輯器將會根據當前的源文件來調用。缺省值爲 vi 編輯器。經過把 EDITOR 環境變量從新設置成您想要的編輯器名稱來覆蓋缺省值。 示例 要編輯當前源文件,請輸入:  edit要編輯 main.c 文件,請輸入:  edit main.c要編輯包含在 do_count() 過程當中的文件,請輸入:  edit do_count參見 list 子命令、vi 或者vedit 命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Changing the Current File or Procedure 和 Displaying the Current File。 file 子命令 file [ File ] file 子命令將當前的源文件換成 File 參數指定的文件;它不會寫源文件。File 參數能夠指定完整的文件的路徑。若是 File 參數沒有指定路徑,dbx 程序經過搜索使用路徑試圖找到該文件。若是沒有指定 File 參數file 子命令將會顯示當前的源文件名。若是路徑已知, file 子命令還顯示文件的完整或者相對路徑名。 示例 要將當前源文件換成 main.c 文件中,請輸入:  file main.c要顯示當前源文件名,請輸入:  file參見 func 子命令。另見 AIX 5L Version 5.2 General Programming Concepts:  Writing and Debugging Programs 中的  Changing the Current File or Procedure 和 Displaying the Current File。 func 子命令 func [ Procedure ] func 子命令將當前函數換到由參數 Procedure 指定的程序或函數。若是沒有指定 Procedure 參數缺省值爲顯示當前的函數。改變當前函數將當前源文件換成包含新函數的文件;當前名稱解析的做用域也發生了改變。 示例 要將當前的函數換到 do_count 過程,請輸入:  func do_count要顯示當前函數的名稱,請輸入:  func參見 file 子命令。另見 AIX 5L Version 5.2 General Programming Concepts:  Writing and Debugging Programs 中的  Changing the Current File or Procedure。 goto 子命令 goto SourceLine goto 子命令使源行成爲下一個要運行的行。一般指定的源行必須與當前行在同一函數中。要重設該約束,使用 set 子命令並帶有 $unsafegoto 標誌。 例子 要使下一個執行的行爲第六行,請輸入: goto 6參見 cont 子命令、gotoi 子命令、 以及set 子命令。 gotoi 子命令 gotoi Address gotoi 子命令修改程序計數器地址爲 Address 參數指定的地址。 例子 要修改程序計數器地址爲 0x100002b4,請輸入: gotoi 0x100002b4參見 goto 子命令。 help 子命令 help [ Subcommand | Topic ] 根據您指定的參數 help 子命令顯示 dbx 子命令或主題的幫助信息。輸入 help 子命令並帶有 Subcommand 參數顯示語法語句和指定子命令的描述。輸入 help 子命令並帶有 Topic 參數顯示指定主題的詳細描述。如下是可用的主題: startup 列出 dbx 啓動選項列表。  execution 列出和程序執行相關的 dbx 子命令。  breakpoints 列出和斷點和跟蹤相關的 dbx 子命令。  files 列出用於訪問源文件的 dbx 子命令。  data 列出用於訪問程序變量和數據的 dbx 子命令。  machine 列出用於機器級別的調試的 dbx 子命令描述。  environment 列出用於 dbx 的配置和環境設置的 dbx 子命令。  threads 列出 dbx 子命令得到線程相關的對象。  expressions 描述 dbx 表達式語法和運算符。  scope 描述 dbx 如何解析不用做用域的名稱。  set_variables 列出 dbx 帶有用法說明的調試變量。  usage 列出帶有簡單描述的 dbx 公共子命令。  示例 要列出全部可用的dbx 子命令和主題,請輸入:  幫助要顯示dbx 子命令 list的描述,請輸入:  help list要顯示 dbx 命令的主題 set_variables 的描述,請輸入:  help set_variablesignore 子命令 ignore [ SignalNumber | SignalName ] ignore 子命令在信號送到應用程序以前中止指定信號的捕捉。該子命令在調試應用程序處理例如中斷之類的信號時很是有用。 要捕捉的信號能夠經過如下任意一項指定: SignalNumber 參數指定信號數  SignalName 參數指定信號名稱 信號名是不區分大小寫的。前綴 SIG 是可選的。 若是既沒有指定SignalNumber 也沒有指定 SignalName 參數,按缺省將捕捉除了 SIGHUP、SIGCLD、 SIGALRM 以及 SIGKILL 之外的全部信號。若是 SIGTRAP 信號來自調試器之外的進程,dbx 調試程序沒法忽略該信號。若是沒有指定參數,將會顯示當前全部被忽略的信號的列表。 例子 要使 dbx 忽略發送到應用程序的警報時鐘超時信號,請輸入: ignore alrm參見 catch 子命令。另見 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Handling Signals。 list 子命令 list [ Procedure | SourceLine-Expression [ ,SourceLine-Expression ] ] list 子命令顯示指定數目的源文件的行。行數由如下兩種方法中的一種來指定: 經過使用 Procedure 參數指定一個過程。 在這種狀況下,list 子命令顯示從指定過程開始前的幾行開始直到列表窗口已滿。 經過使用SourceLine-Expression參數指定源文件開始和結束行。 SourceLine-Expression 參數由一個有效的行號,加上可選的 +(加號)或 -(減號),以及一個整數組成。另外, SourceLine $(美圓符號)能夠用來表示當前行號;SourceLine @ (at 符號) 能夠用來表示要列出的下一行的行號。 全部在第一個指定的行號和第二個指定的行號之間(包括這兩行)的行都將被顯示出來。 若是沒指定第二個源行,則只打印第一行。 若是 list 子命令沒有指定參數,則將從當前源文件的行開始,打印 $listwindow 所指定的行數。 要修改列表行數的默認值,能夠設置特定的調試程序變量,$listwindow,爲您想要的行數。$listwindow 的初始值爲 10。 示例 要列出當前文件中第 1 到第 10 行,請輸入:  list 1,10要列出 10 行,或者 $listwindow 行的 main 程序,請輸入:  list main要以當前行爲中間行,列出先後共 11 行,請輸入:  list $-5,$+5您能夠在 SourceLineExpression 表達式中使用包括加法和減法在內的簡單整數表達式。例如:  (dbx) list $ 4 { (dbx) list 5 5 char i = '4'; (dbx) list sub 23 char *sub(s,a,k) 24 int a; 25 enum status k;  .  .  .   (dbx) move  25 (dbx) list @ -2 23 char *sub(s,a,k)參見 edit 子命令、listi 子命令以及move 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Displaying the Current File。 listi 子命令 listi [ Procedure | at SourceLine | Address [ , Address ] ] listi 子命令顯示源文件指定的指令集合。顯示的指令能夠經過下列方法指定: 提供 Procedure 參數,其中 listi 子命令將從指定過程開始列出指令列表,直到列表窗口填滿爲止。  使用at SourceLine 標誌,其中 listi 從指定行開始顯示指令列表,直到列表窗口被填滿爲止。SourceLine 變量能夠經過一個整數或者一個文件名字符串後跟 :(冒號)和一個整數的方法指定。  經過 Address 參數來指定開始和結束的地址,則兩個地址之間(包括這兩個地址)全部的指令都將被顯示出來。 若是 listi 子命令沒有使用標誌或參數,則顯示下一個 $listwindow 指令。要修改當前列表窗口的大小,可使用 set $listwindow=Value 子命令。 反彙編方式 dbx 程序能夠反彙編 POWER 系列 系列或者 POWER PC 體系結構指令。在默認模式下,dbx 程序顯示正在運行的結構的指令。 dbx 命令中的 set 子命令的 $instructionset 以及 $mnemonics 變量在容許您覆蓋默認的反彙編方式。要得到更多的信息,請參見dbx 命令中的 set 子命令。 標誌 SourceLine 指定了列表的開始命令行。  示例 要列出下 10 條或者 $listwindow 條指令,請輸入:  listi要列出第 10 行的機器指令,請輸入  listi at 10要列出 sample.c 文件中源代碼第 5 行的機器指令,請輸入:  listi at "sample.c":5要列出地址位於 0x10000400 和 0x10000420之間的指令,請輸入:  listi 0x10000400, 0x10000420參見 list 子命令以及 set 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Debuggingat the Machine Level with dbx。 map 子命令 map [ >; File ] map 子命令顯示應用程序中每一個裝入部分的特徵。該信息包括導入的每一個裝入塊的名稱、文原本源、文本長度、數據來源以及數據長度。 標誌 >;File 重定向輸出到指定的文件。  請參閱 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Debugging at the Machine Level with dbx。 move 子命令 move SourceLine move 子命令將下一個顯示行更換爲由 SourceLine 參數指定的行。該子命令修改 @ (at 符號) 變量的值。 SourceLine 變量能夠經過一個整數或者在表明文件名的字符串後跟 :(冒號)和一個整數的方法指定。 示例 要想將下一行修改成第 12 行,請輸入:  move 12要將下一行修改成文件 sample.c 的第 5 行,請輸入:  move "sample.c":5參見 list 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Displaying the Current File。 multproc 子命令 multproc [ on | parent | child | off ] multproc 子命令指定 dbx 調試程序在建立派生或者越權進程時的行爲。on 標誌用來指定一個新的 dbx 會話將會被建立以調試派生進程的子路徑。原先的dbx 將會繼續調試原來的父路徑。parent 以及 child 標誌用來指定派生進程的單獨路徑。除了off 的全部標誌都能使 dbx 跟隨越權進程。off 標誌禁用多進程調試。若是沒有指定標誌,multproc 子命令返回當前調試的多進程的狀態。 dbx 程序使用 Xwindows 來進行多進程調試。dbx 程序將會打開足夠多的窗口供多進程調試使用。每一個子窗口的標題爲子進程 ID (pid)。要在進程之間切換,使用 Xwindows 處理技術來激活 dbx 會話顯示的窗口。若是系統不支持 Xwindows,在調試派生進程時將會出現一個警告信息而 dbx 程序繼續僅調試父進程。多進程調試也可能因以下緣由失敗: dbx 程序沒有運行在 Xwindows 環境下。  Xwindows 已經運行可是dbx 通用 $xdisplay 變量沒有設置一個有效的顯示名。$xdisplay 變量被初始化成 shell 的 DISPLAY 環境變量。set 名稱 =表達式 dbx 子命令能夠用來修改顯示名稱的值。  /tmp 目錄不容許對調試程序進行讀寫訪問。dbx 程序要求在該目錄中有小量空間控制 Xwindow 環境。  該系統沒有足夠的資源知足一個新的 Xwindow 窗口。 $xdisplay 設置成遠程顯示,用戶可能看不見新建立的 Xwindow。若是$xdisplay 設置不正確,Xwindows 或者其餘的系統資源將會報告發生錯誤的緣由。 dbx 程序不能區分不一樣類型錯誤的區別,可是將會在子命令失敗時發送以下的信息: Warning: dbx subcommand multiproc fails. dbx  continued with multproc disabled.新建立窗口的用戶定義的配置能夠在 .Xdefaults 文件中由 dbx_term 應用程序名定義。 標誌 on 啓用多進程調試。  off 禁用多進程調試。  示例 要檢查當前多進程的調試狀態,請輸入:  multproc要啓用多進程調試,請輸入:  multproc on要禁用多進程調試,請輸入:  multproc off 參見screen 子命令以及 fork 子例程。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Debugging Programs Involving Multiple Processes。 mutex 子命令 mutex [ lock | unlock | thnum | utid |  MutexNumber ... ] mutex 子命令顯示關於互斥的信息。若是給定 MutexNumber參數mutex 子命令將顯示指定互斥的信息。若是沒有指定標誌或者參數,mutex 子命令將會顯示全部的互斥信息。 每一個互斥信息列出以下: mutex 指定互斥的符號名,遵循 $mMutexNumber 格式。  type 指出互斥類型:non-rec(非遞歸),recursi(遞歸)或者 fast(快速)。  obj_addr 指出互斥的內存地址。  lock 指出互斥的鎖定狀態:yes 若是互斥已經鎖定,no 若是沒有鎖定。  owner 若是鎖定互斥,指出擁有該互斥的用戶線程的符號名。  blockers 列出在互斥變量中鎖定的用戶線程。  注意: dbx 調試程序的 print 子命令識別互斥符號名,而後能用來顯示相應對象的狀態。 標誌 lock 顯示關於鎖定互斥的信息。  unlock 顯示關於未鎖定互斥的信息。  thnum 顯示特定線程的全部互斥的信息。  utid 顯示用戶線程 id 與給定用戶線程 id 符合的用戶線程的全部互斥信息。  示例 要顯示全部互斥的信息,請輸入:  mutex要顯示全部鎖定的互斥的信息,請輸入:  mutex lock 要顯示互斥號爲 四、五、6的信息,請輸入:  mutex 4 5 6輸出相似於: mutex   obj_addr         type     lock owner  blockers $m4    0x20003274        non-rec   no $m5    0x20003280        recursi   no $m6    0x2000328a        fast      no要顯示全部線程 1 的互斥信息,請輸入:  mutex thnum 1要顯示線程號爲 0x0001 的線程擁有的全部互斥信息,請輸入:  mutex utid 0x0001參見attribute 子命令、condition 子命令、print 子命令以及 thread 子命令。 另見AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Using Mutexes。 next 子命令 next [ Number ] next 子命令運行應用程序到下一行。Number 參數指定 next 子命令運行的次數。若是沒有指定 Number 參數,next 只運行一次。 若是您在多線程應用程序中使用 next 子命令,操做期間運行全部的用戶線程,可是該程序繼續運行直到運行到指定的行。若是您想單步運行正在運行的線程,使用 set 子命令對 $hold_next 變量進行設置。設置該變量將可能致使死鎖,由於運行中的線程可能等待某個阻塞的線程擁有的鎖。 示例 要繼續執行到下一源行,請輸入:  next要繼續執行到當前源行後的第三行,請輸入:  next 3請參閱 cont 子命令、goto 子命令、nexti 子命令、set 子命令以及 step 子命令。 nexti 子命令 nexti [ Number ] nexti 子命令運行應用程序到下一個指令。Number 參數指定nexti 子命令運行的次數。若是沒有指定 Number 參數,nexti 只運行一次。 若是您在多線程應用程序中使用 nexti 子命令,全部的用戶線程在操做期間都將運行,可是程序將會繼續運行直到運行的線程達到指定的機器指令。若是您想單步運行正在運行的線程,使用 set 子命令對 $hold_next變量進行設置。設置該變量將可能致使死鎖,由於運行中的線程可能等待某個阻塞的線程擁有的鎖。 示例 要繼續執行到下一個機器指令,請輸入:  nexti要繼續執行到從當前機器指令起的第三個機器指令,請輸入:  nexti 3參見gotoi 子命令、next 子命令、set 子命令以及stepi 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Running a Program at the Machine Level。 print 子命令 print 表達式 ... print Procedure ( [ Parameters ] ) print 子命令打印執行如下任務: 打印由Expression 參數指定的表達式列表的值。  執行 Procedure 參數指定的過程並將過程的返回值打印出來。包括的參數傳遞給過程。 示例 要顯示x 以及 y 左移兩位的值,請輸入:  print x, y << 2要顯示帶參數 0 調用 sbrk 例程的返回值,請輸入:  print sbrk(0)參見assign 子命令、call 子命令以及 set 子命令。 prompt 子命令 prompt [ "String" ] prompt 子命令將 dbx 命令的提示符修改成String 參數指定的字符串。 例子 要將提示符修改成 dbx>;,請輸入: prompt "dbx>;"請參閱  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Defining a New dbx Prompt。 quit 子命令 quit quit 子命令結束全部在 dbx 調試對話中的進程。 參見 detach 子命令。 registers 子命令 registers [ >;File ] registers 子命令顯示通用寄存器、系統控制寄存器、浮點數寄存器以及當前指令寄存器的值。 通用寄存器由符號$rNumber 變量表示,其中Number 參數指定寄存器的序號。  注意: 寄存器的值能夠設置成十六進制數 0xdeadbeef。十六進制數 0xdeadbeef 是一個在進程初始化時就賦到通用寄存器中的初始值。 浮點寄存器由 $frNumber 變量表示。按照缺省設置,浮點寄存器不會被顯示出來。要顯示浮點寄存器,使用 unset $noflregs dbx 子命令。 注意:若是當前線程正處於內核模式,registers 子命令將不能顯示寄存器。 標誌 >;File 重定向輸出到指定的文件。  參見set 子命令和 unset 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Using Machine Registers。 rerun 子命令 rerun [ Arguments ] [ < File ] [ >; File ] [ >; >; File ] [ 2>; File ] [ 2>; >; File ] [ >;& File ] [ >; >;& File ] rerun 子命令開始目標文件的執行。Arguments 參數將會做爲命令行參數傳遞。若是沒有指定 Arguments 參數,最近一次 run 或者 rerun 子命令使用的參數將會被再次使用。 標誌 <File 將輸入重定向使得從 File文件中得到輸入。  >;File 重定向輸出到 File文件中。  >; >;File 添加劇定向輸出到 File 中。  2>;File 將標準錯誤重定向到 File 中。  2>; >;File 添加劇定向標準錯誤到 File 中。  >;&File 將輸出和標準錯誤重定向到 File 中。  >; >;&File 添加輸出和標準錯誤到 File 中。  參見 run 子命令。 return 子命令 return [ Procedure ] return 子命令使應用程序執行直到返回到由 Procedure 參數指定的過程。若是沒有指定 Procedure 參數,執行將會在當前過程返回時中止。 示例 要繼續執行例程的調用,請輸入:  return要繼續執行至 main 過程,請輸入:  return main rwlock 子命令 rwlock [read | write | RwlockNumber....] rwlock 子命令顯示 rwlocks 的信息。若是給定 RwlockNumber 參數,rwlock 子命令將會顯示指定 rwlocks 的信息。若是沒有指定標誌或者參數,rwlock 子命令將會顯示全部 rwlocks 的信息。 每一個 rwlock 的信息以下: rwl 設定 rwlock 的符號名稱,格式爲 $rw RwlockNumber。  flag_value 指出標誌的值。  owner 指出 rwlock 的全部者。  status 指出誰擁有該 rwlock。這個值能夠是讀入(若是由讀入者擁有)、寫出(若是由寫出者擁有)或者空閒(若是空閒)。  wsleep[#] 指出寫入的線程阻塞。# 說明寫入的線程阻塞的總數。  rsleep[#] 指出讀入的線程阻塞。# 說明讀入的線程阻塞的總數。  注意: dbx 調試程序的print 子命令識別 rwlock 的符號名稱並能用於顯示其對應的對象的狀態。 標誌 read 顯示全部處於讀狀態的 rwlock 的信息。  write 顯示全部處於寫狀態的 rwlock 的信息。  示例 要顯示全部 rwlock 的信息,請輸入:  rwlock輸出相似於: rwl     flag_value    owner status $rwl        1         $t1    write         rsleeps[     0]:         wsleeps[     0]:要顯示處於寫狀態的全部 rwlock 的信息,請輸入:  rwlock write輸出相似於: rwl     flag_value    owner status $rwl        1         $t1    write         rsleeps[     0]:         wsleeps[     0]:參見attribute 子命令、condition 子命令、 mutex 子命令、print 子命令以及 thread 子命令。 run 子命令 run [ Arguments ] [ <File ] [ >;File ] [ >; >;File ] [ 2>;File ] [ 2>; >;File ] [ >;&File ] [ >; >;&File ] run 子命令打開目標文件。Arguments 參數將會做爲一個命令行參數使用。 標誌 <File 將輸入重定向使得從 File文件中得到輸入。  >;File 重定向輸出到 File文件中。  2>;File 將標準錯誤重定向到 File 中。  >; >;File 添加劇定向輸出到 File 中。  2>; >;File 添加劇定向標準錯誤到 File 中。  >;&File 將輸出和標準錯誤重定向到 File 中。  >; >;&File 添加輸出和標準錯誤到 File 中。  例子 要帶參數 blue 和 12 運行應用程序,請輸入: run blue 12參見 rerun 子命令。 screen 子命令 screen screen 子命令爲 dbx 命令交互打開一個 Xwindow 窗口。您能夠在進程發生的窗口繼續操做。 screen 子命令必須在 dbx 調試程序運行在一個 Xwindows 環境下時運行。若是 screen 子命令運行於非  Xwindow 環境下,dbx 程序將會顯示一個警告信息而且繼續執行調試過程如同沒有設定 screen 子命令。screen 子命令也可能在下述狀況下失敗: dbx 程序沒有運行在 Xwindows 環境下。  Xwindows 已經運行可是dbx 通用 $xdisplay 變量沒有設置一個有效的顯示名。 $xdisplay 變量被初始化成 DISPLAY 環境變量的值。dbx 子命令 set Name=表達式修改顯示名稱的值。  Xwindows 正在運行,可是 TERM 環境變量沒有設置成一個有效的命令名稱以調用新窗口。  /tmp 目錄不容許對調試程序進行讀寫訪問。dbx 程序要求在 screen 命令執行時該目錄中有小量空間。  該系統沒有足夠的資源知足一個新的 Xwindow 窗口。 dbx 程序不能區分不一樣類型錯誤的區別,可是將會在子命令失敗時發送以下的信息: Warning:dbx subcommand screen fails. dbx continues.若是$xdisplay 設置成遠程顯示,用戶可能看不見新建立的 Xwindow。若是$xdisplay 設置不正確,Xwindows 或者其餘的系統資源將會報告發生該問題。 新建立窗口的用戶定義的配置能夠在 .Xdefaults 文件中由 dbx_term 應用程序名定義。 示例 要打開一個 dbx 命令交互的 Xwindow 窗口,請輸入: screen請參閱 AIX 5L Version 5.2 General Programming Concepts:  Writing and Debugging Programs 中的  Separating dbx Output From Program Output 和  AIX 5L Version 5.2 AIXwindows Programming Guide 中的 AIXwindows Overview。 set 子命令 set [ Variable=Expression ] set 子命令爲 dbx 調試程序變量定義一個值。其值由 Expression 參數指定;而程序變量由 Variable 參數指定。變量名不得和正在調試的程序中的使用名稱相沖突。在其它命令內部擴展變量至相應的表達式。若是 set 子命令沒有參數使用,將會顯示當前的變量。 如下變量能夠用 set 子命令設置: $catchbp 在下一個命令執行期間捕捉斷點。  $expandunions 顯示變體記錄或變體聯合的每一個部分的值。  $frame 使用由 $frame 的值指定的地址所指向的堆棧框架,來執行堆棧跟蹤和訪問局部變量。  $hexchars 按照十六進制值打印字符。  $hexin 按照十六進制解釋地址。  $hexints 按照十六進制數值打印整數。  $hexstrings 按照十六進制打印字符指針。  $hold_next 控制在運行 cont、next、nexti 和 step 子命令時得到除了正在運行線程以外的全部線程。設置該變量將可能致使死鎖,由於運行中的線程可能等待某個阻塞的線程擁有的鎖。  $ignoreload 在您運行 load、 unload或者 loadbind 子例程時不會中止。  $instructionset 重設默認反彙編方式。如下列表包含了 Expression 參數可能取的值:  "default"  指定 dbx 程序運行的結構。  "com"  指定 POWER PC 和 POWER 系列體系結構的公共交叉模式的指令集。dbx 程序缺省設置爲 基於 POWER 的 助記符。  "pwr"  指定 POWER 系列體系結構的指令集和助記符。  "pwrx"  指定 AIX 5.1 或者更早的 POWER2 實現 POWER 系列體系結構的指令集和助記符。  "601"  指定 AIX 5.1 和更早版本的 PowerPC 601 的指令集和助記符。  "603"  指定 AIX 5.1 和更早版本的 PowerPC 603 的指令集和助記符。  "604"  指定 PowerPC 604 RISC 微處理器 的指令集和助記符。  "ppc"  指定由基於 POWER 體系結構定義的指令集和助記符,除了可選指令。這些指令在全部的基於 POWER 實現的體系中有效,除了 AIX 5.1 或者更早的 PowerPC 601 RISC 微處理器。  "any"  指定任何有效的、基於 POWER 的或 POWER 系列系列的指令。對於重疊的指令,缺省助記符爲 基於 POWER 的助記符。  若是沒有設置 Expression 參數,dbx 將會使用缺省反彙編方式。   $listwindow 指定一個函數列表的行數以及不加參數使用 list 子命令時的列表的行數。缺省值是 10 行。  $mapaddrs 開始映射地址。取消 $mapaddrs 設置將中止地址映射。  $mnemonics 修改反彙編時 dbx 程序的助記符設置。  "default"  指定最接近指定的指令的助記符。  "pwr"  指定 POWER 系列結構的助記符。  "ppc"  指定 基於 POWER 的結構中定義的助記符,不包括可選指令。  若是沒有設置 Expression 參數值dbx 程序將會最接近指定指令集的助記符。   $noargs 省略來自子命令的參數,例如 where、up、down 和 dump。  $noflregs 省略 registers 子命令中浮點寄存器的顯示。  $octin 解釋八進制的地址。  $octints 打印八進制的整數。  $pretty 與 print 子命令連用,按照 pretty printed 格式顯示覆雜的 C 及 C++ 數據結構(結構、聯合、數組)的值。  "on"  指定值不換行打印、並帶有表示值的靜態範圍的限定名稱的美化打印。  "verbose"  指定各自行中每一個值的恰當的打印並帶有表示值的靜態範圍的限定名稱。一個限定名稱包含一個由點隔開與值相關外部塊的列表。  "off"  指定關閉恰當打印。此爲缺省設置。   $repeat 若是沒有輸入命令則重複前一個命令。  $sigblock 程序的阻塞信號。  $stepignore 控制在 step 子命令運行某一源行時 dbx 如何動做,該源行調用另外一個無調試信息可返回的例程。該變量使得 step 子命令能夠跳過大的沒法得到調試信息的例程。如下列表包含了 Expression 參數可能取的值:  "function"  執行 dbx 命令的 next 子命令的函數。這是默認值。  "module"  若是函數處於一個裝入塊中而沒法得到調試信息(例如系統庫),則執行 next 子命令函數。  "none"  在後臺執行 dbx 命令中的 stepi 子命令的函數直到達到源文件信息可得的一條指令。在這一點上 dbx 將會顯示運行到哪兒中止了。   $thcomp 當設置了 $thcomp將會按照壓縮格式顯示線程命令 th- 的顯示信息。  $unsafeassign 關閉對 assign 語句兩端嚴格的類型檢查語句。即便設置了 $unsafeassign 變量,assign 語句兩邊也不必定包含不一樣大小的存儲類型。  $unsafebounds 關閉數組的下標檢查。  $unsafecall 關閉子例程或者函數調用參數的嚴格類型檢查。  $unsafegoto 關閉 goto 子命令目的地檢查。  $vardim 指定在打印未知邊界的數組時將使用的維度。缺省值是 10。  $xdisplay 指定顯示的 Xwindows 的名稱,用於 multproc 或者 screen 子命令。缺省值爲 shell DISPLAY 變量的值。  $unsafe 變量限制了 dbx 調試程序在錯誤檢測中的用途。 示例 要修改缺省的列表的行數爲 20,請輸入:  set $listwindow=20要禁用 assign 子命令的類型檢查,請輸入:  set $unsafeassign要使用 AIX 5.1 或者更早的 PowerPC 601 RISC 微處理器的反彙編機器指令,請輸入:  set $instructionset="601"參見 unset 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Changing Print Output with Special Debug Program Variables。 set edit [vi, emacs] 或 set -o [vi, emacs] 子命令 set 子命令帶有 -o 或者 edit 選項能夠用來打開某一行編輯模式。若是給出了 set-o vi 或者 set edit vi 命令,您將處於 vi 行編輯器的輸入模式。若是給了 set -o emacs 或者 set edit emacs 命令,您將處於 emacs 行編輯器的輸入模式。 示例 要打開 vi 行編輯器,請輸入:  set-o vi或 set edit vish 子命令 sh [ Command ] sh 子命令將 Command 參數指定的命令傳遞到 shell 執行。SHELL 環境變量決定使用哪一個 shell。缺省值爲 sh shell。若是沒有指定參數,將把控制權交給 shell。 示例 要運行 ls 命令,請輸入:  sh ls要進入 shell,請輸入:  sh要使用 SHELL 環境變量,請輸入:  sh echo $SHELL請參閱 AIX 5L Version 5.2 General Programming Concepts:  Writing and Debugging Programs 中的 Running Shell Commands from dbx。 skip 子命令 skip [ Number ] skip 子命令從當前的中止點繼續執行程序。數目等於 Number 參數的值的斷點將會被跳過並將在下一個斷點處或者程序結束時中止執行。若是沒有指定 Number 參數,缺省值爲 1。 示例 要繼續執行程序直到遇到第二個斷點,請輸入: skip 1也可參見 cont 子命令。 source 子命令 source File source 子命令從File參數指定的文件讀入 dbx 子命令。 示例 要從 cmdfile 文件中讀 dbx 子命令,請輸入: source cmdfile請參閱 AIX 5L Version 5.2 General Programming Concepts:  Writing and Debugging Programs 中的 Reading dbx Subcommands from a File。 status 子命令 status [ >;File ] status 子命令顯示當前活動的 trace 和 stop 子命令。>; 標誌將 status 子命令的輸出送到由 File 參數指定的文件當中。 標誌 >;File 重定向輸出到 File文件中。  參見 dbx 命令的 clear 子命令、delete 子命令、stop 子命令、trace 子命令。 另見 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Setting and Deleting Breakpoints。 step 子命令 step [ Number ] step 子命令運行應用程序源命令行。經過 Number 參數指定執行的行數。若是省略了 Number 參數,缺省值爲 1。 若是在多線程應用程序中使用 step 子命令,操做期間全部的用戶線程都將運行,可是程序繼續執行直到運行線程達到指定的源程序行。若是您想單步運行正在運行的線程,使用 set 子命令對 $hold_next變量進行設置。設置該變量將可能致使死鎖,由於運行中的線程可能等待某個阻塞的線程擁有的鎖。 注意: 使用set 子命令的 $stepignore 變量來控制 step 子命令的行爲。 $stepignore 變量使 step 子命令單步跳過大的沒法得到調試信息的例程。 示例 要繼續執行一個源程序行,請輸入:  step要繼續執行五行,請輸入:  step 5要防止 dbx 程序單步執行 printf 函數,以下述示例代碼所述:  60 printf ("hello world /n");請輸入: set $stepignore="function"; step參見 cont 子命令、goto 子命令、next 子命令、set 子命令以及 stepi 子命令。 stepi 子命令 stepi [ Number ] stepi 子命令運行應用程序的指令。經過 Number 參數指定執行的指令數。若是省略了 Number 參數,缺省值爲 1。 若是在多線程應用程序上使用,stepi 子命令只單步執行當前運行線程。全部其它的線程都將中止。 示例 要繼續執行一個機器指令,請輸入:  stepi 要繼續指令 5 個機器指令,請輸入:  stepi 5參見 gotoi 子命令、 nexti 子命令、 step 子命令。 stop 子命令 stop { [Variable] [ at SourceLine | in Procedure ] [ if Condition ]} stop 子命令在知足特定條件時中止應用程序。應用程序將會在下列條件中止: Condition 值爲真,若是使用了 if Condition 標誌。  Procedure 被調用,若是使用了 in Procedure 標誌。  若是指定了 Variable 參數,Variable 發生了改變。  若是設置了 at SourceLine 標誌,就達到了 SourceLine 行。  SourceLine 變量能夠經過一個整數或者表明文件名的字符串後跟 :(冒號)和一個整數的方法指定。 完成任意命令後,dbx 調試程序產生一個消息報告它已做爲命令結果產生。該消息包括和您的斷點相關的事件的 ID 以及您的命令的解釋。解釋的語法並不必定和您的命令相同。示例: stop in main [1] stop in main stop at 19 if x == 3 [2] stop at "hello.c":19 if x = 3方括號中的數字是和斷點相關的事件的標識符。dbx 調試程序將事件數和每一個 stop 子命令聯繫起來。當一個事件致使程序中止後,事件標識符將與當前行一同顯示,以說明致使程序中止的事件。您所建立的事件和由 dbx命令生成的內部事件共存,所以事件號可能不老是順序的。 使用 status 子命令來查看這些事件號。您能夠重定向 status 的輸出到一個文件當中。使用 delete 或者 clear 子命令來關閉 stop 子命令。 在多線程應用程序中,全部用戶線程都將在任何用戶線程遇到斷點時中止。在源文件行和函數中設置的斷點將會被任何執行該行和該函數的用戶線程遇到,除非您按照下述例 9 的方式指定條件。如下別名自動指定條件: bfth(Function, ThreadNumber)  blth(SourceLine, ThreadNumber) ThreadNumber 是線程符號名的數字部分,由 thread 子命令報告(例如,5 是名爲 $t5 的線程的 ThreadNumber)。這些別名其實是宏,它們產生擴展子命令以下: stopi at &Function    if ($running_thread ==  ThreadNumber) stop at SourceLine  if ($running_thread == ThreadNumber)標誌 at SourceLine 指定行號。  if Condition 指定條件,例如真值。  in Procedure 指定調用的過程。  示例 要在 main 過程當中第一個語句處中止,請輸入:  stop in main當 x 變量的值在第 12 的行執行時改變時要中止執行,請輸入:  stop x at 12要在 sample.c 文件的第五行中止執行,請輸入:  stop at "sample.c":5要在 dbx命令每次運行 func1 的子例程時檢查 x 的值,請輸入:  stop in func1 if x = 22要檢查dbx 命令每次開始運行 func1 函數時 x 的值,請輸入:  stopi at &func1 if x = 22當改變 Variable 變量的值時要中止程序,請輸入:  stop Variable要隨時在 Condition 變爲真時中止程序的運行,請輸入:  stop if (x >; y) and (x < 2000)如下例子列出瞭如何顯示活動的事件並將它們刪除:  status [1] stop in main [2] stop at "hello.c":19 if x = 3 delete 1 status [2] stop at "hello.c":19 if x = 3 clear 19 status (dbx) delete 命令用事件標識符刪除事件。clear 命令經過行號刪除了斷點。 要將斷點設置在 func1 的開始處,而且只有由線程 $t5 執行時有效,請輸入如下等價命令之一:  stopi at &func1 if ($running_thread == 5)或  bfth(func1, 5)參見clear 子命令、delete 子命令、stopi 子命令以及 trace 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Setting and Deleting Breakpoints。 stophwp 子命令 stophwp Address Size stophwp 子命令爲指定的內存區域設置一個硬件監視點中止。若是區域的內容改變程序就將中止。  注: stophwp 子命令的成功之處在於硬件依賴性。這個功能只能在 630 型 、PowerPC 機型以及後來的型號中使用。  因爲硬件只能設置一個監視點的限制,在試圖建立另外一個硬件觀察點時活動的觀察點事件將會在 stophwp 和tracehwp 發生衝突。一樣的,之前的事件必須在建立一個新的事件以前刪除。一樣,由於存在一個活動的軟件觀察點(由一些 stop 和 trace 子命令調用生成)取消硬件監視點的性能,這些類型的事件也能夠做爲建立一個硬件監視點以前必須刪除的衝突事件。  示例 1. 當起始地址爲 0x200004e8 的 4 個字節的內存內容改變時要中止程序,請輸入:  stophwp 0x200004e8 4參見 tracehwp 子命令。 stopi 子命令 stopi { [Address] [ at Address | in Procedure ] [ if Condition ]} stopi 子命令在指定的位置設置一箇中止點: 經過 if Condition 標誌能夠在指定條件爲真時中止程序。  經過 Address 參數,當 Address 的內容被修改時程序中止運行。  經過 at Address 標誌,在指定的地址設置中止點。  經過 in Procedure 標誌,程序在調用 Procedure 時中止。 標誌 if Condition 指定條件,例如真值。  in Procedure 指定調用的過程。  at Address 指定機器指令地址。  示例 在地址爲 0x100020f0 處中止執行,請輸入:  stopi at 0x100020f0要在地址爲 0x100020f0 的內容被修改時中止,請輸入:  stopi 0x100020f0要在地址爲 0x200020f0 的內容被線程 $t1修改時中止,請輸入:  stopi 0x200020f0 if ($running_thread == 1)參見 stop 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Debugging at the Machine Level with dbx。 thread 子命令 顯示選中的線程 thread { [ info ] [ - ] [ ThreadNumber ... ] } | current | run | susp | term | wait 選中一個單獨線程 thread current [ - ] ThreadNumber 保持或者釋放線程 thread { hold | unhold } [ - ] [ ThreadNumber ... ] 得到顯示選項的幫助 thread { help} thread 子命令顯示和控制用戶線程。 thread 子命令的第一種形式能夠兩種格式顯示信息。若是 thread 子命令是 th那麼將會使用第一種格式顯示信息。若是  thread 子命令是 th -,那麼將會按照第二種格式顯示信息。若是沒有指定參數,則會顯示全部用戶線程的信息。若是指定了一個或者更多的  ThreadNumber 參數,則會顯示相關用戶線程的信息。若是 thread 子命令顯示線程,當前線程命令行前將會加上 >;。若是運行中的線程和當前的線程不一致,該行前將會加上 * 符號。由 thread 子命令按照兩種方式顯示的信息以下。 由 thread 子命令按照第一種方式顯示的信息以下: thread 按照 $tThreadNumber格式指出用戶線程的符號名。  state-k 指出核心線程的狀態(若是用戶線程鏈接了核心線程)。它能夠是 run、wait、 susp 或者 term,分別對應運行、等待、掛起和終止。  wchan 指出核心線程正在等待或者睡眠的事件(若是用戶線程鏈接了核心線程)。  state-u 指出用戶線程的狀態。可能的狀態有 running、blocked或者 terminated。  k-tid 指出核心線程標識符(若是用戶線程鏈接到核心線程)。  mode 指出用戶線程中止的方式(若是用戶線程鏈接到了核心線程),它能夠是核心方式或用戶方式。  held 指出是否保持用戶線程。  scope 指出用戶線程的爭用做用域;對於系統或者進程爭用域分別是 sys 或者 pro。  function 指出用戶線程函數的名稱。  由 thread 子命令按照第二種方式顯示的信息以下。按照缺省值,對於 thread 子命令 th - 參數,顯示的信息是長格式。 thread 指出用戶線程的符號名按照 $tThreadNumber格式。  核心線程的相關信息 tid 指出用戶線程標識符(若是用戶線程鏈接了核心線程)。  pri 指出了核心線程的優先級。  sched 指出了核心線程的調度策略。它能夠是 fif、oth 或者 rr,分別對應 fifo、其它和環(round robin)調度策略。  state 指出核心線程的狀態(若是用戶線程鏈接了核心線程)。它能夠是 run、wait、susp 或者 zomb,分別對應運行、等待、掛起和殭屍(zombie)狀態。  用戶線程相關信息 tid 指出用戶線程標識符。  pri 指出用戶線程的優先級。  sched 指出了用戶線程的調度策略。它能夠是 fif、oth 或者 rr分別對應 fifo、其它和環(round robin)調度策略。  state 指出用戶線程的狀態。能夠是 running、 creating、 suspended、 blocked、 runnable 或者 terminated。  state 按照十六進制指出用戶狀態。  flags 按照十六進制指出 pthread 標誌的值。  wchan 指出核心線程正在等待或者睡眠的事件(若是用戶線程鏈接了核心線程)。  mode 指出用戶線程中止的方式(核心或者用戶)(若是用戶線程鏈接到了核心線程)。  held 指出是否保持用戶進程。  scope 指出用戶線程的爭用做用域;對於系統或者進程爭用域分別是 sys 或者 pro。  cancellation pending  指出是否取消處於掛起狀態。  state  指出取消的模式和狀態。  若是取消沒有被掛起而狀態和模式分別爲啓用和推遲,則用 ed表示,若是取消狀態和模式分別爲啓用和異步,則用 ea表明,而若是模式沒有啓用,則用 d表明。 若是取消被掛起而取消的狀態和模式分別爲啓用和推遲,則用 ED表明,若是取消狀態和模式分別爲啓用和異步,則用 EA表明,而若是模式沒有啓用,則用 D表明。   joinable 指出線程是否能夠鏈接。  boosted 指出線程 boosted 值。  function 指出用戶線程函數的名稱。  cursig 指出當前信號的值。  若是設置了可選項 $thcomp,則將會按照以下的壓縮格式顯示信息。 m           mode           (k)ernel (u)ser k           k-state        (r)unning (w)aiting (s)uspended (z)ombie u           u-state        (r)unning (R)unnable (s)uspended (t)erminated                            (b)locked (c)reating h           held           (yes) (n)o s           scope          (s)ystem (p)rocess c           cancellation   not pending:  (e)nabled & (d)eferred,                                          (e)nabled & (a)sync, (d)isabled                            pending    :  (E)nabled & (D)eferred,                                          (E)nabled & (A)sync, (D)isabled j           joinable       (yes) (n)o b           boosted        value of boosted field in pthread structure plk         kernel thread  (oth)er  (fif)o  (rr)->; round-robin             policy plu         user thread    (oth)er  (fif)o  (rr)->; round-robin             policy prk         kernel thread  hex number             policy pru         user thread    hex number             policy k-tid                      十六進制的內核線程標識 u-tid                      十六進制的 pthread 標識 fl                         十六進制的 pthread 結構中的標誌字段的值 sta                        十六進制的 pthread 結構中的狀態字段的值 cs                         當前信號值 wchan                      線程正在等待的事件 function                   函數名thread 子命令的第二種格式用來選擇當前線程。dbx 調試程序的  print、registers 以及 where 子命令都在當前線程的上下文中工做。若是當前的線程處於核心模式 registers 子命令不能顯示寄存器。 thread 子命令的第三種格式用來控制線程的執行。可使用 hold 標誌保持線程,或者使用 unhold 標誌釋放線程。保持的線程將不會再繼續直到它被釋放。 注意: dbx 調試程序的 print 子命令識別線程的符號名並能夠顯示相應對象的狀態。 標誌 current 若是沒有指定 ThreadNumber 參數,將會顯示當前的線程。若是指定了 ThreadNumber 參數,選擇指定的用戶線程做爲當前線程。  help 顯示全部在使用 th - 命令時顯示的線程選項的相關信息。  hold 若是沒有 ThreadNumber 參數,則會保持和顯示全部的用戶線程。若是指定了一個或者更多的ThreadNumber 參數,將會保持並顯示指定用戶線程。  unhold 若是沒有指定 ThreadNumber 參數將會釋放和顯示全部之前保持的用戶線程。若是指定了一個或者更多的 ThreadNumber 參數,將會釋放並顯示指定的用戶線程。  info 若是沒有指定 ThreadNumber 參數,將顯示全部用戶線程的長格式列表。若是指定了一個或者更多的 ThreadNumber 參數將會顯示指定用戶線程的長格式列表。  全部上述標誌使用 [-] 選項。若是給定了該選項,則將按照第二種格式以及長格式顯示信息,除非設置了 set $thcomp 選項。   run 顯示處於 run 狀態的線程。  susp 顯示處於 susp 狀態的線程。  term 顯示處於 term 狀態的線程。  wait 顯示處於 wait 狀態的線程。  示例 要顯示全部處於 wait 狀態的線程信息,請輸入: thread wait 輸出相似於:  thread  state-k   wchan state-u   k-tid mode held scope function  $t1     wait           running   17381   u   no   pro  main  $t3     wait            running    8169   u   no   pro  iothread要顯示若干給定線程的信息,請輸入:  thread 1 3 4輸出相似於: thread  state-k   wchan state-u   k-tid mode held scope function  $t1     wait           running   17381   u   no   pro  main  $t3     wait           running    8169   u   no   pro  iothread >;$t4     run            running    9669   u   no   pro  save_thr要使線程 4 成爲當前線程,請輸入: thread current 4  要保持 2 號線程,請輸入:  thread hold 2 要以第二種格式顯示處於等待狀態的線程的信息,請輸入:  thread wait -輸出相似於: thread m k u h s c  j b  kpl  upl  kpr upr k_tid   u_tid   fl  sta wchan function *$t1   u r w n p ed y 0  oth  oth  61   1  0043e5  000001  51  004       main  $t3   u r w n p ed y 0  oth  oth  61   1  001fe9  000102  51  004        iothread >;$t4   u r r n p ed y 0  oth  oth  61   1  0025c5  000203  50  064       save_thr要按照第二種格式顯示若干給定線程的信息,請輸入:  thread - 1 2 3輸出相似於: thread m k u h s c  j b  kpl  upl  kpr upr k_tid   u_tid   fl  sta wchan function *$t1   u r w n p ed y 0  oth  oth  61   1  0043e5  000001  51  004       main  $t3   u r w n p ed y 0  oth  oth  61   1  00fe9   000102  51  004       iothread >;$t4   u r r n p ed y 0  oth  oth  61   1  0025c5  000203  50  064       save_thr 參見 attribute 子命令、condition 子命令、mutex 子命令、print 子命令、registers 子命令以及  where 子命令。 另見 AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs 中的 Creating Threads。 trace 子命令 trace [ SourceLine | Expression at SourceLine | Procedure | [ Variable ] [ at SourceLine | in Procedure ] ] [ if Condition ] 程序運行時 trace 子命令打印指定過程、函數、命令行、表達式或者變量的跟蹤信息。SourceLine 變量能夠經過一個整數或者表明文件名的字符串後跟 :(冒號)和一個整數的方法指定。能夠指定條件。dbx 調試程序將一個數字和每一個 trace 子命令聯繫起來。使用  status 子命令來查看這些數字。使用 delete 子命令來關閉跟蹤。 根據缺省值,跟蹤是基於進程的。要建立基於線程的跟蹤,按照 例 8 的條件指定線程。 標誌 at SourceLine 指定發現被跟蹤的表達式的源行。  if Condition 指定跟蹤開始的條件。跟蹤只有在 if Condition 爲真時開始執行。  in Procedure 指定用來發現被跟蹤的過程或者變量的過程。  示例 要跟蹤每一個 printf 過程的調用,請輸入:  trace printf要跟蹤 hello.c 文件第 22 行的每次執行,請輸入:  trace "hello.c":22要跟蹤 x 變量在 main 過程當中的修改,請輸入:  trace x in main要跟蹤數據地址 0x2004000,請輸入:  set $A=0x2004000 trace $A 注意:tracei 子命令是用來跟蹤地址的。 您能夠將源行的打印限制在指定的 Procedure 活動的時候。您也能夠指定可選擇的 Condition 來控制什麼時候產生跟蹤信息。例如:  (dbx) trace in sub2 [1] trace in sub2 (dbx) run trace in hellosub.c:  8  printf("%s",s); trace in hellosub.c:  9  i = '5'; trace in hellosub.c:  10  }您能夠在過程每次被調用或返回時顯示一個消息。當調用了一個過程,該消息包括傳遞的參數和調用的例程的名稱。在返回中,該信息包括從 Procedure返回的值。例如:  (dbx) trace sub [1] trace sub (dbx) run calling sub(s = "hello", a = -1, k = delete) from function main returning "hello" from sub您能夠在程序運行到指定的行時打印 Expression 的值。行號和文件會打印出來,可是不會打印源命令行。例如:  (dbx) trace x*17 at "hellosub.c":8 if (x >; 0) [1] trace x*17 at "hellosub.c":8 if x >; 0 (dbx) run at line 8 in file "hellosub.c": x*17 = 51   (dbx) trace x [1] trace x initially (at line 4 in "hello.c"):  x = 0 after line 17 in "hello.c":  x = 3要跟蹤 x 變量在 $t1線程中的變化,請輸入:  (dbx) trace x if ($running_thread == 1)也可參見 tracei 子命令。 tracehwp 子命令 tracehwp Address Size tracehwp 子命令爲指定的內存區域設置一個硬件監視點中止。若是區域的內容發生了變化,dbx 調試程序打印跟蹤信息。  注: tracehwp 命令的成功之處在於硬件依賴性。這個功能只能在 630 型 、PowerPC 機型以及後來的型號中使用。  因爲硬件只能設置一個監視點的限制,在試圖建立另外一個硬件觀察點時活動的觀察點事件將會在 stophwp 和tracehwp 發生衝突。一樣的,之前的事件必須在建立一個新的事件以前刪除。一樣,由於存在一個活動的軟件監視點(由一些 stop 和 trace 子命令生成)取消硬件監視點的性能,這些類型的事件也能夠做爲建立一個硬件監視點以前必須刪除的衝突事件。  示例 要跟蹤起始地址爲 0x200004e8 的 4 個字節的內存內容,請輸入:   tracehwp 0x200004e8 4 參見 stophwp 子命令。 tracei 子命令 tracei [ [ Address ] [ at Address | in Procedure ] | Expression at Address ] [ if Condition ] tracei 子命令在以下狀況下開啓跟蹤: 由Address 參數指定的地址內容改變,若是包含了 Address 標誌。  若是指定了 at Address 參數,則運行 at Address 指令。  由 Procedure 指定的進程處於活動狀態若是包含了 in Procedure 標誌。  由 Condition 指定的條件爲真若是包含了 if Condition 標誌。 標誌 at Address 指定一個地址。當該地址處的指令被運行時能夠啓用跟蹤。  if Condition 指定條件。當知足該條件時啓用跟蹤。  in Procedure 指定一個過程。該過程處於活動時啓用跟蹤。  示例 要跟蹤每一個指令的執行,請輸入:  tracei要跟蹤每次在地址 0x100020f0 處執行的命令,請輸入:  tracei at 0x100020f0要在main 過程活動時跟蹤內存地址 0x20004020 內容每次發生的變化,請輸入:  tracei 0x20004020 in main要跟蹤線程 $t4 對地址 0x100020f0 處的指令的每次執行,請輸入:  tracei at 0x100020f0 if ($running_thread == 4)參見 trace 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Debugging at the Machine Level with dbx。 unalias 子命令 unalias Name unalias 子命令刪除由 Name 參數指定的別名。 例子 要刪除名稱爲 printx 的別名,請輸入: unalias printx參見 alias 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Creating Subcommand Aliases。 unset 子命令 unset Name unset 子命令刪除和由參數 Name 指定的名稱相關的 dbx 調試程序變量。 例子 要刪除禁止顯示浮點數寄存器的變量,請輸入: unset $noflregs參見 set 子命令。另見  AIX 5L Version 5.2 General Programming Concepts: Writing and Debugging Programs  中的 Changing Print Output With Special Debugging Variables。 up 子命令 up [ Count ] up 子命令將當前函數在堆棧內向上移動 Count 級。當前函數用來解析名稱。Count 參數的缺省值爲 1。 示例 要將當前函數在堆棧中向上移動兩級,請輸入:  up 2要顯示堆棧中的當前函數,請輸入:  up 0參見 down 子命令。另見 AIX 5L Version 5.2 General Programming Concepts:  Writing and Debugging Programs 中的  Changing the Current File or Procedure、Displaying a Stack Trace。 use 子命令 use [ Directory ... ] use 子命令設置當 dbx 調試命令尋找源文件時要搜索的目錄列表。若是沒有指定 use 子命令的參數,將會顯示要搜索的當前目錄列表。 @ (at 符號) 是一個特殊符號,它指示 dbx 程序查找目標文件中的完整路徑名信息,若是存在的話。若是您有一個叫 @ 的相關目錄要搜索,您能夠在搜索路徑中使用 ./@ 。 use 子命令使用 +(加號)來向搜索目錄列表中添加目錄。若是您有一個名爲 + 的目錄,指定一個完整的目錄路徑名(例如,./+ 或者 /tmp/+)。 示例 要將搜索目錄列表更改成當前目錄(.)、父目錄(..)和 /tmp 目錄,請輸入:  use . .. /tmp要將搜索目錄列表更改成當前目錄(.)、源文件編譯時 (@) 所在的目錄和 ../source 目錄,請輸入:  use . @ ../source要將 /tmp2 目錄添加到待搜索的目錄列表中,請輸入:  use + /tmp2也可參見 edit 子命令和 list 子命令。 whatis 子命令 whatis Name whatis 子命令顯示 Name 的聲明,其中 Name 參數指定了變量、過程或者函數的名稱,塊名稱可選。 注意: 只有在 dbx 調試程序運行時使用 whatis 子命令。 示例 要顯示 x 變量的聲明,請輸入:  whatis x要顯示 main 過程的聲明,請輸入:  whatis main
 
相關文章
相關標籤/搜索