首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么在程序中得到调用堆栈

2012-03-19 
如何在程序中得到调用堆栈?就象在调试时按ctrl+alt+s那样,显示出调用的函数堆栈不知道能不能实现?[解决办

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

[解决办法]
汗,我按ctrl + alt + s没反应
[解决办法]
我还没有到那个级别,帮顶
[解决办法]
可以。

这是我抄别的人,没有深入研究:
看看高人是怎么说的:
http://blog.csdn.net/linzhengqun/archive/2007/07/13/1688690.aspx

unit Unit1;

interface

uses
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.
[解决办法]
不错
[解决办法]
参看开源的XAM和商业的EurekaLog这个
[解决办法]
什么呀

热点排行