當前位置:首頁 » 操作系統 » 列印監控源碼

列印監控源碼

發布時間: 2023-09-14 04:23:58

Ⅰ 快速學習單片機編程的方法

單片機匯編語言編程規范
軟體設計更多地是一種工程,而不是一種個人藝術。如果不統一編程規范,最終寫出的程序,其可讀性將較差,這
不僅給代碼的理解帶來障礙,增加維護階段的工作量,同時不規范的代碼隱含錯誤的可能性也比較大。分析表明,編碼
階段產生的錯誤當中,語法錯誤大概佔20%左右,而由於未嚴格檢查軟體邏輯導致的錯誤、函數(模塊)之間介面錯誤
及由於代碼可理解度低導致優化維護階段對代碼的錯誤修改引起的錯誤則佔了一半以上。可見,提高軟體質量必須降低
編碼階段的錯誤率。如何有效降低編碼階段的錯誤呢?這需要制定詳細的軟體編程規范,並培訓每一位程序員,最終的
結果可以把編碼階段的錯誤降至10%左右,同時也降低了程序的測試費用,效果相當顯著。
本文從代碼的可維護性(可讀性、可理解性、可修改性)、代碼邏輯與效率、函數(模塊)介面、可測試性四個方
面闡述了軟體編程規范,規范分成規則和建議兩種,其中規則部分為強制執行項目,而建議部分則不作強制,可根據習
慣取捨。
1.排版
規則 1
程序塊使用縮進方式,函數和標號使用空格縮進,程序段混合使用TAB 和空格縮進。縮進的目的是使程序結構清晰,便
於閱讀和理解。
<TAB>默認寬度應為8 個空格,由於Word 中<TAB>為4 個空格,為示範清晰,此處用2 個<TAB>代替(下同)。
例如:
MOV R1, #00H
MOV R2, #00H
MOV PMR, #PMRNORMAL
MOV DPS, #FLAGDPTR
MOV DPTR, #ADDREEPROM
read1kloop:
read1kpage:
INC R1
MOVX A, @DPTR
MOV SBUF, A
JNB TI, $
CLR TI
INC DPTR
CJNE R1, #20H, read1kpage
INC R2
MOV R1, #00H
CPL WDI
CJNE R2, #20H, read1kloop ;END OF EEPROM
規則2
在指令的操作數之間的,使用空格進行間隔,採用這種鬆散方式編寫代碼的目的是使代碼更加清晰。
例如:
CJNE R2, #20H, read1kloop ;END OF EEPROM
規則 3
一行最多寫一條語句。
規則 4
變數定義時,保持對齊。便於閱讀和檢查內存的使用情況。
例如:
RegLEDLOSS EQU 30H ; VARIABLE ;
TESTLED==RegLEDLOSS.0
RegLEDRA EQU 31H ; VARIABLE
RUNLED_Flag EQU 32H ; VARIABLE ;
256ms 改變一次RUNLED 狀態
RUNLED_Def EQU 10H ; STATIC ;
16*32ms=500ms 改變一次LED 狀態
2.注釋
注釋的原則是有助於對程序的閱讀理解,注釋不宜太多也不能太少,太少不利於代碼理解,太多則會對閱讀產生干擾,
因此只在必要的地方才加註釋,而且注釋要准確、易懂、盡可能簡潔。注釋量一般控制在30%到50%之間。
規則 1
程序在必要的地方必須有注釋,注釋要准確、易懂、簡潔。
例如如下注釋意義不大:
MOV DXCE1COUNTER, #00H ; 將DXCE1COUNTER 賦值為0
而如下的注釋則給出了額外有用的信息:
JNZ PcComm_Err ; 假如校驗出錯
規則 2
注釋應與其描述的代碼相近,對代碼的注釋應放在其上方或右方(對單條語句的注釋)相鄰位置,不可放在下面,如放
於上方則需與其上面的代碼用空行隔開。
規則 3
頭文件、源文件的頭部,應進行注釋。注釋必須列出:文件名、作者、目的、功能、修改日誌等。
規則 4
函數頭部應進行注釋,列出:函數的目的、功能、輸入參數、輸出參數、涉及到的通用變數和寄存器、調用的其他函數
和模塊、修改日誌等。對一些復雜的函數,在注釋中最好提供典型用法。
規則 5
對重要代碼段的功能、意圖進行注釋,提供有用的、額外的信息。並在該代碼段的結束處加一行注釋表示該段代碼結束。
規則 6
對於所有的常量,變數,數據結構聲明(包括數組、結構、類、枚舉等),如果其命名不是充分自注釋的,在聲明時都必
須加以注釋,說明其含義。
規則 7
維護代碼時,要更新相應的注釋,刪除不再有用的注釋。保持代碼、注釋的一致性,避免產生誤解。
3.命名
規則 1
標識符縮寫
形成縮寫的幾種技術:
1) 去掉所有的不在詞頭的母音字母。如screen 寫成scrn, primtive 寫成prmv。
2) 使用每個單詞的頭一個或幾個字母。如Channel Activation 寫成ChanActiv,ReleaseIndication 寫成RelInd。
3) 使用變數名中每個有典型意義的單詞。如Count of Failure 寫成FailCnt。
4) 去掉無用的單詞後綴 ing, ed 等。如Paging Request 寫成PagReq。
5) 使用標準的或慣用的縮寫形式(包括協議文件中出現的縮寫形式)。
如 BSIC(Base Station Identification Code)、MAP(Mobile Application Part)。
關於縮寫的准則:
1) 縮寫應該保持一致性。如Channel 不要有時縮寫成Chan,有時縮寫成C
h。Length 有時縮寫成Len,有時縮寫成len。
2) 在源代碼頭部加入註解來說明協議相關的、非通用縮寫。
3) 標識符的長度不超過12 個字元。
規則 2
變數命名約定:<前綴> + 主體 ; 注釋
變數命名要考慮簡單、直觀、不易混淆。
前綴是可選項,表示變數類型,由於匯編中變數多是單位元組變數,所以單位元組變數可以不加前綴,對於 bit 和雙位元組型
變數,使用小寫的b 和d 作為前綴表示。
主體是必選項,可多個單詞(或縮寫)合在一起,每個單詞首字母大寫,其餘部分小寫。
規則 3
常量的命名
常量的命名規則:單詞的字母全部大寫,各單詞之間用下劃線隔開。
規則 4
函數的命名
單詞首字母為大寫,其餘均為小寫。函數名應以一個動詞開頭,即函數名應類似一個動詞斷語或祈使句。
例如:Test_Protect, Check_EEPROM, Init_Para
4.可維護性
規則 1
函數和過程中關系較為緊密的代碼盡可能相鄰。
規則 2
每個函數的源程序行數原則上應該少於200 行。對於消息分流處理函數,完成的功能統一,但由於消息的種類多,可能
超過200 行的限制,不屬於違反規定。
規則 3
語句嵌套層次不得超過5 層。嵌套層次太多,增加了代碼的復雜度及測試的難度,容易出錯,增加代碼維護的難度。
規則 4
避免相同的代碼段在多個地方出現。當某段代碼需在不同的地方重復使用時,應根據代碼段的規模大小使用函數調用或
宏調用的方式代替。這樣,對該代碼段的修改就可在一處完成,增強代碼的可維護性。
規則 5
每個函數完成單一的功能,不設計多用途面面俱到的函數。多功能集於一身的函數,很可能使函數的理解、測試、維護
等變得困難。使函數功能明確化,增加程序可讀性,亦可方便維護、測試。
規則 6
在函數的項目維護文檔中,應該指出軟體適用的硬體平台及版本。
建議 1
使用專門的初始化函數對所有的公共變數進行初始化。
5.程序正確性、效率
規則 1
嚴禁使用未經初始化的變數。引用未經初始化的變數可能會產生不可預知的後果,特別是引用未經初始化的指針經常會
導致系統崩潰,需特別注意。
規則 2
防止內存操作越界。
說明:內存操作越界是軟體系統主要錯誤之一,後果往往非常嚴重。
規則 3
注意變數的有效取值范圍,防止表達式出現上溢或下溢。
規則 4
防止易混淆的指令和操作數拼寫錯誤。
規則 5
避免函數中不必要語句,防止程序中的垃圾代碼,預留代碼應以注釋的方式出現。程序中的垃圾代碼不僅佔用額外的空
間,而且還常常影響程序的功能與性能,很可能給程序的測試、維護等造成不必要的麻煩。
規則 6
通過對系統數據結構的劃分與組織的改進,以及對程序演算法的優化來提高空間效率。這種方式是解決軟體空間效率的根
本辦法。
規則 7
循環體內工作量最小化。應仔細考慮循環體內的語句是否可以放在循環體之外,使循環體內工作量最小,從而提高程序
的時間效率。
規則 8
在多重循環中,應將最忙的循環放在最內層。
規則 9
避免循環體內含判斷語句,將與循環變數無關的判斷語句移到循環體外。目的是減少判斷次數。循環體中的判斷語句是
否可以移到循環體外,要視程序的具體情況而言,一般情況,與循環變數無關的判斷語句可以移到循環體外,而有關的
則不可以。
規則 10
中斷和恢復
中斷程序應該盡量短,應該在中斷中進行標記,在主程序中處理。但實時性很高的程序段例外。
中斷時應該保存所有涉及到的通用變數和寄存器,如 A, PSW, DPTR 等。
規則 11
堆棧設置
堆棧對於程序非常重要,對於堆棧的設置要合理。堆棧太小,在嵌套調用和容易溢出,造成系統故障;堆棧太大,浪費
RAM 資源。為了節約堆棧資源,中斷時要求不要保存太多資源,中斷嵌套和程序嵌套層數不要太多,盡量不要超過5
層。這就要求合理的劃分功能模塊。
規則 12
看門狗
看門狗電路用於在單片機死機時自動復位。單片機需要定時向看門狗發送脈沖,俗稱」喂狗」。喂狗不可太勤,這樣看門
狗沒有起到作用;也不可太慢,這樣容易造成單片機復位。正確的喂狗應該在主循環中進行,最好是建立一個獨立的系
統監控進程。不可以在定時中斷中喂狗,應為單片機有時可能會在主循環中死掉。
6.介面
規則 1
去掉沒有必要的公共變數,編程時應盡量少用公共變數。公共變數是增大模塊間耦合的原因之一,故應減少沒必要的公
共變數以降低模塊間的耦合度。應該構造僅有一個模塊或函數可以修改、創建,而其餘有關模塊或函數只訪問的公共變
量,防止多個不同模塊或函數都可以修改、創建同一公共變數的現象。
規則 2
當向公共變數傳遞數據時,要防止越界現象發生。對公共變數賦值時,若有必要應進行合法性檢查,以提高代碼的可靠
性、穩定性。
規則 3
盡量不設計多參數函數,將不使用的參數從介面中去掉,降低介面復雜度,減少函數間介面的復雜度。
規則 4
對所調用函數的返回碼要仔細、全面地處理。防止把錯誤傳遞到後面的處理流程。如有意不檢查其返回碼,應明確指明。
規則5
檢查介面函數所有輸入參數的有效性。
規則 6
檢查函數的所有非參數輸入,如外部數據、公共變數等。
7.代碼可測性
規則 1
模塊編寫應該有完善的測試方面的考慮。
規則 2
源代碼中應該設計了代碼測試的內容。
在編寫代碼之前,應預先設計好程序調試與測試的方法和手段,並設計好各種調測開關及相應測試代碼。程序的調試與
測試是軟體生存周期中很重要的一個階段,如何對軟體進行較全面、高率的測試並盡可能地找出軟體中的錯誤就成為很
關鍵的問題。因此在編寫源代碼之前,除了要有一套比較完善的測試計劃外,還應設計出一系列代碼測試手段,為單元
測試、集成測試及系統聯調提供方便。
規則 3
在同一項目組或產品組內,要有一套統一的為集成測試與系統聯調准備的調測開關及相應函數,並且要有詳細的說明。
本規則是針對項目組或產品組的。
規則 4
在同一項目組或產品組內,調測列印出的信息串的格式要有統一的形式。信息串中至少要有所在模塊名(或源文件名)
及行號。統一的調測信息格式便於集成測試。
規則 5
正式軟體產品中應把調測代碼去掉(即把有關的調測開關關掉)。
規則 6
用調測開關來切換軟體的DEBUG 版和正式版,而不要同時存在正式版本和DEBUG 版本的不同源文件,以減少維護的
難度。
規則 7
在軟體系統中設置與取消有關測試手段,不能對軟體實現的功能等產生影響。即有測試代碼的軟體和關掉測試代碼的軟
件,在功能行為上應一致。
規則 8
發現錯誤應該立即修改,並且若有必要記錄下來。
規則 9
開發人員應堅持對代碼進行徹底的測試(單元測試),而不依靠他人或測試組來發現問題。
規則 10
清理、整理或優化後的代碼要經過審查及測試。
規則 11
代碼版本升級要經過嚴格測試。
8.代碼編譯
規則 1
打開編譯器的所有告警開關對程序進行編譯。防止隱藏可能是錯誤的告警。
規則 2
某些語句經編譯後產生告警,但如果你認為它是正確的,那麼應通過某種手段去掉告警信息。照著規范系統的學習,不久的將來你也是個高手了。

