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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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;
Note: See TracChangeset for help on using the changeset viewer.