Zxdb 可從簡單的 C、C++ 和 Rust 評估及輸出值
運算式。在 zxdb 中評估運算式最常見的情況是
print
動詞。運算式也可用於需要記憶體的指令
做為引數,例如 stack
或 mem-read
。
評估運算式時,需要一個堆疊框架,因此 處理含有已暫停執行緒的處理程序如果系統正在執行程序,您可以使用 pause 動詞可暫停執行緒。
您可以使用列印指令,在 目前的堆疊框架:
舉例來說,如要查看變數 i
的值,請按照下列步驟操作:
[zxdb] print i
34
您也可以在另一個堆疊框架的內容中評估運算式 而不必切換畫面
舉例來說,如要查看堆疊框架 2
中的 argv[0]
值,請按照下列步驟操作:
[zxdb] frame 2 print argv[0]
"/bin/cowsay"
使用運算式列印
print
指令可接受下列引數:
--max-array=<number>
:指定要顯示的陣列大小上限。變更者: 預設值為 256。指定大型值會減緩運算式的執行速度 以及成效評估--raw
或-r
:略過美化排版,顯示原始類型資訊。--types
或-t
:強制開啟類型列印功能。列印的每個值類型 明確顯示使用-v
。--verbose
或-v
:請勿省略類型名稱。顯示參考地址 指標類型。
如要編寫開頭為連字號的運算式,請使用 --
標記結尾
引數。系統會將 --
之後的連字號視為運算式的一部分:
[zxdb] print -- -i
數字格式設定選項
print
指令接受下列選項來強制設定數值
大多屬於特定類型:
-b
:二進位檔-c
:字元-d
:帶正負號的小數-u
:無帶正負號的小數-x
:無帶正負號的十六進位
特殊變數
您在 zxdb 中使用變數時,可能會有一個 ID 名稱是
目前的語言無法剖析。這通常是因為
由編譯器產生的符號。請務必在 $(<symbols>)
中加入這類字串。
逸出內容中的括號可以具有常值
平衡,否則請在前面加上反斜線逸出。包括任何
有兩條反斜線的常值反斜線
以下皆為有效範例:
$(something with spaces)
$({{impl}})
$(some_closure(data))
$(line\)noise\\)
此外,zxdb 也支援:
CPU 暫存器
您可以使用 $reg(register name)
語法參照 CPU 登錄。適用對象
例如,如要顯示 ARM 登錄 v3
:
[zxdb] print $reg(v3)
0x573a420f128
CPU 暫存器也可以使用未逸出的形式,但前提是目前項目中沒有任何變數 範圍的名稱相同暫存器也能像 運算式較複雜的運算式:
[zxdb] print -x rax + rbx
0x2108aa0032a
向量暫存器
向量暫存器可根據
vector-format
。
[zxdb] print ymm1
{3.141593, 1.0, 0, 0}
[zxdb] print ymm[0] * 2
6.28319
列出向量暫存器
您可以使用 regs
列出向量暫存器。
舉例來說,如要列出所有向量暫存器:
[zxdb] regs --vector
(Use "print $registername" to show a single one, or
"print $registername = newvalue" to set.)
Vector Registers
mxcsr 0x1fa0 = 8096
Name [3] [2] [1] [0]
ymm0 0 0 -3.72066e-103 -3.72066e-103
ymm1 0 0 3.79837e-312 2.63127e-312
ymm2 0 0 0 -3.72066e-103
ymm3 0 0 1.26218e-311 1.26218e-311
ymm4 0 0 1.26218e-311 1.26218e-311
ymm5 0 0 1.26218e-311 1.26218e-311
ymm6 0 0 5.96337e-321 5.87938e-321
ymm7 0 0 2.56125e-311 2.4891e-311
ymm8 0 0 0 0
ymm9 0 0 0 0
ymm10 0 0 0 0
ymm11 0 0 0 0
ymm12 0 0 0 0
ymm13 0 0 0 0
ymm14 0 0 0 0
ymm15 0 0 0 0
(Use "get/set vector-format" to control vector register interpretation.
Currently showing vectors of "double".)
使用 display
逐步執行函式時,建議您自動列印一個函式
或更多運算式。display
指令會新增
以下清單的指定運算式:
[zxdb] display status
Added to display for every stop: status
[zxdb] next
🛑 main(…) • main.cc:48
[code dump]
status = 5;
使用 locals
locals
指令會顯示目前堆疊框架中的所有本機變數。這項服務
接受與 print
相同的引數 (請參閱使用運算式進行列印):
[zxdb] locals
argc = 1
argv = (const char* const*) 0x59999ec02dc0