Ⅱ 有哪個有監控列印機的源碼

工作原理:PrintUsage由管理站點、中央資料庫和監控服務三個模塊組成。其中監控伺服器需要安裝到每一台列印伺服器上,負責捕獲每一次列印請求記錄到中央資料庫中,並且根據設定控制列印的進行。管理站點則以Web界面提供系統配置操作和查看日誌報表,因此,在管理列印機這塊,我們可以在世界的任何一個角落來進行,僅有一個前提,即要能上Internet。

提示:在安裝管理站點模塊時,必須事先安裝IIS。

2. 安裝與設置PrintUsage

雙擊下載的安裝程序,經過幾步常規的詢問窗口並進行到「選擇組件」一步,在此窗口中安裝向導詢問要安裝哪些組件,因為現在安裝的伺服器就是列印伺服器,而且以後的列印管理操作也是在這台伺服器上進行,所以在此選擇「完全安裝」(注意:如果是多台列印伺服器,只需要在一台列印伺服器上安全安裝,而其它列印服務上只要安裝「列印監控服務」即可),再連續單擊「下一步」按鈕繼續安裝操作,當安裝程序進行到「資料庫類型及連接設置」一步時(如圖1所示),如果所有的列印機不安裝在同一台列印伺服器上,此步選擇資料庫時就要注意了,必須選擇「SQL Server7.0/2000或Oracle」等伺服器了,而不能選擇「Microsoft Access」資料庫,不過此案例幾台列印機都是安裝在同一台列印伺服器上,所以在此選擇使用最方便的「Microsoft Access」資料庫,然後單擊「下一步」按鈕,進入如圖2所示的窗口。

