3GL   4GL   5GL  

- DCRT

  1. DCRT
  2. DCRT-
  3. CRT-
  4. MemDumperValidator
  5. MemDumperValidator C++
  6. MemDumperValidator
  7. MemDumperValidator
  8. C++
  9. ?
  10. MemStress.
  11. ""

, , . , . , , . ++-, . - ( DCRT) Microsoft.

Visual Basic , Visual Basic . Java (JVM garbage collector), , Java . , , , Java- , , .

C++ . . , - ( CRT) , Microsoft Visual C++ 4, CRT (DCRT).

DCRT Debug Run-Time library. .

, C++, , , DCRT . "" , . , , , DCRT. DCRT : MemDumperValidator MemStress, .

 

DCRT

DCRT- , (heap). , /++-, new, maiioc calloc. (underwrites), , (overwrites), . ( ). , MFC, , , DCRT, MFC .

Overwrite . (program writes past the end of block memory), : , , -, .

DCRT ( __RPTn RPTFn, ). DCRT 3, , . , DCRT , , . SUPERASSERT, BUGSLAYERUTIL.DLL.

DCRT- . . 15.1 , DCRT-. CRT Microsoft Visual Studio ( ), CRT DCRT ..\Microsoft Visual Studio\VC98\CRT\SRC.

15.1. DCRT-.

DBGDEL.CPP

delete

DBGHEAP.C

DBGHOOK.C

DBGINT.H

DBGNEW.CPP

new

DBGRPT.C

CRTDBG.H

, , DCRT-. \lnclude

DCRT-

DCRT- , . #inciude ( ) :

#define _CRTDBG_MAP_ALLOC

CRTDBG.H. _CRTDBG_MAP_ALLOC , .

DCRT- . , DCRT- . , , . (release build, ), (debug build) ! . , , , . _CrtsetDbgFiag , . 15.2. DCRT, .

#inciude #define _crtsetDbgFlag DCRT, . , , .

DCRT _CrtcheckMemory. , - , . - DCRT !

. _CrtIsValidHeapPointer, _CrtIsMemoryBlock _crtisVaiidPointer . _crtcheckMemory .

15.2. DCRT

_CRTDBG_ALLOC_MEM_DF

. ,

_CRTDBG_CHECK_ALWAYS_DF

(). ,

_CRTDBG_CHECK_CRT_DF

CRT . CRT , CRT-. , ,

CRTDBG_DELAY_FREE_MEM_DF

. OxDD, , , .

 

(.)

, . , OxDD DCRT , . , , ,

_CRTDBG_LEAK_CHECK_DF

.

DCRT   _CrtMemCheckpoint, _CrtMemDifference _CrtMemDumpStatistics. , . , ( ) CRT-, , , .

DCRT , . TRUE, . FALSE, , . , , ( ). MemStress ( BUGSLAYERUTIL.DLL). , , DCRT- ( ).

, DCRT (. . , ). , "" . , (. . ), ( , , , ), . MFC Dump, , cobject. ( ) MFC, , .

, , . . , MemDumperVaiidator BUGSLAYERUTIL.DLL, , . ( underwrites overwrites). , , , , .

 

CRT-

CRT- Windows , , . , : (DCRT) (CRT). , (DLL).

CRT- . --, . , DLL . , , . CRT . DLL CRT-, ( DLL, CRT- ).

DLL- CRT MSVCRT(D).DLL . DLL , , , , .

DLL- CRT, DLL , . DLL- , DLL, DLL.

CRT-, , . DLL, CRT-, , , . DLL, , CRT, , DLL, , . , , . . CRT-, , , .

DLL- CRT . . , , , CRT-, , .

BUGSLAYERUTIL.DLL DLL- CRT. , BUGSLAYERUTIL.DLL DCRT-: MemDumperValidator MemStress, . , DLL- . , , DLL-, MEMDUMPERVALIDATOR.CPP, MEMDUMPERVALIDATOR.H, MEMSTRESS.CPP, MEMSTRESSCONSTANTS.H MEMSTRESS.H, .

BUGSLAYERUTIL.DLL. , . , MemDumperValidator DCRT--, _CRTDBG_CHECK_ALWAYS_DF. , , , DCRT- . , . , . _CRTDBG_CHECK _ALWAYS_DF ( _GrtsetDbgFiag). , ,

.

MemDumperValidator

