Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
3723c2c8
Commit
3723c2c8
authored
Oct 23, 1999
by
Ulrich Weigand
Committed by
Alexandre Julliard
Oct 23, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bugfix: Perform proper process shutdown on 'quit' and error.
parent
c6ad2b6f
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
48 additions
and
31 deletions
+48
-31
dbg.y
debugger/dbg.y
+41
-25
debug.l
debugger/debug.l
+2
-2
expr.c
debugger/expr.c
+4
-4
debugger.h
include/debugger.h
+1
-0
No files found.
debugger/dbg.y
View file @
3723c2c8
...
...
@@ -123,7 +123,7 @@ line: command
| error tEOL { yyerrok; }
command:
tQUIT tEOL {
e
xit(0); }
tQUIT tEOL {
DEBUG_E
xit(0); }
| tHELP tEOL { DEBUG_Help(); }
| tHELP tINFO tEOL { DEBUG_HelpInfo(); }
| tCONT tEOL { dbg_exec_count = 1;
...
...
@@ -431,6 +431,41 @@ void mode_command(int newmode)
else fprintf(stderr,"Invalid mode (use 16 or 32)\n");
}
/***********************************************************************
* DEBUG_Freeze
*/
static void DEBUG_Freeze( BOOL freeze )
{
static BOOL frozen = FALSE;
if ( freeze && !frozen )
{
/* Don't freeze thread currently holding the X crst! */
EnterCriticalSection( &X11DRV_CritSection );
CLIENT_DebuggerRequest( DEBUGGER_FREEZE_ALL );
LeaveCriticalSection( &X11DRV_CritSection );
frozen = TRUE;
}
if ( !freeze && frozen )
{
CLIENT_DebuggerRequest( DEBUGGER_UNFREEZE_ALL );
frozen = FALSE;
}
}
/***********************************************************************
* DEBUG_Exit
*
* Kill current process.
*/
void DEBUG_Exit( DWORD exit_code )
{
DEBUG_Freeze( FALSE );
TASK_KillTask( 0 ); /* FIXME: should not be necessary */
TerminateProcess( GetCurrentProcess(), exit_code );
}
/***********************************************************************
* DEBUG_Main
...
...
@@ -440,7 +475,6 @@ void mode_command(int newmode)
static void DEBUG_Main( BOOL is_debug )
{
static int loaded_symbols = 0;
static BOOL frozen = FALSE;
static BOOL in_debugger = FALSE;
char SymbolTableFile[256];
int newmode;
...
...
@@ -452,7 +486,7 @@ static void DEBUG_Main( BOOL is_debug )
if (in_debugger)
{
fprintf( stderr, " inside debugger, exiting.\n" );
e
xit(1);
DEBUG_E
xit(1);
}
in_debugger = TRUE;
yyin = stdin;
...
...
@@ -472,14 +506,7 @@ static void DEBUG_Main( BOOL is_debug )
{
loaded_symbols++;
if ( !frozen )
{
/* Don't freeze thread currently holding the X crst! */
EnterCriticalSection( &X11DRV_CritSection );
CLIENT_DebuggerRequest( DEBUGGER_FREEZE_ALL );
LeaveCriticalSection( &X11DRV_CritSection );
frozen = TRUE;
}
DEBUG_Freeze( TRUE );
#ifdef DBG_need_heap
/*
...
...
@@ -540,14 +567,7 @@ static void DEBUG_Main( BOOL is_debug )
GlobalUnlock16( GetCurrentTask() );
if ( !frozen )
{
/* Don't freeze thread currently holding the X crst! */
EnterCriticalSection( &X11DRV_CritSection );
CLIENT_DebuggerRequest( DEBUGGER_FREEZE_ALL );
LeaveCriticalSection( &X11DRV_CritSection );
frozen = TRUE;
}
DEBUG_Freeze( TRUE );
/* Put the display in a correct state */
USER_Driver->pBeginDebugging();
...
...
@@ -619,11 +639,7 @@ static void DEBUG_Main( BOOL is_debug )
{
dbg_exec_count = 0;
if ( frozen )
{
CLIENT_DebuggerRequest( DEBUGGER_UNFREEZE_ALL );
frozen = FALSE;
}
DEBUG_Freeze( FALSE );
}
in_debugger = FALSE;
...
...
@@ -645,7 +661,7 @@ DWORD wine_debugger( EXCEPTION_RECORD *rec, CONTEXT *context, BOOL first_chance
is_debug = TRUE;
break;
case CONTROL_C_EXIT:
if (!Options.debug)
e
xit(0);
if (!Options.debug)
DEBUG_E
xit(0);
break;
}
...
...
debugger/debug.l
View file @
3723c2c8
...
...
@@ -239,7 +239,7 @@ static int dbg_read(char * buf, int size)
if (!line)
{
fprintf( stderr, "\n" );
e
xit(0);
DEBUG_E
xit(0);
}
/* Remove leading and trailing whitespace from the line */
...
...
@@ -264,7 +264,7 @@ static int dbg_read(char * buf, int size)
if (size < len + 1)
{
fprintf(stderr,"Fatal readline goof.\n");
e
xit(0);
DEBUG_E
xit(0);
}
strcpy(buf, line);
buf[len] = '\n';
...
...
debugger/expr.c
View file @
3723c2c8
...
...
@@ -634,7 +634,7 @@ DEBUG_EvalExpr(struct expr * exp)
break
;
default:
fprintf
(
stderr
,
"Unexpected expression.
\n
"
);
e
xit
(
123
);
DEBUG_E
xit
(
123
);
break
;
}
...
...
@@ -794,7 +794,7 @@ DEBUG_DisplayExpr(struct expr * exp)
break
;
default:
fprintf
(
stderr
,
"Unexpected expression.
\n
"
);
e
xit
(
123
);
DEBUG_E
xit
(
123
);
break
;
}
...
...
@@ -855,7 +855,7 @@ DEBUG_CloneExpr(struct expr * exp)
break
;
default:
fprintf
(
stderr
,
"Unexpected expression.
\n
"
);
e
xit
(
123
);
DEBUG_E
xit
(
123
);
break
;
}
...
...
@@ -912,7 +912,7 @@ DEBUG_FreeExpr(struct expr * exp)
break
;
default:
fprintf
(
stderr
,
"Unexpected expression.
\n
"
);
e
xit
(
123
);
DEBUG_E
xit
(
123
);
break
;
}
...
...
include/debugger.h
View file @
3723c2c8
...
...
@@ -317,6 +317,7 @@ extern void DEBUG_Disassemble( const DBG_ADDR *, const DBG_ADDR*, int offset );
/* debugger/dbg.y */
extern
DWORD
wine_debugger
(
EXCEPTION_RECORD
*
rec
,
CONTEXT
*
context
,
BOOL
first_chance
);
extern
void
DEBUG_Exit
(
DWORD
exit_code
);
/* Choose your allocator! */
#if 1
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment