星期二, 4月 24, 2007
星期一, 4月 23, 2007
星期三, 4月 18, 2007
在DOS Batch File中傳遞任意個數參數
- %0代表目前這個批次檔名
- 傳統上只有%1 ~ %9共九個參數可供使用,NT4之後新增了%*,用來代表包含%1之後的所有參數。
- 參考:http://www.robvanderwoude.com/parameters.html
星期二, 4月 17, 2007
以C#撰寫的Scott Hanselman Tiny OS
看來是個學習OS以及增強C#功力的好東西
- Blog: http://www.hanselman.com/blog/RescuingTheTinyOSInC.aspx
- Tiny OS in C#
- Tiny OS in VB.NET
- PPT Slides on the Tiny OS presented at TechEd Malaysia 20
星期日, 4月 15, 2007
在Visual C++使用內建功能偵測memory leak
對於非MFC的程式碼
MFC程式碼
- 啟動偵測memory leak :
在任何一個檔案中,如下定義_CRTDBG_MAP_ALLOC並同時引入兩個header
#define _CRTDBG_MAP_ALLOC
#include
#include
在程式最後呼叫 _CrtDumpMemoryLeaks();
或在程式一開頭呼叫 _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); - 只要發現memory leak,就算發生leak的原始碼檔案中沒有引入前述header,還是會傾印出該leak訊息
- 似乎只有使用malloc所造成的memory leak才會得到完整的錯誤訊息,如:
c:\temp\testmemoryleakdetection\testmemoryleakdetection.cpp(16) : {106} normal block at 0x003A9FB0, 2 bytes long.
Data: < > CD CD - 在無引入前述header的檔案中發生因new而導致的memory leak,其錯誤訊息如下:
c:\program files\microsoft visual studio 8\vc\include\crtdbg.h(1147) : {107} normal block at 0x003A3450, 4 bytes long.
Data: < > CD CD CD CD - 在無引入前述header的檔案中發生因malloc而導致的memory leak,其錯誤訊息如下:
{107} normal block at 0x003A3450, 2 bytes long.
Data: < > CD CD - 在有引入前述header的檔案中發生因new而導致的memory leak,其錯誤訊息如下:
c:\program files\microsoft visual studio 8\vc\include\crtdbg.h(1147) : {106} normal block at 0x003A9FB0, 4 bytes long.
Data: < > CD CD CD CD
這樣的訊息似乎沒有什麼作用,因為並沒有明確指出究竟是哪一部份的程式碼造成這個leak。也許有其他方法可以讓用new的錯誤也能產生完整的訊息。
MFC程式碼
- MFC程式碼似乎不需做任何設定,自動就有在debug模式下偵測memory leak的功能。可以產生如下的錯誤訊息:
{126} normal block at 0x003AE548, 4 bytes long.
Data: < > CD CD CD CD - 如果要產生完整的錯誤訊息,必須要在檔案前面加上
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
c:\temp\testmfcmemoryleak\testmfcmemoryleak.cpp(29) : {126} normal block at 0x003AE548, 4 bytes long.
Data: < > CD CD CD CD
訂閱:
意見 (Atom)