![]() |
|
|
Generated: 24 Nov 2008 |
00001 //==================================================================== 00002 // Debugger.cpp 00003 //-------------------------------------------------------------------- 00004 // 00005 // Package : System (The LHCb System service) 00006 // 00007 // Description: Invoke interactively the debugger from a 00008 // running application 00009 // 00010 // Author : M.Frank 00011 // Created : 13/1/99 00012 // Changes : 00013 //==================================================================== 00014 #define GAUDIKERNEL_DEBUGGER_CPP 00015 00016 #ifdef _WIN32 00017 namespace Win { 00018 #define NOMSG 00019 #define NOGDI 00020 #include "windows.h" 00021 #include "process.h" 00022 #undef NOMSG 00023 #undef NOGDI 00024 }; 00025 #else 00026 #include <unistd.h> 00027 #endif 00028 00029 // Framework include files 00030 #include "GaudiKernel/Debugger.h" 00031 00033 long System::breakExecution() { 00034 #ifdef _WIN32 00035 _asm int 3 00036 return 1; 00037 #else 00038 // I have no clu how to do this in linux 00039 return 0; 00040 #endif 00041 } 00042 00044 long System::breakExecution(long pid) { 00045 #ifdef _WIN32 00046 long result = 0; 00047 if ( pid == Win::_getpid() ) { 00048 _asm int 3 00049 return 1; 00050 } 00051 else { 00052 Win::LPTHREAD_START_ROUTINE fun; 00053 Win::HANDLE th, ph; 00054 Win::HINSTANCE mh; 00055 Win::DWORD id; 00056 mh = Win::LoadLibrary( "Kernel32" ); 00057 if ( 0 != mh ) { 00058 fun = (Win::LPTHREAD_START_ROUTINE)Win::GetProcAddress(mh, "DebugBreak"); 00059 if ( 0 != fun ) { 00060 ph = Win::OpenProcess (PROCESS_ALL_ACCESS, TRUE, pid); 00061 if ( 0 != ph ) { 00062 th = Win::CreateRemoteThread(ph,NULL,0,fun,0,0,&id); 00063 if ( 0 != th ) { 00064 Win::CloseHandle(th); 00065 result = 1; 00066 } 00067 Win::CloseHandle(ph); 00068 } 00069 } 00070 Win::FreeLibrary(mh); 00071 } 00072 } 00073 if ( result != 1 ) result = Win::GetLastError(); 00074 return result; 00075 #else 00076 // I have no clu how to do this in linux 00077 return pid; 00078 #endif 00079 } 00080 00081 00082 00083 00084 00085 00086 00087 00088 00089