MemDumperValidator DCRT- . DCRT- , ( underwrites overwrites) . , , , , :

Detected memory leaks

Dumping objects ->

:\vc\INCLUDE\crtdbg.h(552) : (596} normal block at Ox008CD5BO,

24 bytes long.

Data: < k w k > 90 6B 8C 00 BO DD 8C 00 00 00 80 77 90 6 8 00

 Object dump complete.

, , , . ( ). , MemDumperValidator, . , .

MemDumperValidator DCRT-, , - . , DCRT, , . 15.3. DCRT: _nh_maiioc_ dbg (new), _malloc_dbg (malloc), _calloc_dbg (calloc) _realloc_dbg (realloc).

15.3.

 

_NORMAL_BLOCK

(new, malloc calloc) .

#define _CRTDBG_MAP_ALLOC

, ,

_CRT_BLOCK

, , CRT-, (, ). , . ,

CLIENT BLOCK

, , , CLIENT BLOCK VALUE (. heap alloc dbg #define). , 1 6- 16 , :

#define CLIENT_BLOCK_VALUE(x) \

 (_CLIENT_BLOCK | (x«16) )

 heap alloc dbg ( 10, 

 CLIENT BLOCK VALUE ( OxA) , 

_ FILE _ ,

 _ LINE _ ) ;

(. . , ) - ( CrtSetDumpClient). - , DCRT- -

(.)

. , (__CrtDoForAlldientObjects), , . MFC cobject. MemDumperValidator

FREE BLOCK

. CrtSetDbgFlag CRTDBG DELAY FREE MEM DF, , OxDD

IGNORE BLOCK

DCRT-, , , Ignore

MemDumperValidator : ( C++) ( ), DCR- MemDumperValidator , . -, . , . , DCRT- , .

MemDumperValidator , . 15.1 MEMDUMPERVALIDATOR.H, . BUGSLAYERUTIL.H, MEMDUMPERVALIDATOR.H.

15-1, JWEMDUMPERVAL1DATOR.H 

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - -

"Debugging Applications" (Microsoft Press)

Copyright () 1997-2000 John Robbins All rights reserved. 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

 #ifndef _MEMDUMPERVALIDATOR_H

#define _MEMDUMPERVALIDATOR_H

//He ; BUGSLAYER.H

#ifndef _BUGSLAYERUTIL_H

#error "Include BUGSLAYERUTIL.H instead of this file directly!"

#endif // _BUGSLAYERUTIL_H

// CRTDBG.H.

#include "MSJDBG.h"

#ifdef _cplusplus

extern "C" {

#endif // _ _cplusplus

// .

#ifdef _DEBUG

/////////////////////////////////////////////////////////////

// typedef

////////////////////////////////////////////////////////////////

// . -

// .

// , ,

// , ,

// DCRT-.

typedef void (*PFNMEMDUMPER)(const void *);

// (validating function).

// ,

// ,

// , ValidateAllBlocks function.

typedef void (*PFNMEMVALIDATOR)(const void *, const void *);

////////////////////////////////////////////////////////////////

//

////////////////////////////////////////////////////////////////

// , Client-.

//

// dwValue DVINFO (. ).

tdefine CLIENT_BLOCK_VALUE(x) (_CLIENT_BLOCK|(x«16))

//

Idefine CLIENT_BLOCK_SUBTYPE() (( » 16) & 0xFFFF)

/////////////////////////////////////////////////////////////

// ,

// Client-

////////////////////////////////////////////////////////////

typedef struct tag_DVINFO

{

// Client-.  

// . 

// CLIENT_BLOCK_VALUE. ,  

// , . AddClientDV.

unsigned long dwValue ; 

//  

PFNMEMDUMPER pfnDump

//  

PFNMEMVALIDATOR pfnValidate; 

} DVINFO, * LPDVINFO;

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

: AddClientDV 

:

 Client-. dwValue DVINFO , 

.

  _malloc_dbg

  Client-.

 CLIENT_BLOCK__VALUE, ,

  _malloc_dbg.

, .

  ?

  ,

  . 

:

IpDVInfo DVINFO

  :

1

0

.

- - - - - - - - - - - - - - - - - - - -  - - - - - - - - */

int BUGSUTIL_DLLINTERFACE _stdcall AddClientDV (LPDVINFO IpDVInfo);

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

: ValidateAllBlocks

  :

.

 , Client-

  .

, VALIDATEALLBLOCKS, .

:

pContext ,

:

. 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/

void BUGSOTIL_DLLINTERFACE _stdcall

ValidateAllBlocks ( void * pContext);

 #ifdef _cplusplus

//////////////////////////////////////////////////////////////

// C++

////////////////////////////////////////////////////////////// 

// MFC-,

 #define DECLAREJYEMDEBUG(classname)

 public :

static DVINFO m_stDVInfo;

static void ClassDumper ( const void * pData);

static void ClassValidator ( const void * pData,

const void * pContext);

static void * operator new ( size_t nSize)

{

if ( 0 == m_stDVInfo.dwValue)

{

m_stDVTnf.pfnDump = classname::ClassDumper;

 m_stDVInfo.pfnValidate = classname::ClassValidator; 

AddClientDV ( &m_stDVInfo); 

}

return ( _malloc_dbg ( nSize 

(int)m_stDVlnf.dwValue, 

_FILE_ ,

 _LINE_ ) ) ;

}

static void * operator new ( size_t nSize ,

char * IpszFileName,

 int nLine )

{

if ( 0 = m_stDVInfo.dwValue)

{

m_stDVInfo.pfnDump = classname::ClassDumper; 

m_stDVInfo.pfnValidate = classname::ClassValidator; 

AddClientDV ( &m_stDVInfo);

 }

return ( _malloc_dbg ( nSize 

(int)m_stDVInf.dwValue,

 IpszFileName ,

 nLine )) ; 

}

static void operator delete ( void * pData)

 {

_free_dbg ( pData, (int)m_stDVInfo.dwValue);

}

// -.

 #define IMPLEMENT_MEMDEBUG(classname)

DVINFO classname::m_stDVInf = { 0, 0, 0 }

// .

// DEBUG_NEW, .

#ifdef DEBUG_NEW

tdefine MEMDEBUG_NEW DEBUG_NEW

#else

#define MEMDEBUG_NEW new ( _FILE_, _LINE_)

#endif

#endif // _cplusplus

//////////////////////////////////////////////////////////////////

// -

///////////////////////////////////////////////////////////////// 

// -.

 //

 // DVINFO.

Idefine INITIALIZE_MEMDEBUG(IpDVInfo, pfnD, pfnV) 

{

ASSERT ( FALSE == IsBadWritePtr ( IpDVInfo,

sizeof ( DVINFO))); 

((LPDVINFO)IpDVInfo)->dwValue = 0; 

((LPDVINFO)IpDVInfo)->pfnDump = pfnD; 

((LPDVINFO)IpDVInfo)->pfnValidate = pfnV;

 AddClientDV ( IpDVInfo); 

}

// , -

 // .  

// DVINFO,

 // .

#define MEMDEBUG_MALLOC(IpDVInfo, nSize) \

_malloc_dbg ( nSize , \

((LPDVINFO)IpDVInfo)->dwValue, \

_FILE_ , \

_LINE_ )

#define MEMDEBUG_REALLOC(IpDVInfo, pBlock, nSize) \ 

__realloc_dbg ( pBlock , \ 

nSize , \ 

((LPDVINFO)IpDVInfo)->dwValue , \ 

_FILE_ , \

 _LINE_ )

#define MEMDEBUG_EXPAND(IpDVInfo, pBlock, nSize) \

  _expand_dbg( pBlock , \ 

nSize , \ 

' ((LPDVINFO)IpDVInfo)->dwValue , \

 _FILE_ , \ 

_LINE_ )

#define MEMDEBUG_FREE(lpDVInfo, pBlock) \ 

_free_dbg ( pBlock , \ 

((LPDVINFO)IpDVInfo)->dwValue)

#define MEMDEBUG_MSIZE(IpDVInfo, pBlock} \

_msize_dbg ( pBlock, ((LPDVINFO)IpDVInfo)->dwValue)

// ValidateAllBlocks

#define VALIDATEALLBLOCKS(x) ValidateAllBlocks ( x)

#else // _DEBUG .

#ifdef _cplusplus

#define DECLARE_MEMDEBUG(classname) 

#define IMPLEMENT_MEMDEBUG(classname)

#define MEMDEBUG_NEW new

#endif // _cplusplus

#define INITIALIZE_MEMDEBUG(IpDVInfo, pfnD, pfnV)

#define MEMDEBUG_MALLOC(IpDVInfo, nSize) \

malloc ( nSize)

 #define MEMDEBUG_REALLOC(IpDVInfo, pBlock, nSize) \

realloc ( pBlock, nSize)

 #define MEMDEBUG_EXPAND(IpDVInfo, pBlock, nSize) \

_expand ( pBlock, nSize)

 #define MEMDEBUG_FREE(IpDVInfo, pBlock) \

free ( pBlock) ttdefine MEMDEBUG_MSIZE(IpDVInfo, pBlock) \

_msize ( pBlock)

 #define VALIDATEALLBLOCKS(x)

 #endif // _DEBUG ttifdef _cplusplus

 }

#endif // _cplusplus

 #endif // _MEMDUMPERVALIDATOR_H

 

MemDumperValidator C++

, MemDumperValidator C++, MemDumperValidator. DECLARE_MEMDEBUG . MFC, . 15-1 new, delete new, . , .

++ IMPLEMENT_MEMDEBUG ( ), . DECLARE
_MEMDEBUG IMPLEMENT_MEMDEBUG , .

( ), , . :

static void ClassDumper ( const void * pData); 

static void ClassValidator ( const void * pData,

const void * pContext);

, , .

pData () . , pData (. . ), . , (), pData , , . ClassValidator - pContext , ValidateAliBlocks. , " " .

ClassDumper. -, , DCRT-, _RPTn _RFTFn. -, CR/LF (Carriage Return/Line Feed / ), DCRT- .

C++ . ? , - .

 

MemDumperValidator

? : , , -. , , , .

MemDumperValidator -, . -, DVINFO- , . C++ , . , , , DVINFO-. - , C++, , static . DVINFO- - . 1 MemDumperValidator . MemDumperValidator INITIALIZE_MEMDEBUG, ' DVINFO-, . .

  , : // (ailocation/free/reallocation), (dump), (validation), (get/expand block size).

, . , DVINFO- stdvBiockinfo, - :

MEMDEBUG_MALLOC(&stdvBlockInfo, sizeof () ) ;

-, , 15-1. DVINFO- , , DVINFO- -; .

 

MemDumperValidator, , , : " , "" ?" , "". , . , , , . , . "" (wild) .

, . , , (self-referential data structures) ( ) . , . , , . "" , , , , , . , C++, . VALIDATEALLBLOCKS. vaiidateAHBiocks. , , . , . , validateAHBlocks , .

, MemDumperValidator, Dump, 15-2. Dump "", , ,, . , MemDumperValidator MFC, MFC .

15-2. DUMP.CPP 

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

"Debugging Applications" (Microsoft Press)

Copyright (c) 1997-2000 John Robbins All rights reserved.

- - - - - - - - - - - - - - - - - - - - - - - - - -*/

#include <stdio.h>

#include <stdlib.h>

#include <memory.h> 

#include <string.h> 

#include <iostream.h>

#include "BugslayerUtil.h"

class TestClass

{

public:

TestClass ( void)

{

strcpy ( m_szData, "TestClass constructor data!");

}

TestClass ( void)

{

m_szData[ 0 ] = '\0';

}

// C++

DECLARE_MEMDEBUG ( TestClass); 

private :

char m_szData[ 100 ]; 

};

// DVINFO .

 IMPLEMENT_MEMDEBUG ( TestClass);

Listing 15-2DUMP.CPP *

//

 #ifdef _DEBUG

void TestClass::ClassDumper ( const void * pData)

 {

TestClass * pClass = (TestClass*JpData; 

_RPT1 ( _CRT_WARN,

" TestClass::ClassDumper : %s\n", pClass->m_szData);

 }

 void TestClass::ClassValidator ( const void * pData ,

const void * )

 {

// .

 TestClass * pClass = (TestClass*)pData;

 _RPT1 ( _CRT_WARN ,

 " TestClass::ClassValidator : %s\n",

 pClass->m_szData ); 

}

#endif

typedef struct tag_SimpleStruct 

{

char szNamef 256 ]; char szRank[ 256 ]; 

SimpleStruct;

// , 

//  

void DumperOne ( const void * pData} 

{

_RPT1 ( _CRT_WARN, " Data is : %s\n", pData); 

}

void ValidatorOne ( const void * pData, const void * pContext) 

 //

. _RPT2 ( _CRT_WARN,

" Validator called with : %s : Ox%08X\n",

  pData, pContext); 

}

//

 void DumperTwo ( const void * pData)

 {

_RPT2 ( _CRT_WARN

" Data is Name : %s\n"

 " Rank : %s\n" ,

  ((SimpleStruct*)pData)->szName , 

((SimpleStruct*)pData)->szRank ); 

}

void ValidatorTwo ( const void * pData, const void * pContext)

 {

// .

_RPT2 ( _CRT_WARN , " Val%dator called with :\n" 

" Data is Name : %s\n"

 " Rank : %s\n" , 

((SimpleStruct*)pData)->szName ,

  ((SimpleStruct*)pData)->szRank ); 

}

// ,

 // DVINFO. ,  

// MEMDEBUG -,

 static DVINFO g_dvOne; 

static DVINFO g_dvTwo; 

void main ( void) 

{

cout « "At start of main\n";

// One.

INITIALIZE_MEMDEBUG ( &g_dvOne, DumperOne, ValidatorOne) ;

// Two.

INITIALIZE_MEMDEBUG ( Sg_dvTwo, DumperTwo, ValidatorTwo) ;

// MEMDEBUG.

TestClass * pstClass;

//pstClass = MEMDEBUG_NEW TestClass;

pstClass = new TestClass;

// .

char * = (char*)MEMDEBUG_MALLOC '( &g_dvOne, 10);

strcpy ( , "VC VC");

SimpleStruct * pSt =

(SimpleStruct*)MEMDEBUG_MALLOC ( Sg_dvTwo,

sizeof ( SimpleStruct));

strcpy ( pSt->szName, "Pam");

strcpy ( pSt->szRank, "CINC");

// .

VALIDATEALLBLOCKS ( NULL);

cout « "At end of main\n";

//

 }

 

MemDumperValidator

MemDumperValidator . , , , DCRT- , hook- . , , DCRT-. , DCRT- , . _GrtMemBiockHeader, DBGINT.H. , DBGINT.H , _GrtMemBiockHeader , , . , _CrtMemBiockHeader CRTDBG_INTERNALS.H ( 15-3). , , , _crtMemBiockHeader DCRT- Visual C++ 4- 6-. , Visual C++. MemDumperValidator (major release of the compiler), , .

DBGINT.H, CRTDBG_INTERNALS.H  #indude DBGINT.H. <VC98>\CRT\SRC INCLUDE, Include- Directories Options IDE Visual C++. CRT-, README.TXT, .

15-3.CRTDBG_INTERNALS.H

/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

"Debugging Applications" (Microsoft Press)

Copyright (c) 1997-2000 John Robbins All rights reserved.

- - - - - - - - - - - - - - - - - - - - - - - - -  - - - -*/

#ifndef _CRTDBG_INTERNALS_H

#define _CRTDBG_INTERNALS_H 

#define nNoMansLandSize 4

 typedef struct _CrtMemBlockHeader

 {

struct _CrtMemBlockHeader * pBlockHeaderNext ;

struct _CrtMemBlockHeader * pBlockHeaderPrev ;

char * szFileName ; 

int nLine ;

 size_t nDataSize ;

 int nBlockUse ;

 long IRequest ; 

unsigned char gap[nNoMansLandSize] ;

  /* followed by:

* unsigned char data[nDataSize];

* unsigned char anotherGap[nNoMansLandSize];

*/

} _CrtMemBlockHeader; 

#define pbData(pblock) ((unsigned char *) \

((_CrtMemBlockHeader *)pblock + 1) )