圖1 資料庫類型及連接設置

在圖2所示的窗口中要根據當前的網路情況進行選擇:

圖2 認證方式

如果你的網路中使用了域,那應該選擇「按用戶認證」項,然後設置本域中的用戶或計算機,如果你的網路中沒有使用域,那就選擇「按計算機認證」。本案例中的網路沒有使用域機制,在此選擇「按計算機認證」選項,然後設置工作組等參數,再單擊「下一步」按鈕,並設置了允許的計算機和相應的列印機,再單擊「下一步」按鈕,進入列印機管理的默認模式設置窗口(如圖3),設置好後系統就會以此默認值進行工作了。

圖3 設置監控模式

選擇「高級控制模式」,然後在「高級控制模式」框中設置「每張紙的成本為0.1元,每個用戶配額10元錢(也就是每個用戶可以列印100張紙),並將「配額周期類型」設置為「周」,這樣默認情況下,每個用戶每周最多隻能列印100張紙了,當然你在安裝時要根據你的實際情況設置此處的數值了。後面安裝步驟中只要全部「下一步」或「是」即可完成程序的安裝了,不過有一步需要設置管理賬戶,默認的管理賬戶名為「admin」,為了安全起見,我們給該管理賬戶設置了一個密碼。程序安裝完畢後會自動啟動列印監控模塊並縮小至任務欄的托盤區,針對這個列印監控模塊無需要再進行設置,一切按其默認設置即可。

