Hola amigos, tengo esto en un botón del form:
Código PHP:
Depurador->InitDebug(NULL,MODE_ATACH_BY_WINDOW_NAME,wndName,NULL); //Inicializamos el debugger
Depurador->LoopDebug(); //Arrancamos el bucle de depuracion
//::Sleep(20);
Depurador->SetBP(DIR_BP_IDS);
El metodo LoopDebug crea el hilo:
Código PHP:
void TDebugger::LoopDebug(void)
{
//Creo el hilo suspendido
HiloDepuracion = new(std::nothrow) THiloDebugger(false,Mode,PathFile,NameWindow,pid,this);
El problema que tengo es que tarda menos en ejecutarse la siguiente linea del botón que internamente hace esto:
Código PHP:
bool THiloDebugger::SetBP(DWORD address)
{
bool salida = true;
BYTE bp = 0xCC;
unsigned long retval = 0;
BYTE original;
TBP MyBP;
int pos;
pos = SearchBPOnList(address, &MyBP);
que en crearse el hilo y ejecutar cosas como estas:
Código PHP:
void __fastcall THiloDebugger::Execute()
{
DEBUG_EVENT DebugEv;
HANDLE CurrentExceptionThread;
DWORD dwContinueStatus;
int Error;
TDll *ItemDLL;
bool salir=false;
ListaBPs = new TList;
ListaDlls = new TList;
ListaThreads = new TList;
Synchronize(OnInitLoopDebugThread); //Usaremos este evento para inicialización de variables en la clase usuario si se requiere.
y cuando intento poner el Breakpoint hace esto internamente:
Código PHP:
int THiloDebugger::SearchBPOnList(DWORD address, pBP lpMyBP)
{
pBP BP;
int x = 0;
bool encontrado = false;
for(x=0; x < ListaBPs->Count; x++)
{
BP = (TBP*)ListaBPs->Items[x];
if(BP->dir == address)
{
Con lo que me encuentro con que al poner el Breakpoint lo va a buscar en la TList ListaBPs y esta aun no se ha creado. Lo he solucionado poniendo un ::Sleep(20) justo antes de poner el Breakpoint pero creo que es una autentica chapuza. ¿que podría hacer para no tener este problema?
Intenté poniendo después de crear el hilo con:
Código PHP:
HiloDepuracion->WaitFor();
pero me cansé de esperar y no regresa nunca porque supongo que eso espera hasta que termine el hilo y el hilo es el que tiene el bucle de los eventos así que no va a salir nunca.