Failed attempt w/ next app
This commit is contained in:
parent
84c5cf0661
commit
d989c45c3d
@ -516,9 +516,9 @@ Result autolaunchSysmodules(void)
|
||||
}
|
||||
|
||||
// Custom
|
||||
Result DebugNextApplicationByForce(void)
|
||||
Result DebugNextApplicationByForce(bool debug)
|
||||
{
|
||||
g_debugNextApplication = true;
|
||||
g_debugNextApplication = debug;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -13,5 +13,5 @@ Result LaunchAppDebug(Handle *outDebug, const FS_ProgramInfo *programInfo, u32 l
|
||||
Result autolaunchSysmodules(void);
|
||||
|
||||
// Custom
|
||||
Result DebugNextApplicationByForce(void);
|
||||
Result DebugNextApplicationByForce(bool debug);
|
||||
Result LaunchTitleDebug(Handle *outDebug, const FS_ProgramInfo *programInfo, u32 launchFlags);
|
||||
|
@ -48,7 +48,7 @@ void pmDbgHandleCommands(void *ctx)
|
||||
cmdbuf[4] = pid;
|
||||
break;
|
||||
case 0x101:
|
||||
cmdbuf[1] = DebugNextApplicationByForce();
|
||||
cmdbuf[1] = DebugNextApplicationByForce(cmdbuf[1] != 0);
|
||||
cmdbuf[0] = IPC_MakeHeader(0x101, 1, 0);
|
||||
break;
|
||||
case 0x102:
|
||||
|
@ -7,5 +7,5 @@
|
||||
#include <3ds/services/pmdbg.h>
|
||||
|
||||
Result PMDBG_GetCurrentAppTitleIdAndPid(u64 *outTitleId, u32 *outPid);
|
||||
Result PMDBG_DebugNextApplicationByForce(void);
|
||||
Result PMDBG_DebugNextApplicationByForce(bool debug);
|
||||
Result PMDBG_LaunchTitleDebug(Handle *outDebug, const FS_ProgramInfo *programInfo, u32 launchFlags);
|
||||
|
@ -74,4 +74,5 @@ Result server_init(struct sock_server *serv);
|
||||
void server_bind(struct sock_server *serv, u16 port);
|
||||
void server_run(struct sock_server *serv);
|
||||
void server_kill_connections(struct sock_server *serv);
|
||||
void server_set_should_close_all(struct sock_server *serv);
|
||||
void server_finalize(struct sock_server *serv);
|
||||
|
@ -332,7 +332,7 @@ void HBLDR_HandleCommands(void *ctx)
|
||||
{
|
||||
nextApplicationGdbCtx->debug = 0;
|
||||
nextApplicationGdbCtx->pid = 0xFFFFFFFF;
|
||||
res = PMDBG_DebugNextApplicationByForce();
|
||||
res = PMDBG_DebugNextApplicationByForce(true);
|
||||
if (R_FAILED(res))
|
||||
{
|
||||
nextApplicationGdbCtx->flags = 0;
|
||||
|
@ -147,11 +147,23 @@ void DebuggerMenu_DisableDebugger(void)
|
||||
|
||||
if(initialized)
|
||||
{
|
||||
GDB_LockAllContexts(&gdbServer);
|
||||
|
||||
svcSignalEvent(gdbServer.super.shall_terminate_event);
|
||||
server_kill_connections(&gdbServer.super);
|
||||
res = MyThread_Join(&debuggerDebugThread, 5 * 1000 * 1000 * 1000LL);
|
||||
//server_kill_connections(&gdbServer.super);
|
||||
server_set_should_close_all(&gdbServer.super);
|
||||
|
||||
GDB_UnlockAllContexts(&gdbServer);
|
||||
|
||||
res = MyThread_Join(&debuggerDebugThread, 2 * 1000 * 1000 * 1000LL);
|
||||
if(res == 0)
|
||||
res = MyThread_Join(&debuggerSocketThread, 5 * 1000 * 1000 * 1000LL);
|
||||
res = MyThread_Join(&debuggerSocketThread, 2 * 1000 * 1000 * 1000LL);
|
||||
|
||||
Handle dummy = 0;
|
||||
PMDBG_RunQueuedProcess(&dummy);
|
||||
svcCloseHandle(dummy);
|
||||
PMDBG_DebugNextApplicationByForce(false);
|
||||
nextApplicationGdbCtx = NULL;
|
||||
svcKernelSetState(0x10000, 2);
|
||||
}
|
||||
|
||||
@ -188,7 +200,7 @@ void DebuggerMenu_DebugNextApplicationByForce(void)
|
||||
{
|
||||
nextApplicationGdbCtx->debug = 0;
|
||||
nextApplicationGdbCtx->pid = 0xFFFFFFFF;
|
||||
res = PMDBG_DebugNextApplicationByForce();
|
||||
res = PMDBG_DebugNextApplicationByForce(true);
|
||||
if(R_SUCCEEDED(res))
|
||||
sprintf(buf, "Operation succeeded.\nUse port %d to connect to the next launched\napplication.", nextApplicationGdbCtx->localPort);
|
||||
else
|
||||
|
@ -22,11 +22,12 @@ Result PMDBG_GetCurrentAppTitleIdAndPid(u64 *outTitleId, u32 *outPid)
|
||||
return cmdbuf[1];
|
||||
}
|
||||
|
||||
Result PMDBG_DebugNextApplicationByForce(void)
|
||||
Result PMDBG_DebugNextApplicationByForce(bool debug)
|
||||
{
|
||||
Result ret = 0;
|
||||
u32 *cmdbuf = getThreadCommandBuffer();
|
||||
cmdbuf[0] = IPC_MakeHeader(0x101, 0, 0);
|
||||
cmdbuf[0] = IPC_MakeHeader(0x101, 1, 0);
|
||||
cmdbuf[1] = (u32)debug;
|
||||
|
||||
if(R_FAILED(ret = svcSendSyncRequest(*pmDbgGetSessionHandle()))) return ret;
|
||||
return cmdbuf[1];
|
||||
|
@ -152,7 +152,6 @@ void server_run(struct sock_server *serv)
|
||||
|
||||
serv->running = true;
|
||||
svcSignalEvent(serv->started_event);
|
||||
|
||||
while(serv->running && !terminationRequest)
|
||||
{
|
||||
idx = -1;
|
||||
@ -205,6 +204,7 @@ void server_run(struct sock_server *serv)
|
||||
{
|
||||
fds[serv->nfds].fd = client_sockfd;
|
||||
fds[serv->nfds].events = POLLIN;
|
||||
fds[serv->nfds].revents = 0;
|
||||
|
||||
int new_idx = serv->nfds;
|
||||
serv->nfds++;
|
||||
@ -215,6 +215,7 @@ void server_run(struct sock_server *serv)
|
||||
new_ctx->serv = curr_ctx;
|
||||
new_ctx->i = new_idx;
|
||||
new_ctx->n = 0;
|
||||
new_ctx->should_close = false;
|
||||
|
||||
serv->ctx_ptrs[new_idx] = new_ctx;
|
||||
|
||||
@ -259,6 +260,14 @@ abort_connections:
|
||||
svcClearEvent(serv->started_event);
|
||||
}
|
||||
|
||||
void server_set_should_close_all(struct sock_server *serv)
|
||||
{
|
||||
nfds_t nfds = serv->nfds;
|
||||
|
||||
for(unsigned int i = 0; i < nfds; i++)
|
||||
serv->ctx_ptrs[i]->should_close = true;
|
||||
}
|
||||
|
||||
void server_kill_connections(struct sock_server *serv)
|
||||
{
|
||||
struct pollfd *fds = serv->poll_fds;
|
||||
|
Reference in New Issue
Block a user