二、管理列印機

1. 進入管理界面

打開IE瀏覽器,然後輸入「http://localhost/PrintUsage/Default.asp」打開管理主界面,在此頁面右側的登錄框中輸入「用戶名」為「admin」及先前在安裝步驟中設置的密碼即可登錄管理界面(如圖4所示)。

圖4 管理界面

2. 監控列印

採用本套系統的主要目的就是監控列印機的列印情況,監控模式設置當然是最重要的一個環節了。

第一步:單擊「設置→監控模式」,然後在右側窗口中選擇「監視,並作高級控制」項。同時在此頁面中還可以進行其它兩種監控模式,為了精確實現監控目的,所以在此只選擇了第三個選項。

第二步:單擊「用戶組→所有用戶」,並在右側窗口中一一對每個用戶進行以下步驟的設置,單擊「用戶名」下面顯示的用戶,在切換的頁面中:

列印機設置

點擊「列印機」,在切換到的頁面中,左邊的列表窗口中是受限列印機(也就是該列印機不授權給該用戶),而右側列表窗口中的則是授權列印機。我們可根據列印機的類型和員工列印的實際需要情況進行一番最合適的配置,配置完畢後,單擊「保存配置」按鈕保存設置即可。這樣,那些被配置了只能列印文檔的針式列印機的員工就無法使用噴墨列印機了。

說明:因為公司有激光列印機、噴墨列印機及針式列印機,而不同的員工所需要的列印機類型也不同,比如只需要列印一些文檔的員工,分配針式列印機給他就行了,沒必要分配使用價格昂貴的噴墨列印機。

監控時間設置

此項是設置系統開始監控的時間,為了防止他人列印而不惜「加班加點」,我們可將監控時間設置為「全日制」了,讓系統每天24小時進行監控,設置方法很簡單:單擊「監控時間」項,然後選擇「監控」選項,最後單擊「保存設置」即可。

文件類型設置

文件類型設置項是限制某些用戶「亂打」現象的一個有效手段。例如,員工A只負責文檔列印,而他根本就不需要進行高浪費模式的圖片列印,此時,就可以給員工A分配列印的文件類型為「.txt」(記事本文檔)或「.doc」(Word文檔)。設置方法很簡單:單擊「文件類型」項,然後在切換到的頁面中選擇「允許所有文件類型」項,再將右側列表窗口中的其它不讓員工A列印的文件類型通過「添加」按鈕轉到左側窗口中進行保護即可。另外,下面還可以設置列印某個文件時,文件大小不能超過多少KB、列印的頁數不超過多少頁等,花點時間根據每個員工的實際情況進行了精確的設置,最後單擊「保存設置」按鈕完成此項設置。

用戶配額設置

「配額設置」也是件比較重要的設置,在安裝程序時默認給每個用戶都分配了10元錢的配額,這個分配方案有點欠妥,所以下面調整一下。

單擊「用戶配置」項,然後在「配額設置」項下面設置配額數量、配額周期,另外,根據實際情況還設置了該員工是否可以透支,並設置了最大透支值,設置完畢後同樣單擊「保存配置」按鈕將設置保存起來了。

對每個用戶都進行了上面的幾步設置,最後進行一下全局瀏覽,看看有沒有設置不妥之處,確保無誤後,退出管理界面。

三、分析和總結

一段時間之後,我們來檢查一下列印情況,單擊頁面左側部分的「報表」項在此可以方便地查看分析結果(如圖5)。

圖5 查看分析結果

1. 排名統計:此項分析結果可以清楚地看到這些天員工們列印數量的多少,列印任務的多少,列印機工作量的多少等,並且以圖表的方式直觀地顯示出了等級。

2. 匯兌統計:此項可以進行匯總分析、統計並且以表格的方式清晰的表現出分析結果,讓你一目瞭然。

3. 費用分析:此項是分析這段時間的列印費用情況,可以分別以「列印單價」和「列印費用統計」兩種形式給出費用分析結果。

4. 任務分析:此項可以幫助你分析出「文件類型列印統計」(這段時間列印了哪些文件,圖片、文檔還是其它)、「列印的頁面數統計」(分析這段時間一共列印了多少頁等)、「紙張大小統計」、「列印色彩分析」及「列印方式統計」等。

通過上面的四大分析功能,我們對列印機的使用情況掌握得清清楚楚:誰列印了文檔、列印了什麼文檔、列印了多少頁、使用哪台列印機等。掌握了這些資料,進而分析列印機使用情況,對公司控制辦公列印成本大有好處。

這個是不是我也不知道你看看吧,http://newasp.net/Code/softdown.asp?softid=2044

Ⅲ 網路公司如何防止員工離職造成源碼泄露

簽保密協議後可以對員工有一定的心理作用,但實際員工拷走源碼公司也很難找到證據。
可以使用技術手段對公司的源碼進行加密,但完全不影響編譯調試和運行,源碼在創建時就加密,之後全程加密,只有在公司的電腦上才能調試運行發布,在公司以外的電腦上編譯器打開源碼都是亂碼,我司的防泄密系統具有強制加密,透明解密特性,非常適合源碼的防泄露。

Ⅳ 怎麼排查這些內存泄漏

最原始的內存泄露測試
重復多次操作關鍵的可疑的路徑,從內存監控工具中觀察內存曲線,是否存在不斷上升的趨勢且不會在程序返回時明顯回落。
這種方式可以發現最基本,也是最明顯的內存泄露問題,對用戶價值最大,操作難度小,性價比極高。
MAT內存分析工具
2.1 MAT分析heap的總內存佔用大小來初步判斷是否存在泄露
在Devices 中,點擊要監控的程序。
點擊Devices視圖界面中最上方一排圖標中的「Update Heap」
點擊Heap視圖
點擊Heap視圖中的「Cause GC」按鈕
到此為止需檢測的進程就可以被監視。Heap視圖中部有一個Type叫做data object,即數據對象,也就是我們的程序中大量存在的類類型的對象。在data object一行中有一列是「Total Size」,其值就是當前進程中所有Java數據對象的內存總量,一般情況下,這個值的大小決定了是否會有內存泄漏。可以這樣判斷:
進入某應用,不斷的操作該應用,同時注意觀察data object的Total Size值,正常情況下Total Size值都會穩定在一個有限的范圍內,也就是說由於程序中的的代碼良好,沒有造成對象不被垃圾回收的情況。
所以說雖然我們不斷的操作會不斷的生成很多對象,而在虛擬機不斷的進行GC的過程中,這些對象都被回收了,內存佔用量會會落到一個穩定的水平;反之如果代碼中存在沒有釋放對象引用的情況,則data object的Total Size值在每次GC後不會有明顯的回落。隨著操作次數的增多Total Size的值會越來越大,直到到達一個上限後導致進程被殺掉。
2.2 MAT分析hprof來定位內存泄露的原因所在。
這是出現內存泄露後使用MAT進行問題定位的有效手段。
A)Dump出內存泄露當時的內存鏡像hprof,分析懷疑泄露的類:

B)分析持有此類對象引用的外部對象

