X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2Fdebug.texi;h=958e51b3bafcb2e3288ed28aa58ed4605ddfe4da;hb=b47827fe69fdc8e486c91e094765cd94f3070086;hp=62d951add313c9a3f8ba48c304ff5b773594561f;hpb=4a7d35125ae6c0b5f244ae556af188de9a49765e;p=pintos-anon diff --git a/doc/debug.texi b/doc/debug.texi index 62d951a..958e51b 100644 --- a/doc/debug.texi +++ b/doc/debug.texi @@ -21,13 +21,12 @@ introduces you to a few of them. Don't underestimate the value of @func{printf}. The way @func{printf} is implemented in Pintos, you can call it from practically anywhere in the kernel, whether it's in a kernel thread or -an interrupt handler, almost regardless of what locks are held (but see -@ref{printf Reboots} for a counterexample). +an interrupt handler, almost regardless of what locks are held. @func{printf} is useful for more than just examining data. It can also help figure out when and where something goes wrong, even when the kernel crashes or panics without a useful error message. The -strategy is to sprinkle calls to @func{print} with different strings +strategy is to sprinkle calls to @func{printf} with different strings (e.g.@: @code{"<1>"}, @code{"<2>"}, @dots{}) throughout the pieces of code you suspect are failing. If you don't even see @code{<1>} printed, then something bad happened before that point, if you see @code{<1>} @@ -360,6 +359,8 @@ that links the elements. Example: @code{dumplist all_list thread all_elem} prints all elements of @struct{thread} that are linked in @code{struct list all_list} using the @code{struct list_elem all_elem} which is part of @struct{thread}. +(This assumes that you have added @code{all_list} and @code{all_elem} +yourself.) @end deffn @deffn {GDB Macro} btthread thread @@ -380,6 +381,8 @@ Example: @code{btthreadlist all_list all_elem} shows the backtraces of all threads contained in @code{struct list all_list}, linked together by @code{all_elem}. This command is useful to determine where your threads are stuck when a deadlock occurs. Please see the example scenario below. +(This assumes that you have added @code{all_list} and @code{all_elem} +yourself.) @end deffn @deffn {GDB Macro} btpagefault @@ -440,6 +443,10 @@ in your kernel, because your kernel should never crash. Starting with Project 3, the situation will change if you use @func{get_user} and @func{put_user} strategy to verify user memory accesses (@pxref{Accessing User Memory}). + +If you don't want GDB to stop for page faults, then issue the command +@code{handle SIGSEGV nostop}. GDB will still print a message for +every page fault, but it will not come back to a command prompt. @end deffn @node Example GDB Session