Changeset 828 in dev for trunk/ab5.0/abdev/BasicCompiler_Common/Debug.cpp
- Timestamp:
- Mar 19, 2012, 1:59:48 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
Property svn:mergeinfo
set to
/branches/egtra merged eligible
-
Property svn:mergeinfo
set to
-
trunk/ab5.0/abdev
-
Property svn:ignore
set to
*.opensdf
*.sdf
*.suo
*.user
int
ipch
out
-
Property svn:ignore
set to
-
trunk/ab5.0/abdev/BasicCompiler_Common/Debug.cpp
r750 r828 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 //デバッグダイアログを終了 … … 271 276 UserProc *GetSubFromObp(ULONG_PTR pos) 272 277 { 273 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 274 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 278 foreach (auto pUserProc, compiler.GetObjectModule().meta.GetUserProcs()) 275 279 { 276 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();277 278 280 if(rva_to_real(pUserProc->GetBeginOpAddress()) <= pos && 279 281 pos < rva_to_real(pUserProc->GetEndOpAddress())) … … 406 408 //ユーザーに実行ファイルを選択させる 407 409 extern HWND hOwnerEditor; 408 extern LPSTR ExeFileFilter;410 extern const LPCSTR ExeFileFilter; 409 411 if(!GetFilePathDialog(hOwnerEditor,ExeFilePathForDll,ExeFileFilter,"デバッグ用の実行可能ファイルを指定してください。",1)) return; 410 412 } … … 435 437 if( program.IsAttach() ) 436 438 { 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; 439 ////プロセスIDを元にハンドルを取得 440 //HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,0, program.GetAttachProcessId() ); 441 //if(!hProcess) 442 //{ 443 // DebugMessage("アタッチに失敗しました。"); 444 // return; 445 //} 446 447 ////そのプロセスにおける実行モジュールのインスタンスハンドルを取得 448 //HINSTANCE hModule; 449 //DWORD cbReturned; 450 //if(!EnumProcessModules( hProcess, &hModule, sizeof(HINSTANCE), &cbReturned )) 451 //{ 452 // DebugMessage("アタッチに失敗しました。"); 453 // return; 454 //} 446 455 447 456 //実行ファイル名を取得 448 char tempOutputFileName[MAX_PATH]; 449 GetModuleFileNameEx(hProcess,hModule,tempOutputFileName,MAX_PATH); 450 program.SetOutputFilePath( tempOutputFileName ); 451 452 CloseHandle(hProcess); 457 auto tempOutputFilePath = ActiveBasic::Common::GetExecutableModulePath(program.GetAttachProcessId()); 458 program.SetOutputFilePath( tempOutputFilePath.string().c_str() ); 459 460 //CloseHandle(hProcess); 453 461 454 462 /* … … 456 464 pobj_DebugSection->load(program.GetOutputFilePath().c_str());*/ 457 465 458 if(!DebugActiveProcess( program.GetAttachProcessId() )) {459 AttachError: 466 if(!DebugActiveProcess( program.GetAttachProcessId() )) 467 { 460 468 DebugMessage("アタッチに失敗しました。"); 461 469 return; … … 532 540 else{ 533 541 Attach_DllLoad: 534 //アタッチした場合 535 GetModuleFileNameEx(hDebugProcess,(HINSTANCE)de.u.LoadDll.lpBaseOfDll,temporary,MAX_PATH); 542 { 543 //アタッチした場合 544 auto path = ActiveBasic::Common::GetModuleFilePath(hDebugProcess, reinterpret_cast<HINSTANCE>(de.u.LoadDll.lpBaseOfDll)); 545 strncpy_s(temporary, path.string().c_str(), _TRUNCATE); 546 } 536 547 } 537 548 … … 562 573 hDebugProcess=de.u.CreateProcessInfo.hProcess; 563 574 hMainThread=de.u.CreateProcessInfo.hThread; 575 processIdDebug = de.dwProcessId; 564 576 565 577 if(debugSectionCollection.add((HMODULE)de.u.CreateProcessInfo.lpBaseOfImage)){
Note:
See TracChangeset
for help on using the changeset viewer.