/* * Class: sun_jvm_hotspot_debugger_windbg_WindbgDebuggerLocal * Method: consoleExecuteCommand0 * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_jvm_hotspot_debugger_windbg_WindbgDebuggerLocal_consoleExecuteCommand0 (JNIEnv *env, jobject obj, jstring cmd) { jboolean isCopy = JNI_FALSE; const char* buf = env->GetStringUTFChars(cmd, &isCopy); CHECK_EXCEPTION_(0); AutoJavaString command(env, cmd, buf); IDebugClient* ptrIDebugClient = (IDebugClient*) env->GetLongField(obj, ptrIDebugClient_ID); CHECK_EXCEPTION_(0); IDebugClient* tmpClientPtr = 0; if (ptrIDebugClient->CreateClient(&tmpClientPtr) != S_OK) { THROW_NEW_DEBUGGER_EXCEPTION_("Windbg Error: CreateClient failed!", 0); } AutoCOMPtr<IDebugClient> tmpClient(tmpClientPtr); IDebugControl* tmpControlPtr = 0; if (tmpClient->QueryInterface(__uuidof(IDebugControl), (PVOID*) &tmpControlPtr) != S_OK) { THROW_NEW_DEBUGGER_EXCEPTION_("Windbg Error: QueryInterface (IDebugControl) failed", 0); } AutoCOMPtr<IDebugControl> tmpControl(tmpControlPtr); SAOutputCallbacks* saOutputCallbacks = (SAOutputCallbacks*) env->GetLongField(obj, ptrIDebugOutputCallbacks_ID); CHECK_EXCEPTION_(0); saOutputCallbacks->clearBuffer(); if (tmpClient->SetOutputCallbacks(saOutputCallbacks) != S_OK) { THROW_NEW_DEBUGGER_EXCEPTION_("Windbg Error: SetOutputCallbacks failed!", 0); } tmpControl->Execute(DEBUG_OUTPUT_VERBOSE, command, DEBUG_EXECUTE_DEFAULT); const char* output = saOutputCallbacks->getBuffer(); if (output == 0) { output = ""; } jstring res = env->NewStringUTF(output); saOutputCallbacks->clearBuffer(); return res; }
DWORD WINAPI OpenUiSecondThread(void* parameter) { OpenUiSecondThreadParameters* p = (OpenUiSecondThreadParameters*)parameter; IDebugClient* Client = p->Client; char* Args = p->Args; CAutoComPtr<IDebugClient> client2; CHECKCOM(Client->CreateClient(&client2)); wstringstream ss; ss << Args; clr.InitializeContext(client2); HRESULT result = clr.OpenUI(ss.str().c_str()); delete[] p->Args; delete p; return result; }