Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
58573f1d
Commit
58573f1d
authored
Nov 17, 2015
by
antirez
Browse files
Lua debugger: redis-cli can restart Lua debugging sessions.
parent
0cc19174
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/redis-cli.c
View file @
58573f1d
...
@@ -1106,6 +1106,12 @@ static void repl(void) {
...
@@ -1106,6 +1106,12 @@ static void repl(void) {
strcasecmp
(
argv
[
0
],
"exit"
)
==
0
)
strcasecmp
(
argv
[
0
],
"exit"
)
==
0
)
{
{
exit
(
0
);
exit
(
0
);
}
else
if
(
strcasecmp
(
argv
[
0
],
"restart"
)
==
0
)
{
if
(
config
.
eval_ldb
)
{
return
;
/* Return to evalMode to restart the session. */
}
else
{
printf
(
"Use 'restart' only in Lua debugging mode."
);
}
}
else
if
(
argc
==
3
&&
!
strcasecmp
(
argv
[
0
],
"connect"
))
{
}
else
if
(
argc
==
3
&&
!
strcasecmp
(
argv
[
0
],
"connect"
))
{
sdsfree
(
config
.
hostip
);
sdsfree
(
config
.
hostip
);
config
.
hostip
=
sdsnew
(
argv
[
1
]);
config
.
hostip
=
sdsnew
(
argv
[
1
]);
...
@@ -1169,59 +1175,83 @@ static int noninteractive(int argc, char **argv) {
...
@@ -1169,59 +1175,83 @@ static int noninteractive(int argc, char **argv) {
*--------------------------------------------------------------------------- */
*--------------------------------------------------------------------------- */
static
int
evalMode
(
int
argc
,
char
**
argv
)
{
static
int
evalMode
(
int
argc
,
char
**
argv
)
{
sds
script
=
sdsempty
()
;
sds
script
=
NULL
;
FILE
*
fp
;
FILE
*
fp
;
char
buf
[
1024
];
char
buf
[
1024
];
size_t
nread
;
size_t
nread
;
char
**
argv2
;
char
**
argv2
;
int
j
,
got_comma
=
0
,
keys
=
0
;
int
j
,
got_comma
,
keys
;
int
retval
=
REDIS_OK
;
/* Load the script from the file, as an sds string. */
while
(
1
)
{
fp
=
fopen
(
config
.
eval
,
"r"
);
if
(
config
.
eval_ldb
)
{
if
(
!
fp
)
{
printf
(
fprintf
(
stderr
,
"Lua debugging session started, please use:
\n
"
"Can't open file '%s': %s
\n
"
,
config
.
eval
,
strerror
(
errno
));
"quit -- End the session.
\n
"
exit
(
1
);
"restart -- Restart the script in debug mode again.
\n
"
}
"help -- Show Lua script debugging commands.
\n\n
"
while
((
nread
=
fread
(
buf
,
1
,
sizeof
(
buf
),
fp
))
!=
0
)
{
);
script
=
sdscatlen
(
script
,
buf
,
nread
);
}
}
fclose
(
fp
);
/* If we are debugging a script, enable the Lua debugger. */
sdsfree
(
script
);
if
(
config
.
eval_ldb
)
{
script
=
sdsempty
();
redisReply
*
reply
=
redisCommand
(
context
,
got_comma
=
0
;
config
.
eval_ldb_sync
?
"SCRIPT DEBUG sync"
:
"SCRIPT DEBUG yes"
);
keys
=
0
;
if
(
reply
)
freeReplyObject
(
reply
);
}
/* Create our argument vector */
/* Load the script from the file, as an sds string. */
argv2
=
zmalloc
(
sizeof
(
sds
)
*
(
argc
+
3
));
fp
=
fopen
(
config
.
eval
,
"r"
);
argv2
[
0
]
=
sdsnew
(
"EVAL"
);
if
(
!
fp
)
{
argv2
[
1
]
=
script
;
fprintf
(
stderr
,
for
(
j
=
0
;
j
<
argc
;
j
++
)
{
"Can't open file '%s': %s
\n
"
,
config
.
eval
,
strerror
(
errno
));
if
(
!
got_comma
&&
argv
[
j
][
0
]
==
','
&&
argv
[
j
][
1
]
==
0
)
{
exit
(
1
);
got_comma
=
1
;
}
continue
;
while
((
nread
=
fread
(
buf
,
1
,
sizeof
(
buf
),
fp
))
!=
0
)
{
script
=
sdscatlen
(
script
,
buf
,
nread
);
}
fclose
(
fp
);
/* If we are debugging a script, enable the Lua debugger. */
if
(
config
.
eval_ldb
)
{
redisReply
*
reply
=
redisCommand
(
context
,
config
.
eval_ldb_sync
?
"SCRIPT DEBUG sync"
:
"SCRIPT DEBUG yes"
);
if
(
reply
)
freeReplyObject
(
reply
);
}
/* Create our argument vector */
argv2
=
zmalloc
(
sizeof
(
sds
)
*
(
argc
+
3
));
argv2
[
0
]
=
sdsnew
(
"EVAL"
);
argv2
[
1
]
=
script
;
for
(
j
=
0
;
j
<
argc
;
j
++
)
{
if
(
!
got_comma
&&
argv
[
j
][
0
]
==
','
&&
argv
[
j
][
1
]
==
0
)
{
got_comma
=
1
;
continue
;
}
argv2
[
j
+
3
-
got_comma
]
=
sdsnew
(
argv
[
j
]);
if
(
!
got_comma
)
keys
++
;
}
}
argv2
[
j
+
3
-
got_comma
]
=
sdsnew
(
argv
[
j
]);
argv2
[
2
]
=
sdscatprintf
(
sdsempty
(),
"%d"
,
keys
);
if
(
!
got_comma
)
keys
++
;
}
/* Call it */
argv2
[
2
]
=
sdscatprintf
(
sdsempty
(),
"%d"
,
keys
);
int
eval_ldb
=
config
.
eval_ldb
;
/* Save it, may be reverteed. */
retval
=
issueCommand
(
argc
+
3
-
got_comma
,
argv2
);
/* Call it */
if
(
eval_ldb
)
{
int
eval_ldb
=
config
.
eval_ldb
;
/* Save it, may be reverteed. */
if
(
!
config
.
eval_ldb
)
{
int
retval
=
issueCommand
(
argc
+
3
-
got_comma
,
argv2
);
/* If the debugging session ended immediately, there was an
if
(
eval_ldb
)
{
* error compiling the script. Show it and don't enter
if
(
!
config
.
eval_ldb
)
{
* the REPL at all. */
/* If the debugging session ended immediately, there was an
printf
(
"Eval debugging session can't start:
\n
"
);
* error compiling the script. Show it and don't enter
cliReadReply
(
0
);
* the REPL at all. */
break
;
/* Return to the caller. */
printf
(
"Eval debugging session can't start:
\n
"
);
}
else
{
cliReadReply
(
0
);
strncpy
(
config
.
prompt
,
"lua debugger> "
,
sizeof
(
config
.
prompt
));
repl
();
/* Restart the session if repl() returned. */
cliConnect
(
1
);
printf
(
"
\n
"
);
}
}
else
{
}
else
{
strncpy
(
config
.
prompt
,
"lua debugger> "
,
sizeof
(
config
.
prompt
));
break
;
/* Return to the caller. */
repl
();
}
}
}
}
return
retval
;
return
retval
;
...
...
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