kbmmw 4.82 最大的新特性就是增加了 日誌管理器。
新的日誌管理器實現了不同型別的日誌、斷言、異常處理、計時等功能。
首先。引用kbmmwlog.pas 單元後,系統就預設生成乙個ikbmmwlog 例項:
log:ikbmmwlog;
log 預設使用對應作業系統的日誌功能。 為了能儲存到硬碟上方便大家檢視,可以使用本地檔案方式,先設定一下日誌及審計檔案路徑及屬性
filelogmgr:=tkbmmwlocalfilelogmanager.create('.\log.txt
','.\audit.txt
'); // 同時生成兩個檔案,乙個是日誌檔案,乙個審計檔案
filelogmgr.deleteoldlog:=true; // 刪除老的日誌檔案
filelogmgr.deleteoldaudit:=true; // 刪除老的審計檔案
filelogmgr.flushinterval:=0
; // 寫檔案時間間隔,0 為立即寫檔案
log.logmanager:=filelogmgr; // 設定log 的管理器為上面檔案管理器
現在開發人員就可以做一些常規的日誌記錄。
log.info('this is some info
'); // 記錄資訊
log.warn(
'this is a warning
'); // 記錄警告
log.error(
'this is an error
'); // 記錄錯誤
log.fatal(
'this went very bad: %d/%s
',[10,'
']); // 已經致命了
log.logstack(tkbmmwlogtype.mwltinfo,tkbmmwloglevel.mwllnormal,
'we got a stack dump
'); //沒救了,只能解剖屍體了
以上**輸出結果為
2015-06-01t10:34:24.304+08:00 : info : 10572/10632 : this issome info
2015-06-01t10:34:24.307+08:00 : warning : 10572/10632 : this is
a warning
2015-06-01t10:34:24.308+08:00 : error : 10572/10632 : this is
an error
2015-06-01t10:34:24.308+08:00 : info : 10572/10632
: we got a stack dump
address
<650d5c>unknown
address
<527fc5>unknown
address
<52c5fe>unknown
address
<53ee29>unknown
address
<52c764>unknown
address
<52c5fe>unknown
address
<5c3f29>unknown
address
<52bc1b>unknown
address
<4c299a>unknown
address
<52c70f>unknown
address
<52c5fe>unknown
address
<53ee29>unknown
address
<4c299a>unknown
address
<5cd3f0> unknown
有時,我們為了了解伺服器上某一項業務的執行時間,這裡就可以使用log 的計時功能。
那麼就可以使用時間點。 下面開啟乙個時間點,為了避免記憶體洩漏,應該開配對,即:開啟與結束配對使用。
log.timestart('a');
//找點事幹吧
for i:=1
to1000
dok:=i;
//再休息一會兒吧
sleep(500
); log.timelapse('a
','time lapse
'); //
看看用了多長時間
//再幹一會兒吧
for i:=1
to1000
dok:=i;
//再休息一會兒吧
sleep(500
); log.timeend('a
','time taken
'); //
結束計時,看看用了多長時間
以上**輸出結果
2015-06-01t15:49:22.018+08:00 : debug : 11736/7316 : time lapse : 500ms (a)
2015-06-01t15:49:22.521+08:00 : debug : 11736/7316 : time taken : 1003 ms (a)
乙個程式裡面可以同時使用很多個計時器,以方便跟蹤不同的業務。
最後就是異常處理了。其實就是kbmmw hook delphi 的異常處理。這樣就可以在delphi 的異常處理前,進行
一些日誌操作了。為了達到這一點,首先需要 在kbmmwconfig.inc 裡面定義
for i:=5downto0do
begin
j:=10
divi; // 這個小學問題,就讓kbmmw 自動處理吧
end;
輸出結果
2015-06-01t16:13:14.847+08:00 : error : 10184/14536: edivbyzero
division by zero
address (hex):
00000000
address
<429a26>unknown
address
<65031e>unknown
address
<408b29>unknown
address
<527fc5>unknown
address
<52c5fe>unknown
address
<53ee29>unknown
address
<52c764>unknown
address
<52c5fe>unknown
address
<5c3f29>unknown
address
<52bc1b>unknown
address
<4c299a>unknown
address
<52c70f>unknown
address
<52c5fe>unknown
address
<53ee29>unknown
address
<4c299a>unknown
address
<5cd3f0> unknown
當然了,對於這種錯誤,都還是可以比較方便的捕獲的。
對於象堆疊溢位的這些嚴重問題來說,發生後是無法預料結果的,唯一可以說的是,delphi 處理時需要使用堆疊空間,
因此幾乎無法工作,而kbmmw 好一點,盡可能的去捕獲錯誤,至於達到什麼效果呢,只能看你的人品了:)
想試試自己的人品嗎? 可以試一下下面的**。
proceduretform1.button9click(sender: tobject);
procedure
stackloop;
begin
stackloop;
end;begin
stackloop; // 是誰寫的這個**?
end;
布局管理器 網格袋布局管理器
網格袋布局管理器中的約束條件constrains中有如下字段需要設定 1 constrains.gridx和constrains.gridy 這兩個欄位僅用於指定元件的起始網格座標。2 constrains.gridwidth和constrains.gridheight 這兩個字段用於指定元件所佔網...
儲存管理器
cpu配置儲存管理器 cpu讀操作發命令給儲存管理器,儲存管理器根據配置讀取資料 nand flash啟動方式,開機片內sram拷貝nand flash前4k執行,在這4k的程式裡需要完成sram sdram跳轉 s3c2440有8個bank,即8個片選訊號,直連可以接8個記憶體類外設 sdram,...
布局管理器
jframe 內容面板在預設的情況下自動使用邊界布局管理器。1.邊界布局 borderlayout 所謂的borderlayout 就是把邊界劃分為東西南北中,南北要貫通,中間最大,不僅指地方最大,也指權利最大,當東西南北不存在時可占領他們,也就是說中間是可以占領周邊的,但周邊是絕不能占領中間的。邊...