以 Linux 為例,一個新應用程式正在使用共享/動態 .so 庫。
在除錯應用程式時,如果我們能夠在該共享庫中設定斷點,那么同時使用該共享庫的任何其他應用程式是否會受到影響?
uj5u.com熱心網友回復:
通常,包含可執行庫和共享庫中的所有代碼以及常量資料的行程的文本段被標記為只讀。除錯時,除錯器將代碼頁標記為寫時復制。當修改代碼設定斷點時,這會導致行程獲取代碼的私有副本,因此斷點不會影響其他行程。
我真的很驚訝這在任何地方都沒有記錄。我發現很多網頁和其他 SO 答案都解釋了斷點是通過用INT 3(在 x86 硬體上)替換指令來實作的,但沒有一個提到該行程獲得了代碼的私有副本。但它肯定必須以這種方式作業,因為對于運行相同程式或使用相同共享庫的其他行程從斷點獲取中斷是沒有意義的。他們沒有運行除錯器來處理這些中斷,并且被替換的指令INT 3在除錯器的記憶體中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/515401.html
下一篇:如何在保留圖層名稱的同時微調模型
