当前位置:  开发笔记 > 前端 > 正文

在Delphi Win32应用程序中显示调用堆栈

如何解决《在DelphiWin32应用程序中显示调用堆栈》经验,为你挑选了3个好方法。

我想在Delphi 2007(Win32)的错误对话框中显示堆栈跟踪.

理想情况下,我喜欢这样的事情:

try
  //do something
except on e : exception do
  begin
    //rollback a transaction or whatever i need to do here       
    MessageDlg('An error has occurred!' + #13#10 +
                e.Message + #13#10 +
               'Here is the stack trace:' + #13#10 +
               e.StackTrace,mtError,[mbOK],0);
  end;  //except
end;  /try-except

并且输出与IDE中的调用堆栈类似:

MYPROGRAM.SomeFunction
MYPROGRAM.SomeProcedure
MYPROGRAM.MYPROGRAM
:7c817067 kernel32.RegisterWaitForInputIdle + 0x49

gabr.. 23

madExcept有一个方法StackTrace(在单元madStackTrace中)可以做到这一点.

JEDI代码库在JclDebug单元中提供类似的功能.



1> gabr..:

madExcept有一个方法StackTrace(在单元madStackTrace中)可以做到这一点.

JEDI代码库在JclDebug单元中提供类似的功能.


madExcept不能免费用于商业用途.JclDebug是免费和开源的.还有EurekaLog(http://www.eurekalog.com/)
为了逐步使用JEDI的JclDebug,我发现这很有用,http://robstechcorner.blogspot.com/2009/04/finding-hard-to-reproduce-errors.html [简单步骤部分]

2> Martin Binde..:

我们使用Exceptional Magic,它对我们非常有用.有了它你可以做这样的事情:

try
    raise Exception.Create('Something bad happened...');
except
    on e: Exception do begin
        CallStack := TStringList.Create;
        try
            ExceptionHook.LogException; // Logs call stack
            ExceptionHook.CallStack.Dump(CallStack);
            ShowMessage(CallStack.Text);
        finally
            CallStack.Free;
            end;
        end;
    end;

这会产生一个非常详细的调用堆栈:

Exception 'Exception' in module BOAppTemplate.exe at 003F3C36
Something bad happened...

Module: BOAppUnit, Source: BOAppUnit.pas, Line 66
Procedure: MyProcedure

Call stack:
:007F4C36 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 66)
:7C812AFB [kernel32.dll]
:007F4C36 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 66)
:00404DF4 [BOAppTemplate.exe] System::__linkproc__ AfterConstruction
Recursive call (2 times):
:007F4C36 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 66)
:007F4CE6 [BOAppTemplate.exe] MyProcedure (BOAppUnit.pas, line 79)
:007F4D22 [BOAppTemplate.exe] Boappunit::TBOAppForm::Button1Click (BOAppUnit.pas, line 82)
:004604C2 [BOAppTemplate.exe] Controls::TControl::Click
:004487FB [BOAppTemplate.exe] Stdctrls::TButton::Click
:004488F9 [BOAppTemplate.exe] Stdctrls::TButton::CNCommand
:0045FFBA [BOAppTemplate.exe] Controls::TControl::WndProc

Exceptional Magic只有25美元没有来源,所以它相对便宜.希望有所帮助!



3> Alex..:

您可能对本文感兴趣:" Delphi 2009及更高版本中的新异常类 ".

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有