tfdefine pHdr(pbData) (((_CrtMemBlockHeader *)pbData)-l) 

#endif // _CRTDBG_INTERNALS_H

_CrtMemBiockHeader, _crtMemstate, _crtMemCheckpoint, _crtMemBiockHeader. , DCRT- .

- MEMDUMPERVALIDATOR.CPP, BUGSLAYERUTIL.DLL, , API- HeapCreate, . , hook-, DCRT-, , . , . malloc, , hook- .

 

C++

MemDumperValidator , , , . , , , MemDumperValidator, : , .

, .

MemDumperValidator : , _CrtsetDbgFiag , - .

, , , MemDumperValidator: DCRT-- -, , . - DVINFO. MemDumperValidator , , - .

, #pragma init_seg, . #pragma init_seg , , no-, : compiler, lib, user, section name funcname. .

compiler Microsoft. , compiler, , . , lib, compiler, , user, , .

 , C++ . , , . . , .

MemDumperValidator , , lib #pragma init_seg . lib- ( ) , . : #pragma init_seg (compiler). , , compiler .

C++, MemDumperValidator ( AutoMatic), _CrtSetDbgFiag. , DCRT- . , DCRT-, . MemDumperValidator -, C++ , .

 

?

, , , MemDumperValidator. , , , . DCRT--. "" , DCRT- _crtsetDumpclient NULL ( ), , , _crtDumpMemoryLeaks. , . , , .

