如何在程序中得到调用堆栈? 就象在调试时按 ctrl + alt + s那样,显示出调用的函数堆栈不知道能不能实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 汗,我按ctrl + alt + s没反应 可以。这是我抄别的人,没有深入研究:看看高人是怎么说的: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. 参看开源的XAM和商业的EurekaLog这个 怎样停止线程 在线给分!在DbGridEH中添加记录时,怎样让新增记录的某几个字段默认值为上一条记录的? 如何不能让用户拖拉窗口 Database组件放在TRemoteDataModule组件中,如何输入Database组件的数据库连接参数(入用户名、密码等) 数据库连接的判断 关于Datasnap:讨论:取表格数据用哪种方法好一些? 如何使TImage控件能够接受键盘输入? 会用indy控件的进来看一下 请问怎样实现如下功能。。。??? 请问TNMPOP3? 浏览器来访问软件 采集摄像头拍照数据的三个问题,你能答的上来吗?
看看高人是怎么说的:
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.