C)分析這些持有引用的對象的GC路徑

D)逐個分析每個對象的GC路徑是否正常

從這個路徑可以看出是一個antiRadiationUtil工具類對象持有了MainActivity的引用導致MainActivity無法釋放。此時就要進入代碼分析此時antiRadiationUtil的引用持有是否合理(如果antiRadiationUtil持有了MainActivity的context導致節目退出後MainActivity無法銷毀,那一般都屬於內存泄露了)。
2.3 MAT對比操作前後的hprof來定位內存泄露的根因所在。
為查找內存泄漏,通常需要兩個 Dump結果作對比,打開 Navigator History面板,將兩個表的 Histogram結果都添加到 Compare Basket中去
A) 第一個HPROF 文件(usingFile > Open Heap Dump ).
B)打開Histogram view.
C)在NavigationHistory view里 (如果看不到就從Window >show view>MAT- Navigation History ), 右擊histogram然後選擇Add to Compare Basket .

D)打開第二個HPROF 文件然後重做步驟2和3.
E)切換到Compare Basket view, 然後點擊Compare the Results (視圖右上角的紅色」!」圖標)。

F)分析對比結果

可以看出兩個hprof的數據對象對比結果。
通過這種方式可以快速定位到操作前後所持有的對象增量,從而進一步定位出當前操作導致內存泄露的具體原因是泄露了什麼數據對象。
注意:
如果是用 MAT Eclipse 插件獲取的 Dump文件,不需要經過轉換則可在MAT中打開,Adt會自動進行轉換。
而手機SDk Dump 出的文件要經過轉換才能被 MAT識別,Android SDK提供了這個工具 hprof-conv (位於 sdk/tools下)
首先,要通過控制台進入到你的 android sdk tools 目錄下執行以下命令:
./hprof-conv xxx-a.hprof xxx-b.hprof
例如 hprof-conv input.hprof out.hprof
此時才能將out.hprof放在eclipse的MAT中打開。
手機管家內存泄露每日監控方案
目前手機管家的內存泄露每日監控會自動運行並輸出是否存在疑似泄露的報告郵件,不論泄露對象的大小。這其中涉及的核心技術主要是AspectJ,MLD自研工具(原理是虛引用)和UIAutomator。
3.1 AspectJ插樁監控代碼
手機管家目前使用一個ant腳本加入MLD的監控代碼,並通過AspectJ的語法實現插樁。
使用AspectJ的原因是可以靈活分離出項目源碼與監控代碼,通過不同的編譯腳本打包出不同用途的安裝測試包:如果測試包是經過Aspect插樁了MLD監控代碼的話,那麼運行完畢後會輸出指定格式的日誌文件,作為後續分析工作的數據基礎。
3.2 MLD實現監控核心邏輯
這是手機管家內的一個工具工程,正式打包不會打入,BVT等每日監控測試包可以打入。打入後可以通過諸如addObject介面(通過反射去檢查是否含有該工具並調用)來加入需要監控的檢測對象,這個工具會自動在指定時機(如退出管家)去檢測該對象是否發生泄漏。
這個內存泄露檢測的基本原理是:
虛引用主要用來跟蹤對象被垃圾回收器回收的活動。虛引用必須和引用隊列(ReferenceQueue)聯合使用(在虛引用函數就必須關聯指定)。當垃圾回收器准備回收一個對象時,如果發現它還有虛引用,就會在回收對象的內存之前,自動把這個虛引用加入到與之關聯的引用隊列中。程序可以通過判斷引用隊列中是否已經加入了虛引用,來了解被引用的對象是否將要被垃圾回收。
基於以上原理,MLD工具在調用介面addObject加入監控類型時,會為該類型對象增加一個虛引用,注意虛引用並不會影響該對象被正常回收。因此可以在ReferenceQueue引用隊列中統計未被回收的監控對象是否超過指定閥值。
利用PhantomReferences(虛引用)和ReferenceQueue(引用隊列),當PhantomReferences被加入到相關聯的ReferenceQueue時,則視該對象已經或處於垃圾回收器回收階段了。

