Changeset 798 in dev for branches/egtra/ab5.0/abdev/BasicCompiler_Common
- Timestamp:
- Feb 5, 2011, 11:43:01 PM (14 years ago)
- Location:
- branches/egtra/ab5.0/abdev/BasicCompiler_Common
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/egtra/ab5.0/abdev/BasicCompiler_Common/BasicCompiler.cpp
r773 r798 377 377 BOOL CALLBACK DlgCompile(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ 378 378 extern HANDLE hDebugProcess; 379 extern DWORD processIdDebug; 379 380 char temporary[MAX_PATH]; 380 381 RECT rect; … … 444 445 TerminateProcess(hDebugProcess,0); 445 446 hDebugProcess=0; 447 processIdDebug = 0; 446 448 447 449 //デバッグダイアログを終了 … … 475 477 TerminateProcess(hDebugProcess,0); 476 478 hDebugProcess=0; 479 processIdDebug = 0; 477 480 478 481 //デバッグダイアログを終了 -
branches/egtra/ab5.0/abdev/BasicCompiler_Common/CDebugThreadInfo.cpp
r741 r798 4 4 #include "DebugSection.h" 5 5 6 #include <ProcessAndModule.h> 6 7 7 8 //デバッグ用 … … 10 11 11 12 extern HANDLE hDebugProcess; 13 extern DWORD processIdDebug; 12 14 extern DebugSectionCollection debugSectionCollection; 13 15 … … 67 69 68 70 //マッピングされているモジュールのイメージベースを取得 69 HMODULE array_hModule[1024]; 70 DWORD cbReturned; 71 if(!EnumProcessModules( hDebugProcess, array_hModule, sizeof(HMODULE)*1024, &cbReturned )) return 0; 71 //HMODULE array_hModule[1024]; 72 //DWORD cbReturned; 73 //if(!EnumProcessModules( hDebugProcess, array_hModule, sizeof(HMODULE)*1024, &cbReturned )) return 0; 74 auto modules = ActiveBasic::Common::GetModules(processIdDebug); 72 75 73 int i;74 76 HMODULE hTargetModule=0; 75 for(i=0;i<(int)(cbReturned/sizeof(HMODULE));i++){ 76 if((LONG_PTR)array_hModule[i]<=(LONG_PTR)EIP_RIP(Context)){ 77 if(hTargetModule<array_hModule[i]) hTargetModule=array_hModule[i]; 77 for (std::size_t i = 0; i < modules.size(); ++i) 78 { 79 if ((LONG_PTR)modules[i]<=(LONG_PTR)EIP_RIP(Context)) 80 { 81 if (hTargetModule<modules[i]) 82 { 83 hTargetModule=modules[i]; 84 } 78 85 } 79 86 } … … 81 88 extern DWORD ImageBase; 82 89 if((HMODULE)(ULONG_PTR)ImageBase!=hTargetModule){ 83 for( i=0;i<debugSectionCollection.debugSections.size();i++){90 for(std::size_t i=0;i<debugSectionCollection.debugSections.size();i++){ 84 91 if((HMODULE)(ULONG_PTR)debugSectionCollection.debugSections[i]->dwImageBase==hTargetModule){ 85 92 debugSectionCollection.choice(i); -
branches/egtra/ab5.0/abdev/BasicCompiler_Common/Debug.cpp
r750 r798 9 9 #include "../BasicCompiler_Common/debug.h" 10 10 11 #include <Path.h> 12 #include <ProcessAndModule.h> 13 11 14 char *OpBuffer; 12 15 … … 14 17 15 18 HANDLE hDebugProcess; 19 DWORD processIdDebug; 16 20 17 21 DWORD _DebugSys_dwThreadID[MAX_DEBUG_THREAD]; … … 155 159 TerminateProcess(hDebugProcess,0); 156 160 hDebugProcess=0; 161 processIdDebug = 0; 157 162 158 163 //デバッグダイアログを終了 … … 435 440 if( program.IsAttach() ) 436 441 { 437 //プロセスIDを元にハンドルを取得 438 HANDLE hProcess; 439 hProcess=OpenProcess(PROCESS_ALL_ACCESS,0, program.GetAttachProcessId() ); 440 if(!hProcess) goto AttachError; 441 442 //そのプロセスにおける実行モジュールのインスタンスハンドルを取得 443 HINSTANCE hModule; 444 DWORD cbReturned; 445 if(!EnumProcessModules( hProcess, &hModule, sizeof(HINSTANCE), &cbReturned )) goto AttachError; 442 ////プロセスIDを元にハンドルを取得 443 //HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,0, program.GetAttachProcessId() ); 444 //if(!hProcess) 445 //{ 446 // DebugMessage("アタッチに失敗しました。"); 447 // return; 448 //} 449 450 ////そのプロセスにおける実行モジュールのインスタンスハンドルを取得 451 //HINSTANCE hModule; 452 //DWORD cbReturned; 453 //if(!EnumProcessModules( hProcess, &hModule, sizeof(HINSTANCE), &cbReturned )) 454 //{ 455 // DebugMessage("アタッチに失敗しました。"); 456 // return; 457 //} 446 458 447 459 //実行ファイル名を取得 448 char tempOutputFileName[MAX_PATH]; 449 GetModuleFileNameEx(hProcess,hModule,tempOutputFileName,MAX_PATH); 450 program.SetOutputFilePath( tempOutputFileName ); 451 452 CloseHandle(hProcess); 460 auto tempOutputFilePath = ActiveBasic::Common::GetExecutableModulePath(program.GetAttachProcessId()); 461 program.SetOutputFilePath( tempOutputFilePath.string().c_str() ); 462 463 //CloseHandle(hProcess); 453 464 454 465 /* … … 456 467 pobj_DebugSection->load(program.GetOutputFilePath().c_str());*/ 457 468 458 if(!DebugActiveProcess( program.GetAttachProcessId() )) {459 AttachError: 469 if(!DebugActiveProcess( program.GetAttachProcessId() )) 470 { 460 471 DebugMessage("アタッチに失敗しました。"); 461 472 return; … … 532 543 else{ 533 544 Attach_DllLoad: 534 //アタッチした場合 535 GetModuleFileNameEx(hDebugProcess,(HINSTANCE)de.u.LoadDll.lpBaseOfDll,temporary,MAX_PATH); 545 { 546 //アタッチした場合 547 auto path = ActiveBasic::Common::GetModuleFilePath(hDebugProcess, reinterpret_cast<HINSTANCE>(de.u.LoadDll.lpBaseOfDll)); 548 strncpy_s(temporary, path.string().c_str(), _TRUNCATE); 549 } 536 550 } 537 551 … … 562 576 hDebugProcess=de.u.CreateProcessInfo.hProcess; 563 577 hMainThread=de.u.CreateProcessInfo.hThread; 578 processIdDebug = de.dwProcessId; 564 579 565 580 if(debugSectionCollection.add((HMODULE)de.u.CreateProcessInfo.lpBaseOfImage)){
Note:
See TracChangeset
for help on using the changeset viewer.