projects
/
pintos-anon
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add a suggestion to use `backtrace' and a reference to the manual to
[pintos-anon]
/
src
/
lib
/
debug.c
diff --git
a/src/lib/debug.c
b/src/lib/debug.c
index 2388a2daa3f23c7773c21094122b13c17c413610..4f0f5f303cf933dab61c1b1e6f723d7ed7b8bb6b 100644
(file)
--- a/
src/lib/debug.c
+++ b/
src/lib/debug.c
@@
-5,6
+5,7
@@
#include <stdio.h>
#include <string.h>
#ifdef KERNEL
#include <stdio.h>
#include <string.h>
#ifdef KERNEL
+#include "threads/init.h"
#include "threads/interrupt.h"
#include "devices/serial.h"
#else
#include "threads/interrupt.h"
#include "devices/serial.h"
#else
@@
-61,8
+62,9
@@
debug_message (const char *file, int line, const char *function,
}
}
}
}
-/* Halts the OS, printing the source file name, line number, and
- function name, plus a user-specific message. */
+/* Halts the OS or user program, printing the source file name,
+ line number, and function name, plus a user-specific
+ message. */
void
debug_panic (const char *file, int line, const char *function,
const char *message, ...)
void
debug_panic (const char *file, int line, const char *function,
const char *message, ...)
@@
-73,7
+75,12
@@
debug_panic (const char *file, int line, const char *function,
intr_disable ();
#endif
intr_disable ();
#endif
- printf ("PANIC at %s:%d in %s(): ", file, line, function);
+#ifdef KERNEL
+ printf ("Kernel PANIC at %s:%d in %s(): ", file, line, function);
+#else
+ printf ("User process panic at %s:%d in %s(): ", file, line, function);
+#endif
+
va_start (args, message);
vprintf (message, args);
printf ("\n");
va_start (args, message);
vprintf (message, args);
printf ("\n");
@@
-81,8
+88,14
@@
debug_panic (const char *file, int line, const char *function,
debug_backtrace ();
debug_backtrace ();
+ printf ("The `backtrace' program can make call stacks useful.\n"
+ "Read \"Backtraces\" in the \"Debugging Tools\" chapter\n"
+ "of the Pintos documentation for more information.\n");
+
#ifdef KERNEL
serial_flush ();
#ifdef KERNEL
serial_flush ();
+ if (power_off_when_done)
+ power_off ();
for (;;);
#else
exit (1);
for (;;);
#else
exit (1);