2015-11-07 129 views
14

我正在爲FFmpeg打補丁,需要調試我的代碼。我正在加載外部庫,爲了測試不同的庫版本,我將它們放在不同的文件夾中。要選擇我想使用哪一個,我一直在使用DYLD_LIBRARY_PATH=/path/to/lib/dir ./ffmpeg,這工作正常。但是當我在lldb內嘗試它時,它崩潰說dyld: Library not loadedReason: image not found。這用於Xcode 7.1之前的工作,但我剛剛升級並停止工作。爲什麼lldb不再轉發我的環境變量了?


這裏是我的MVCE:

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    char* str = getenv("DYLD_LIBRARY_PATH"); 
    if (str) puts(str); 
    else  puts("(null)"); 
    return 0; 
} 

運行此程序如下產生輸出:

$ ./a.out 
(null) 
$ DYLD_LIBRARY_PATH=/tmp ./a.out 
/tmp 

這看起來還好。但是,當我嘗試使用LLDB失敗:

$ DYLD_LIBRARY_PATH=/tmp lldb ./a.out 
(lldb) target create "./a.out" 
Current executable set to './a.out' (x86_64). 
(lldb) run 
Process 54255 launched: './a.out' (x86_64) 
(null) 
Process 54255 exited with status = 0 (0x00000000) 

嘗試設置環境變量中LLDB工作:

lldb ./a.out 
(lldb) target create "./a.out" 
Current executable set to './a.out' (x86_64). 
(lldb) env DYLD_LIBRARY_PATH=/tmp 
(lldb) run 
Process 54331 launched: './a.out' (x86_64) 
/tmp 
Process 54331 exited with status = 0 (0x00000000) 

LLDB版本(它在Xcode 7.1的):

$ lldb --version 
lldb-340.4.110 

問題:這是一個有意爲之的新功能嗎?或者這是lldb中的一個新bug(或者我完全瘋了,這個從來沒有用過)?我很積極lldb用於轉發DYLD_LIBRARY_PATH環境變量,所以它不再是什麼?


編輯:這是在OS X 10.11.1上。

+1

由Jason Molenda(他似乎是lldb開發人員之一)確認[此處](https://www.mail-archive.com/[email protected]/msg00779.html)。 –

回答

23

如果這是在El Capitan(OS X 10.11)上,那麼它幾乎肯定是系統完整性保護的副作用。從System Integrity Protection Guide: Runtime Protections文章:

當一個進程開始時,內核檢查主要看 可執行文件是否受到保護磁盤上或與一個特殊的系統 授權簽署。如果其中任何一個爲真,那麼將標記設置爲表示其被保護以防修改。 ...

...任何動態連接器(dyld) 環境變量,如DYLD_LIBRARY_PATH,當 啓動保護程序被清除。

/usr/bin中的所有內容都以此方式保護。因此,當調用/ usr/bin/lldb時,將清除所有DYLD_ *環境變量。

它應該從內部Xcode.app或命令行工具運行LLDB,就像這樣:

DYLD_LIBRARY_PATH=whatever /Applications/Xcode.app/Contents/Developer/usr/bin/lldb <whatever else> 

我不相信LLDB的副本是受保護的。/usr/bin/lldb實際上只是一個在Xcode或命令行工具中執行版本的蹦牀,所以你最終會運行同樣的事情。但/ usr/bin/lldb受保護,所以在運行時會清除DYLD_ *環境變量。

否則,您必須在Greg Clayton所示的鏈接中設置lldb中的環境變量。或者,您可以禁用系統完整性保護,儘管它有很好的用途。

+0

是的,這是在OS X 10.11.1上。那很有意思。感謝您的明確解釋! – Cornstalks

+2

謝謝。這也解決了我的問題(在El Capitan)。我已經創建了別名「alias lldb =/Applications/Xcode.app/Contents/Developer/usr/bin/lldb」來緩解打字。 –

相關問題