调试器开发 - 在qemu自己搞debug server, 支持单步要注意的地方

在qemu自己搞debug server, 支持单步地方:

1)qemu的设计是只支持gdb debug server的, 就是说你在qemu里要搞一个debug server, 你要在原先的gdbstubs里:

void gdb_set_stop_cpu(CPUArchState *env){
if (gdbserver_state!=NULL){  // peter
gdbserver_state->c_cpu = env;    
gdbserver_state->g_cpu = env;
}
}

就算qemu知道你没有用到gdb, 它也是会call gdb_set_stop_cpu(), 那么qemu就会死掉

2) 在gkd_vm_state_change()里当VM是running, 一定要return, 否则VM不会停, 因为env->singlestep_enabled也会被cpu_single_step(cpu, 0);重设成0.

static void gkd_vm_state_change(void *opaque, int running, RunState state) {
	printf("gkd_vm_state_change, state=%d\n", state);
if (running) {
	        return;
	    }
	CPUArchState *cpu = first_cpu;//find_cpu(1);
	switch (state) {
	case RUN_STATE_DEBUG:
		tb_flush(cpu);
		break;

	}

	cpu_single_step(cpu, 0);
}


你可能感兴趣的:(调试器开发 - 在qemu自己搞debug server, 支持单步要注意的地方)