Release發布log遮蔽方法

2021-06-18 00:52:17 字數 1219 閱讀 1480

在開發過程中一般會用到

nslog(<#nsstring *format, ...#>)來獲得具體的資訊。

nslog(<#nsstring *format, ...#>),並遮蔽掉,這樣比較浪費時間還很累。我們可以採用預編譯的方式來簡化這個問題。

在***-prefix.pch裡面新增

#define debug_mode

#ifdef debug_mode

#define debuglog( s, ... ) nslog( @"<%@:(%d)> %@", [[nsstring stringwithutf8string:__file__] lastpathcomponent], __line__, [nsstring stringwithformat:(s), ##__va_args__] )

#else

#define debuglog( s, ... )

#endif

這樣當我們需要列印log時採用

debuglog( s, ... )

,就可以了。如果我們需要打release版本就直接登出掉

#define debug_mode

,就可以了。

**:這裡有幾個巨集 ##__va_args__, __file__, __line__ 和__function__,下面介紹一下:

1) __va_args__ 是乙個可變引數的巨集,很少人知道這個巨集,這個可變引數的巨集是新的c99規範中新增的,目前似乎只有gcc支援(vc6.0的編譯器不支援)。巨集前面加上##的作用在於,當可變引數的個數為0時,這裡的##起到把前面多餘的","去掉的作用,否則會編譯出錯, 你可以試試。

2) __file__ 巨集在預編譯時會替換成當前的源檔名

3) __line__巨集在預編譯時會替換成當前的行號

4) __function__巨集在預編譯時會替換成當前的函式名稱

舉個例子特別說明一下...和__va_args__

實現思想就是巨集定義中引數列表的最後乙個引數為省略號(也就是三個點)。這樣預定義巨集_ _va_args_ _就可以被用在替換部分中,替換省略號所代表的字串。比如:

#define pr(...) printf(__va_args__)

int main()

輸出結果:

hello

weight = 1, shipping = 2

省略號只能代替最後面的巨集引數。

#define w(x,...,y)錯誤!

python處理log日誌遮蔽攻擊ip

需求 監控日誌,如果有攻擊,就把ip加入黑名單 分析 1 開啟日誌檔案,讀取檔案中的所有的內容 2 提取內容中的ip 3 把ip放入到列表中去,在用set去重,得到獨立不同的ip數 4 迴圈set中的ip,到list中去進行ip個數的統計,超過50次的加入到黑名單 import time count...

除錯Release發布版程式的Crash錯誤(一)

非常感謝作者提供了乙個系統的解決方案 在windows平台下用c 開發應用程式,最不想見到的情況恐怕就是程式崩潰,而要想解決引起問題的bug,最困難的應該就是除錯release版本了。因為release版本來就少了很多除錯資訊,更何況一般都是發布出去由使用者使用,crash的現場很難保留和重現。本文...

除錯Release發布版程式的Crash錯誤(一)

在windows平台下用c 開發應用程式,最不想見到的情況恐怕就是程式崩潰,而要想解決引起問題的bug,最困難的應該就是除錯release版本 了。因為release版本來就少了很多除錯資訊,更何況一般都是發布出去由使用者使用,crash的現場很難保留和重現。本文將給出幾個解決方案,完成對 rele...