就象在调试时按 ctrl + alt + s那样,显示出调用的函数堆栈
不知道能不能实现?

解决方案 »

  1.   

    汗,我按ctrl + alt + s没反应
      

  2.   

    可以。这是我抄别的人,没有深入研究:
    看看高人是怎么说的:
    http://blog.csdn.net/linzhengqun/archive/2007/07/13/1688690.aspx  unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      pStackFrame = ^TStackFrame;  TStackFrame = Record
        PrevFrame : pStackFrame;
        CallerAddr: Pointer;
      end;  TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        ListBox1: TListBox;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      m_SBase: pStackFrame;
      m_STop : Pointer;
    begin
      asm
        Mov m_SBase, EBP;
        Mov m_STop , ESP;
      end;  while (DWORD(m_SBase) < DWORD(m_STop^)) do
      begin
        ListBox1.Items.Add(Format('0x00%U', [LongInt(m_SBase.CallerAddr)]));
        m_SBase:= m_SBase.PrevFrame;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      p: PChar;
    begin
      p:= nil;
      p^:= 'a';
    end;end.
      

  3.   

    参看开源的XAM和商业的EurekaLog这个