DCRT-, BoundsChecker?

, BoundsChecker Compuware NuMega Purify Rational Software , (underwrites overwrites) . , , , , DCRT- . , , , , - (debug build) . , , 2, . 

DCRT- . , , , , . . DCRT- , . , .

#pragma init_seg(compiler) AutoMatic ( ), , _CRTDBG_LEAK_CHECK_DF, DCRT- . , CRT- BUGSLAYERUTIL.LIB ( /NODEFAULTLIB). BUGSLAYERUTIL.LIB , CRT- #pragma init_seg(compiler), , , , .

. .

, DCRT- . - CRT- (, printf), , , _crtDumpMemoryLeaks, CRT- - . DCRT- , . . MemDumperValidator , DCRT-. , - _RPTn _RPTFH, _CrtDumpMemoryLeaks.

 

MemStress

. , . , 32- Windows , . 16- Windows ( 16- Windows 98) STRESS.EXE, SDK . , , "" (heap) (Graphics Device Interface GDI), . , .

"" 32- Windows, DCRT- ( ) . MemStress /++-. ( , "" .) MemStress, ( Visual Basic), .

MemStress (), : , n- , , n , . , MemStress , , . DCRT-, . MFC- MemStressDemo ( -) (UI) MemStress .

MemStress . BUGSLAYERUTIL.H MEMSTRESSINIT . , MEMSTRESSTERMINATE. .

