mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 19:33:16 +00:00
Re-use (better) stack backtrace function
svn path=/trunk/; revision=13423
This commit is contained in:
parent
bda30e3034
commit
cb884ccdb4
1 changed files with 3 additions and 45 deletions
|
@ -1,5 +1,4 @@
|
||||||
/* $Id:$
|
/*
|
||||||
*
|
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
* FILE: ntoskrnl/ke/i386/exp.c
|
* FILE: ntoskrnl/ke/i386/exp.c
|
||||||
|
@ -393,9 +392,7 @@ VOID
|
||||||
KiDumpTrapFrame(PKTRAP_FRAME Tf, ULONG Parameter1, ULONG Parameter2)
|
KiDumpTrapFrame(PKTRAP_FRAME Tf, ULONG Parameter1, ULONG Parameter2)
|
||||||
{
|
{
|
||||||
ULONG cr3_;
|
ULONG cr3_;
|
||||||
ULONG i;
|
|
||||||
ULONG StackLimit;
|
ULONG StackLimit;
|
||||||
PULONG Frame;
|
|
||||||
ULONG Esp0;
|
ULONG Esp0;
|
||||||
ULONG ExceptionNr = (ULONG)Tf->DebugArgMark;
|
ULONG ExceptionNr = (ULONG)Tf->DebugArgMark;
|
||||||
ULONG cr2 = (ULONG)Tf->DebugPointer;
|
ULONG cr2 = (ULONG)Tf->DebugPointer;
|
||||||
|
@ -462,46 +459,7 @@ KiDumpTrapFrame(PKTRAP_FRAME Tf, ULONG Parameter1, ULONG Parameter2)
|
||||||
/*
|
/*
|
||||||
* Dump the stack frames
|
* Dump the stack frames
|
||||||
*/
|
*/
|
||||||
DbgPrint("Frames: ");
|
KeDumpStackFrames((PULONG)Tf->Ebp);
|
||||||
/* Change to an #if 0 if no frames are printed because of fpo. */
|
|
||||||
#if 1
|
|
||||||
i = 1;
|
|
||||||
Frame = (PULONG)Tf->Ebp;
|
|
||||||
while (Frame != NULL)
|
|
||||||
{
|
|
||||||
NTSTATUS Status;
|
|
||||||
PVOID Eip;
|
|
||||||
Status = MmSafeCopyFromUser(&Eip, Frame + 1, sizeof(Eip));
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
DbgPrint("<INVALID>");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!KeRosPrintAddress(Eip))
|
|
||||||
{
|
|
||||||
DbgPrint("<%X>", Eip);
|
|
||||||
}
|
|
||||||
Status = MmSafeCopyFromUser(&Frame, Frame, sizeof(Frame));
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
DbgPrint(" ");
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
i = 1;
|
|
||||||
Frame = (PULONG)((ULONG_PTR)Esp0 + KTRAP_FRAME_EFLAGS);
|
|
||||||
while (Frame < (PULONG)PsGetCurrentThread()->Tcb.StackBase && i < 50)
|
|
||||||
{
|
|
||||||
ULONG Address = *Frame;
|
|
||||||
if (KeRosPrintAddress((PVOID)Address))
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
Frame++;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ULONG
|
ULONG
|
||||||
|
@ -616,7 +574,7 @@ KeDumpStackFrames(PULONG Frame)
|
||||||
ULONG ResultLength = sizeof(mbi);
|
ULONG ResultLength = sizeof(mbi);
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
DbgPrint("Frames: ");
|
DbgPrint("Frames:\n");
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
Status = MiQueryVirtualMemory (
|
Status = MiQueryVirtualMemory (
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue