據我所知,有可能只獲取當前線程內的部分來電/回溯信息; (在創建當前線程的線程中)之前的任何內容都會被截斷。以下舉例說明這一點。它創建了一個名爲d
線程的事實,a
稱爲b
,呼籲c
,被切斷:超出線程的來電/回溯
def a; b end
def b; c end
def c; Thread.new{d}.join end
def d; e end
def e; puts caller end
a
# => this_file:4:in `d'
# this_file:3:in `block in c'
- 什麼是此功能的原因是什麼?
- 有沒有辦法讓主叫/回溯信息超出當前線程?
您的答案解釋了爲什麼當前實現無法返回信息。但我原則上認爲這是不可能的。如果每個線程在其創建時複製調用者信息直到它創建的位置,並將其保存在其自身內部,那麼是否有可能從該線程中獲取整個信息?我錯了嗎?我覺得我甚至可以在Ruby級別實現它。 – sawa
沒有什麼是不可能的,但是有什麼可以獲得的? Se更新了答案。 – harald