, MemStress UI, Add Program ( ) , MEMSTRESSINIT. Save Settings For This Program, MEMSTRESS.INI. .

MemStress . , , , 100 , , initinstance MFC- MEMSTRESSINIT, MFC . , MemStress .

MemStress MEMSTRESS.INI, . DCRT-, _CrtSetAilocHook MemStress, AllocationHook. TRUE, , FALSE , DCRT- . DCRT- : nBiockUse _CRT_BLOCK, hook- TRUE, .

. , : _HOOK_ALLOC, _HOOK_REALLOC _HOOK_FREE). AllocationHook _HOOK_FREE, , , . _HOOK_ALLOC _HOOK_REALLOC AiiocationHook if-, , - . , FALSE.

 

""

, , MemStress . , MemStressDemo ( MFC), . MemStress ( ) , , , MemStressDemo . ( , ), , , .

, , . , , . ,   API- MessageBox - ( ). , - MessageBox. AiiocationHook, MessageBox. , , .

, API- MessageBox - MFC. _AfxActivationWndProc , CWND::FromHandie, , MFC () cobject. ? , _AfxActivationWndProc "" () . MFC -, . ( message box), MFC .

, , . , , . . . , , AiiocationHook, , , AiiocationHook.

, , AiiocationHook. 0, AiiocationHook MessageBox, . , , .

  Computer-Based Training, . .

"quick dynamic thread local storage solution" . .

 

- (DCRT-) , . DCRT- MemDumperValidator MemStress. , , .

DCRT-. , , .

        3GL   4GL   5GL  

, , , Deployment diagram - - , .




 10.11.2021 - 12:37: - Personalias -> WHO IS WHO - - _.
10.11.2021 - 12:36: - Conscience -> . ? - _.
10.11.2021 - 12:36: , , - Upbringing, Inlightening, Education -> ... - _.
10.11.2021 - 12:35: - Ecology -> - _.
10.11.2021 - 12:34: , - War, Politics and Science -> - _.
10.11.2021 - 12:34: , - War, Politics and Science -> . - _.
10.11.2021 - 12:34: , , - Upbringing, Inlightening, Education -> , - _.
10.11.2021 - 09:18: - New Technologies -> , 5G- - _.
10.11.2021 - 09:18: - Ecology -> - _.
10.11.2021 - 09:16: - Ecology -> - _.
10.11.2021 - 09:15: , , - Upbringing, Inlightening, Education -> - _.
10.11.2021 - 09:13: , , - Upbringing, Inlightening, Education -> - _.
Bourabai Research -  XXI Bourabai Research Institution