3 回答

TA貢獻1770條經驗 獲得超3個贊
“ EXC_BREAKPOINT(SIGTRAP)”異常是否由調試斷點引起?
否。實際上,反過來:SIGTRAP(跟蹤陷阱)將導致調試器中斷(中斷)您的程序,就像實際斷點一樣。但這是因為調試器總是在崩潰時中斷,而SIGTRAP(就像其他幾個信號一樣)是崩潰的一種類型。
SIGTRAP通常是由引發NSExceptions引起的,但并非總是如此-甚至有可能直接自己引發。
現在,我注意到我忘記刪除一些調試斷點,包括_NSLockError,[NSException提高]和objc_exception_throw。
這些不是斷點。其中兩個是函數,-[NSException raise]是一種方法。
您是說要在這些函數和方法上設置斷點嗎?
我假設使用“發布”配置可防止設置任何斷點-
沒有。
這些配置是構建配置。它們影響Xcode構建應用程序的方式。
斷點不是構建的一部分;您在調試器中設置它們。它們僅存在,只會被命中,并且只有在調試器下運行程序時才停止程序。
由于它們不是構建的一部分,因此不可能僅通過向他們提供應用程序捆綁包就將斷點傳遞給用戶。
我不確定斷點是如何工作的……
當您的程序到達斷點時,調試器將中斷(中斷)您的程序,隨后您可以檢查程序的狀態并仔細向前查看程序如何出錯。
由于是調試器停止程序,因此當您不在調試器下運行程序時,斷點不起作用。
…或者是否需要從gdb內部運行程序才能使斷點生效。
是的 調試器斷點僅在調試器中起作用。
我的問題是:我離開斷點集后會導致用戶觀察到崩潰的原因嗎?
沒有。
首先,如前所述,即使這些斷點確實以某種方式傳遞到用戶的系統中,斷點也僅在調試器中有效。如果您的程序不在調試器下運行,則調試器無法在斷點處停止。用戶幾乎可以肯定不在調試器下運行您的應用程序,尤其是因為他們從崩潰日志中注銷了該應用程序。
即使他們與所有這些斷點設置的調試器下運行你的應用程序,當你的程序到這一點,這些斷點所以人們只能火災,如果你或可可稱為斷點只打了_NSLockError,-[NSException raise]或objc_exception_throw。達到這一點并不是問題的原因,而是問題的征兆。
而且,如果由于其中之一被調用而導致崩潰,那么崩潰日志中將至少有其中一個被命名。沒有。
因此,這與您的斷點無關(不涉及其他機器,調試器),也不是Cocoa異常-正如我提到的那樣,Cocoa異常是SIGTRAP的原因之一,但不是唯一的原因。您遇到了另一個。
如果不是,還有其他人對[NSFont fontWithName:size:]有類似的問題嗎?
因為您切斷了崩潰日志,所以我們無法說出我們遇到的任何問題是否相似。我們對于崩潰發生的背景一無所知。
唯一值得刪除的是“二進制映像”部分,因為我們沒有您的dSYM軟件包,這意味著我們無法使用該部分來表示崩潰日志。
另一方面,您可以。我為此目的編寫了一個應用程序;將崩潰日志提供給它,并且它應該自動檢測dSYM軟件包(您為分發的每個Release版本保留dSYM軟件包,對嗎?),然后將函數和方法名恢復到堆棧跟蹤中,無論函數和方法出現在何處。

TA貢獻1804條經驗 獲得超7個贊
此用戶極有可能安裝了損壞的字體。堆棧跟蹤絕對支持該假設,事實上它僅影響一個用戶。
在這種情況下,除了讓用戶刪除有問題的字體外,您無能為力,因為崩潰發生在Apple代碼的深處。
嘗試讓用戶在“字體書”中運行字體驗證。為此,請啟動“字體書”,在源列表中單擊“ 所有字體 ”,然后選擇所有列出的字體。然后,您可以從“ 文件”菜單中選擇“ 驗證字體 ” 。
- 3 回答
- 0 關注
- 4310 瀏覽
添加回答
舉報