Changeset 741 in dev


Ignore:
Timestamp:
Sep 7, 2008, 12:05:40 AM (16 years ago)
Author:
dai
Message:

デバッグセクション情報周りをリファクタリング

Location:
trunk/ab5.0/abdev
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/BasicCompiler_Common/CDebugThreadInfo.cpp

    r740 r741  
    1010
    1111extern HANDLE hDebugProcess;
     12extern DebugSectionCollection debugSectionCollection;
    1213
    1314CDebugThreadInfo *pobj_dti;
     
    2728
    2829    DWORD dwRWSectionPos;
    29     dwRWSectionPos=pobj_DBDebugSection->debugSections[0]->dwImageBase+
    30                         pobj_DBDebugSection->debugSections[0]->dwRVA_RWSection;
     30    dwRWSectionPos=debugSectionCollection.debugSections[0]->dwImageBase+
     31                        debugSectionCollection.debugSections[0]->dwRVA_RWSection;
    3132
    3233    ReadProcessMemory(hDebugProcess,
     
    8081    extern DWORD ImageBase;
    8182    if((HMODULE)(ULONG_PTR)ImageBase!=hTargetModule){
    82         for(i=0;i<pobj_DBDebugSection->debugSections.size();i++){
    83             if((HMODULE)(ULONG_PTR)pobj_DBDebugSection->debugSections[i]->dwImageBase==hTargetModule){
    84                 pobj_DBDebugSection->choice(i);
     83        for(i=0;i<debugSectionCollection.debugSections.size();i++){
     84            if((HMODULE)(ULONG_PTR)debugSectionCollection.debugSections[i]->dwImageBase==hTargetModule){
     85                debugSectionCollection.choice(i);
    8586                break;
    8687            }
  • trunk/ab5.0/abdev/BasicCompiler_Common/Debug.cpp

    r740 r741  
    2323int NextStepThreadNum;
    2424
     25DebugSectionCollection debugSectionCollection;
    2526
    2627void Debugger_StepIn(void){
     
    129130
    130131            StepCursorObpSchedule=oldSourceLines[i3].GetNativeCodePos();
    131             StepCursor_BackupChar=pobj_DBDebugSection->pobj_now->BreakStepCodeBuffer[StepCursorObpSchedule];
    132 
    133             pobj_DBDebugSection->pobj_now->BreakStepCodeBuffer[StepCursorObpSchedule]=(char)0xCC;
     132            StepCursor_BackupChar=debugSectionCollection.GetCurrent().BreakStepCodeBuffer[StepCursorObpSchedule];
     133
     134            debugSectionCollection.GetCurrent().BreakStepCodeBuffer[StepCursorObpSchedule]=(char)0xCC;
    134135
    135136            break;
     
    292293    WriteProcessMemory(hDebugProcess,
    293294        (void *)(ULONG_PTR)(ImageBase+MemPos_CodeSection),
    294         pobj_DBDebugSection->pobj_now->BreakStepCodeBuffer,
     295        debugSectionCollection.GetCurrent().BreakStepCodeBuffer,
    295296        FileSize_CodeSection,&lpAccBytes);
    296297
     
    298299    if(ImageBase+MemPos_CodeSection<=EIP_RIP(*pContext)&&EIP_RIP(*pContext)<ImageBase+MemPos_CodeSection+FileSize_CodeSection){
    299300        if(OpBuffer[EIP_RIP(*pContext)-ImageBase-MemPos_CodeSection-1]!=
    300             pobj_DBDebugSection->pobj_now->BreakStepCodeBuffer[EIP_RIP(*pContext)-ImageBase-MemPos_CodeSection-1]){
     301            debugSectionCollection.GetCurrent().BreakStepCodeBuffer[EIP_RIP(*pContext)-ImageBase-MemPos_CodeSection-1]){
    301302            //直前のブレークポイントがユーザー指定によるものだったとき
    302303
     
    312313            if(StepCursorObpSchedule==(int)(EIP_RIP(*pContext)-ImageBase-MemPos_CodeSection)){
    313314                //カーソル行までのステップ実行の場合
    314                 pobj_DBDebugSection->pobj_now->BreakStepCodeBuffer[StepCursorObpSchedule]=StepCursor_BackupChar;
     315                debugSectionCollection.GetCurrent().BreakStepCodeBuffer[StepCursorObpSchedule]=StepCursor_BackupChar;
    315316                StepCursorObpSchedule=-1;
    316317            }
     
    340341void Set_DebugSys_dwThreadID()
    341342{
    342     BOOST_FOREACH( CDebugSection *pDebugSection, pobj_DBDebugSection->debugSections )
     343    BOOST_FOREACH( DebugSection *pDebugSection, debugSectionCollection.debugSections )
    343344    {
    344345        ULONG_PTR lpAccBytes;
     
    483484
    484485
    485     //デバッグ情報データベースを生成
    486     pobj_DBDebugSection=new CDBDebugSection();
    487 
    488486    //デバッグスレッド情報(プロシージャの階層構造を管理)を生成
    489487    pobj_dti=new CDebugThreadInfo();
     
    538536
    539537            //可能であればデバッグ情報を読みとる
    540             if(pobj_DBDebugSection->add((HMODULE)de.u.LoadDll.lpBaseOfDll)){
    541                 pobj_DBDebugSection->choice(0);
     538            if(debugSectionCollection.add((HMODULE)de.u.LoadDll.lpBaseOfDll)){
     539                debugSectionCollection.choice(0);
    542540                Set_DebugSys_dwThreadID();
    543541            }
     
    553551            //DLLのアンロード
    554552
    555             pobj_DBDebugSection->del((HMODULE)de.u.UnloadDll.lpBaseOfDll);
     553            debugSectionCollection.del((HMODULE)de.u.UnloadDll.lpBaseOfDll);
    556554        }
    557555        else if(de.dwDebugEventCode==CREATE_PROCESS_DEBUG_EVENT){
     
    559557            hMainThread=de.u.CreateProcessInfo.hThread;
    560558
    561             if(pobj_DBDebugSection->add((HMODULE)de.u.CreateProcessInfo.lpBaseOfImage)){
    562                 pobj_DBDebugSection->choice(0);
     559            if(debugSectionCollection.add((HMODULE)de.u.CreateProcessInfo.lpBaseOfImage)){
     560                debugSectionCollection.choice(0);
    563561            }
    564562
     
    716714                        //シングルステップON
    717715                        WriteProcessMemory(hDebugProcess,(void *)(ULONG_PTR)(ImageBase+MemPos_CodeSection),
    718                             pobj_DBDebugSection->pobj_now->SingleStepCodeBuffer,
     716                            debugSectionCollection.GetCurrent().SingleStepCodeBuffer,
    719717                            FileSize_CodeSection,&lpAccBytes);
    720718
     
    754752                            WriteProcessMemory(hDebugProcess,
    755753                                (void *)(ULONG_PTR)(ImageBase+MemPos_CodeSection),
    756                                 pobj_DBDebugSection->pobj_now->SingleStepCodeBuffer,
     754                                debugSectionCollection.GetCurrent().SingleStepCodeBuffer,
    757755                                GlobalOpBufferSize,
    758756                                &lpAccBytes);
     
    765763                            WriteProcessMemory(hDebugProcess,
    766764                                (void *)rva_to_real(pUserProc->GetBeginOpAddress()),
    767                                 pobj_DBDebugSection->pobj_now->SingleStepCodeBuffer+pUserProc->GetBeginOpAddress(),
     765                                debugSectionCollection.GetCurrent().SingleStepCodeBuffer+pUserProc->GetBeginOpAddress(),
    768766                                pUserProc->GetEndOpAddress()-pUserProc->GetBeginOpAddress(),
    769767                                &lpAccBytes);
     
    812810    if(hDebugWnd) SendMessage(hDebugWnd,WM_COMMAND,IDCANCEL,0);
    813811
    814     //デバッグに利用した情報を解放
    815     delete pobj_DBDebugSection;
    816 
    817812    //デバッグスレッド情報を解放
    818813    delete pobj_dti;
  • trunk/ab5.0/abdev/BasicCompiler_Common/DebugMiddleFile.cpp

    r740 r741  
    4444
    4545
    46 CDebugSection::~CDebugSection(){
     46DebugSection::~DebugSection(){
    4747    if(dwImageBase) DeleteDebugInfo();
    4848    if(buffer){
     
    5151    }
    5252}
    53 void CDebugSection::make(void){
     53void DebugSection::make(void){
    5454    int i2,BufferSize;
    5555
     
    168168}
    169169
    170 char *CDebugSection::MakeSingleStepCode(void){
     170char *DebugSection::MakeSingleStepCode(void){
    171171    char *buffer;
    172172    buffer=(char *)HeapAlloc(hHeap,0,SizeOf_CodeSection);
     
    187187    return buffer;
    188188}
    189 BOOL CDebugSection::__load(void){
     189BOOL DebugSection::__load(void){
    190190    int i2,i3;
    191191
     
    311311}
    312312
    313 BOOL CDebugSection::load(HMODULE hModule){
     313BOOL DebugSection::load(HMODULE hModule){
    314314    if(buffer){
    315315        HeapDefaultFree(buffer);
     
    389389}
    390390
    391 void CDebugSection::choice(void){
     391void DebugSection::choice(void){
    392392    //イメージベース
    393393    extern DWORD ImageBase;
     
    423423}
    424424
    425 void CDebugSection::DeleteDebugInfo(void){
     425void DebugSection::DeleteDebugInfo(void){
    426426    //コードバッファを解放
    427427    free(OpBuffer);
     
    437437
    438438
    439 CDBDebugSection::CDBDebugSection()
     439DebugSectionCollection::DebugSectionCollection()
    440440{
    441441}
    442 CDBDebugSection::~CDBDebugSection()
     442DebugSectionCollection::~DebugSectionCollection()
    443443{
    444     BOOST_FOREACH( CDebugSection *pDebugSection, debugSections )
     444    BOOST_FOREACH( DebugSection *pDebugSection, debugSections )
    445445    {
    446446        delete pDebugSection;
     
    449449}
    450450
    451 BOOL CDBDebugSection::add(HMODULE hModule){
    452     CDebugSection *pobj_d;
    453     pobj_d=new CDebugSection();
     451BOOL DebugSectionCollection::add(HMODULE hModule){
     452    DebugSection *pobj_d;
     453    pobj_d=new DebugSection();
    454454    if(!pobj_d->load(hModule)){
    455455        //デバッグ情報が存在しないとき
     
    463463}
    464464
    465 void CDBDebugSection::del(HMODULE hModule){
     465void DebugSectionCollection::del(HMODULE hModule){
    466466    for( int i=0; i<static_cast<int>(this->debugSections.size()); i++ )
    467467    {
     
    469469        {
    470470            delete debugSections[i];
    471             Jenga::Common::EraseVectorItem<std::vector<CDebugSection *>>( debugSections, i );
     471            Jenga::Common::EraseVectorItem<std::vector<DebugSection *>>( debugSections, i );
    472472            break;
    473473        }
     
    475475}
    476476
    477 void CDBDebugSection::choice( int index )
     477void DebugSectionCollection::choice( int index )
    478478{
    479     pobj_now = debugSections[index];
    480     pobj_now->choice();
    481 }
    482 
    483 
    484 
    485 CDBDebugSection *pobj_DBDebugSection;
     479    pCurrent = debugSections[index];
     480    pCurrent->choice();
     481}
  • trunk/ab5.0/abdev/BasicCompiler_Common/DebugSection.h

    r740 r741  
    11#pragma once
    22
    3 class CDebugSection{
     3class DebugSection{
    44public:
    55    char szNowFilePath[MAX_PATH];
     
    4949
    5050
    51     CDebugSection()
     51    DebugSection()
    5252        : buffer( NULL )
    5353        , length( 0 )
     
    6464        szNowFilePath[0]=0;
    6565    }
    66     ~CDebugSection();
     66    ~DebugSection();
    6767
    6868    void make(void);
     
    7979};
    8080
    81 class CDBDebugSection{
     81class DebugSectionCollection{
     82    DebugSection *pCurrent;
    8283public:
    83     std::vector<CDebugSection *> debugSections;
     84    std::vector<DebugSection *> debugSections;
    8485
    85     CDebugSection *pobj_now;
    86 
    87     CDBDebugSection();
    88     ~CDBDebugSection();
     86    DebugSectionCollection();
     87    ~DebugSectionCollection();
    8988
    9089    BOOL add(HMODULE hModule);
     
    9392    void choice(int index);
    9493
     94    DebugSection &GetCurrent()
     95    {
     96        MyAssert( pCurrent != NULL );
     97        return *pCurrent;
     98    }
    9599};
    96 
    97 extern CDBDebugSection *pobj_DBDebugSection;
  • trunk/ab5.0/abdev/compiler_x86/MakePeHdr.cpp

    r710 r741  
    853853
    854854    //デバッグセクションを生成
    855     CDebugSection *pobj_DebugSection;
    856     pobj_DebugSection=new CDebugSection();
     855    DebugSection *pobj_DebugSection;
     856    pobj_DebugSection=new DebugSection();
    857857    if( compiler.IsDebug() && !compiler.errorMessenger.HasError() )
    858858    {
Note: See TracChangeset for help on using the changeset viewer.