MLD監控原理核心
目前手機管家已對大部分類完成內存泄露的監控,包括各種activity,service和view頁面等,務求在技術上能帶給用戶最順滑的產品體驗。
接下來簡單介紹下這個工具的判斷核心。根據虛引用監控到的內存狀態,需要通過多種策略來判斷是否存在內存泄露。
(1)最簡單的方式就是直接在加入監控時就為該類型設定最大存在個數,舉個例子,各個DAO對象理論上只能存在最多一個,因此一旦出現兩個相同的DAO,那一般都是泄露了;
(2)第二種情況是在頁面退出程序退出時,檢索gc後無法釋放的對象列表,這些對象類型也會成為內存泄露的懷疑對象;
(3)最後一種情況比較復雜,基本原理是根據歷史操作判斷對象數量的增長幅度。根據對象的增長通過最小二乘法擬合出該對象類型的增長速度,如果超過經驗值則會列入疑似泄露的對象列表。
3.3 UIAutomator完成重復操作的自動化
最後一步就很簡單了。這么多反復的UI操作,讓人工來點就太浪費人力了。我們使用UIAutomator來進行自動化操作測試。
目前手機管家的每日自動化測試已覆蓋各個功能的主路徑,並通過配置文件的方式來靈活驅動用例的增刪改查,最大限度保證了隨著版本推移用例的復用價值。
至此手機管家的內存泄露測試方案介紹完畢,也歡迎各路牛人交流溝通更多更強的內存泄露工具盒方案!
騰訊Bugly簡介
Bugly是騰訊內部產品質量監控平台的外發版本,其主要功能是App發布以後,對用戶側發生的Crash以及卡頓現象進行監控並上報,讓開發同學可以第一時間了解到App的質量情況,及時機型修改。目前騰訊內部所有的產品,均在使用其進行線上產品的崩潰監控。

Ⅳ 如何有效的預防互聯網公司的源代碼泄露

1、入職員工簽署保密協議,源文件的操作規范要做好
2、可以用虛擬桌面,這樣可以減少一部分泄密風險
3、最好是部署成熟的防泄密軟體,從代碼加密、行為審計、許可權控制三個舉措來保護企業源代碼
推薦下IP-guard
IP-guard擁有基於驅動層的透明加密功能,還可以審計大部分的泄密渠道,基於透明加密、行為審計、許可權控制的三重保護措施,能為企業構建完善的防泄密體系。
IP-guard於2001年推出,推出18多年為超過全球20,000家知名企業提供過防泄密解決方案
除了能自動加密保護各種源代碼,還能禁止外來的移動存儲設備接入企業內網,對源代碼的操作行為可以被詳細監控,一旦發生泄密行為能立刻查找泄密源。

Ⅵ 欲使用串口監視器,需在代碼中配置什麼

調試器
20行代碼實現(UartLogger)串口監控記錄器

shine_blink
原創
關注
1點贊·851人閱讀
文章目錄
前言
一、UartLogger功能介紹
二、完整源代碼
三、實驗結果
四、更多花樣
前言
shineblink core 開發板(簡稱Core)的庫函數支持Uart功能,所以只需要調用兩個API,即可實現Uart通信。

PS:Core 僅用五、六行代碼即可實現Wifi/Ble/NB/Lora/ThreadMesh/RFID/Eth/Usb/RS485/RS232通信、以及30多種感測器/10多種硬體外設/10多種Mcu內設功能,並且這些功能最多可以 5 種隨機組合同時運行。更多關於Core的內容可以在 shineblink.com 上了解。

一、UartLogger功能介紹
我們在開發過程中,有時需要一個第三方的硬體工具(UartLogger)來監控串口Tx、Rx的具體通信內容,這時我們用Core就可以很容易實現這一目的。並且Core可以將監控到的Tx、Rx通信內容以各種形式輸出或存儲在Core的TF卡上。

下圖舉了一個典型的例子來詮釋UartLogger的作用:

利用UartLogger我們就可以在開發ESP8266串口WIFI模塊時,捕捉到MCU和ESP8266通信的具體內容。其他類似的場景只要是Uart介面,UartLogger都可以發揮其作用。

二、完整源代碼
注意:本例中假設被監控的Uart口波特率是115200,實際波特率需要您自己調整。

--配置Core的USB介面作為虛擬串口連接電腦,列印輸出UartLogger捕捉到的內容
--當然,您也可以配置成藍牙輸出,WIFI輸出,看您心情了
LIB_UsbConfig("CDC_PD")
LIB_GpioOutputConfig("D8","STANDARD")
LIB_GpioOutputConfig("D9","STANDARD")
LIB_Uart0Config("BAUDRATE_115200")
LIB_Uart1Config("BAUDRATE_115200")
prefix0 = {13, 10, 82, 88, 48, 58, 13, 10} --"\r\nRX0:\r\n"
prefix1 = {13, 10, 82, 88, 49, 58, 13, 10} --"\r\nRX1:\r\n"
--開始大循環
while(GC(1) == true)
do
recv_flag0,recv_tab0 = LIB_Uart0Recv()
if recv_flag0 == 1 then
LIB_GpioToggle("D8") --LED1 Toggle
LIB_UsbCdcSend(prefix0)
LIB_UsbCdcSend(recv_tab0)--在串口終端上顯示RX0引腳捕捉到的內容
end

recv_flag1,recv_tab1 = LIB_Uart1Recv()
if recv_flag1 == 1 then
LIB_GpioToggle("D9") --LED2 toggle
LIB_UsbCdcSend(prefix1)
LIB_UsbCdcSend(recv_tab1)--在串口終端上顯示RX1引腳捕捉到的內容
end
end
登錄後復制

三、實驗結果
本實驗中,我們捕捉和ESP8266串口WIFI模塊的通信內容,並列印輸出到終端軟體上,下圖為捕捉到的具體內容:

四、更多花樣
將監控到的Tx、Rx通信內容存儲在TF卡這一功能在找問題時非常方便,我們不用一直守著設備,而是在某個時間取出TF卡查看內容即可。

具體實現很簡單,只需要將上面常式中的LIB_UsbCdcSend()函數換成LIB_Fwrite()即可,例如:

原代碼

LIB_UsbCdcSend(prefix0)
LIB_UsbCdcSend(recv_tab0)--在串口終端上顯示RX0引腳捕捉到的內容

LIB_UsbCdcSend(prefix1)
LIB_UsbCdcSend(recv_tab1)--在串口終端上顯示RX1引腳捕捉到的內容
登錄後復制
替換後的代碼:

LIB_Fwrite("abc.txt", prefix0)
LIB_Fwrite("abc.txt", recv_tab0)--將RX0引腳捕捉到的內容存到TF卡上abc.txt文件中

LIB_Fwrite("abc.txt", prefix1)
LIB_Fwrite("abc.txt", recv_tab1)--將RX1引腳捕捉到的內容存到TF卡上abc.txt文件中
登錄後復制
uart
syslog
mcu
單片機
調試器
平板電腦一般多少錢
精選推薦
廣告

tty-logger-chrome:TTY UART記錄器作為Chrome應用程序
0下載·0評論
2021年5月23日
行車記錄儀USB
5431閱讀·0評論·1點贊
2016年3月11日
UART Log
1475閱讀·0評論·2點贊
2020年4月7日
【防扯皮】串口數據監聽
4246閱讀·1評論·0點贊
2021年9月26日
USBee Suite抓I2C; USBee示波器; USBee Suite抓上電時序; USBee Suite抓取UART; USBee Suite抓取SPI; 數據記錄儀
1.5W閱讀·0評論·1點贊
2010年11月10日
串口監視的源程序代碼(C++)
741閱讀·3評論·1點贊
2008年10月7日
想賺錢請記住!財商思維不可少!因你永遠掙不到你認知范圍以外的錢

00:47
12元學財商
廣告
二次開發源碼:串口監視(不佔用串口).zip
20下載·0評論
2020年6月17日
ComSpy串口監視精靈 v1.2 中文綠色版_串口_
9下載·0評論
2021年10月1日
串口監控CommMonitor
62下載·4評論
2013年10月22日
串口監聽工具的源代碼
327下載·13評論
2014年11月1日
【經驗分享】一個實用的C語言宏定義技巧寫法
483閱讀·1評論·1點贊
2022年6月30日
嵌入式基礎--日誌模塊
792閱讀·5評論·1點贊
2021年7月25日
ov7670 linux源碼,攝像頭二值化 STM32 ov7670源碼
238閱讀·0評論·0點贊
2021年5月15日
易語言 串口控制 源碼 串口控制寫好了 ,就可以輕松地控制電力儀表 信號採集 單片機等 信號
574閱讀·0評論·0點贊
2022年7月29日
串口記錄儀,附有原理設計
14下載·0評論
2020年4月28日
串口監聽(包含實例代碼與講解)
74下載·5評論
2010年5月21日
OpenLog 是一款開源數據記錄器,可通過簡單的串列連接工作,並支持高達 64GB 的 microSD_C++_代碼_下載
0下載·0評論
2022年7月4日
去首頁
看看更多熱門內容

熱點內容
安卓通知欄怎麼顯示秒錶 發布:2025-01-25 01:32:47 瀏覽:757
apk反編譯入門 發布:2025-01-25 01:26:43 瀏覽:472
英雄聯盟在哪投訴腳本 發布:2025-01-25 01:26:43 瀏覽:314
php在線統計 發布:2025-01-25 01:26:42 瀏覽:65
手機加密室 發布:2025-01-25 01:25:57 瀏覽:219
搭建excel伺服器 發布:2025-01-25 01:25:19 瀏覽:1000
雙系統win7和linux 發布:2025-01-25 01:25:19 瀏覽:606
為什麼蘋果手機攝像比安卓好 發布:2025-01-25 01:06:48 瀏覽:787
linux查看系統多少位 發布:2025-01-25 01:04:31 瀏覽:121
雲伺服器體驗香港虛擬主機空間 發布:2025-01-25 00:51:19 瀏覽:812