Delphi JCL JEDI使用 jclDebug
开源
https://github.com/project-jedi/jcl
jclDebug
下载jcl,还要下载https://github.com/project-jedi/jedi里的2个inc文件
放到jcl-master\jcl\source\include\jedi目录里。
运行jcl\install.bat 安装。没有dpk工程文件。


JclDebug

unit StackTrackDemoMain; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, AppEvnts, ActnList; type
TMainForm = class(TForm)
ExceptionLogMemo: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
ListBox1: TListBox;
Button4: TButton;
ApplicationEvents: TApplicationEvents;
Label1: TLabel;
ActionList1: TActionList;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure ApplicationEventsException(Sender: TObject; E: Exception);
private
{ Private declarations }
public
{ Public declarations }
end; var
MainForm: TMainForm; implementation {$R *.DFM} uses
JclDebug; { TMainForm } //--------------------------------------------------------------------------------------------------
// Simulation of various unhandled exceptions
//-------------------------------------------------------------------------------------------------- procedure TMainForm.Button1Click(Sender: TObject);
begin
PInteger(nil)^ := ;
end; procedure TMainForm.Button2Click(Sender: TObject);
begin
ListBox1.Items[] := 'a';
end; procedure AAA;
begin
PInteger(nil)^ := ;
end; procedure TMainForm.Button3Click(Sender: TObject);
begin
AAA;
end; procedure TMainForm.Button4Click(Sender: TObject);
begin
ActionList1.Actions[].Execute;
end; //--------------------------------------------------------------------------------------------------
// Simple VCL application unhandled exception handler using JclDebug
//-------------------------------------------------------------------------------------------------- procedure TMainForm.ApplicationEventsException(Sender: TObject; E: Exception);
begin
// Log time stamp
ExceptionLogMemo.Lines.Add(DateTimeToStr(Now)); // Log unhandled exception stack info to ExceptionLogMemo
JclLastExceptStackListToStrings(ExceptionLogMemo.Lines, False, True, True, False); // Insert empty line
ExceptionLogMemo.Lines.Add(''); // Display default VCL unhandled exception dialog
Application.ShowException(E);
end; //--------------------------------------------------------------------------------------------------
// JclDebug initialization and finalization for VCL application
//-------------------------------------------------------------------------------------------------- initialization // Enable raw mode (default mode uses stack frames which aren't always generated by the compiler)
Include(JclStackTrackingOptions, stRawMode);
// Disable stack tracking in dynamically loaded modules (it makes stack tracking code a bit faster)
Include(JclStackTrackingOptions, stStaticModuleList); // Initialize Exception tracking
JclStartExceptionTracking; finalization // Uninitialize Exception tracking
JclStopExceptionTracking; end.
获取当前过程函数的名称
记得把上面的jcl debug的选项打开。
self.Caption:= JclDebug.GetLocationInfoStr(Caller(1));
http://delphi.wikia.com/wiki/JEDI_Code_Library
unit u_JclDebugTest; interface function CurrentFunctionName: string; type
TSomeClass = class
private
public
constructor Create;
destructor Destroy; override;
procedure Test;
end; implementation uses
JclDebug; { TSomeClass } constructor TSomeClass.Create;
begin
WriteLn(CurrentFunctionName);
end; destructor TSomeClass.Destroy;
begin
WriteLn(CurrentFunctionName);
inherited;
end; procedure TSomeClass.Test;
begin
WriteLn(CurrentFunctionName);
end; {$W+} function CurrentFunctionName: string;
begin
Result := jcldebug.GetLocationInfoStr(Caller());
end; end. program jcldebugtest; {$APPTYPE console} uses
u_JclDebugTest; procedure SomeProcedure;
begin
WriteLn(CurrentFunctionName);
with TSomeClass.Create do begin
Test;
Free;
end;
end; begin
WriteLn(CurrentFunctionName);
SomeProcedure;
WriteLn(CurrentFunctionName);
end. This program will output: [0042362D] jcldebugtest.jcldebugtest (Line , "jcldebugtest.dpr")
[004223A7] jcldebugtest.SomeProcedure (Line , "jcldebugtest.dpr")
[0042226C] u_JclDebugTest.TSomeClass.Create (Line , "u_JclDebugTest.pas")
[] u_JclDebugTest.TSomeClass.Test (Line , "u_JclDebugTest.pas")
[004222E5] u_JclDebugTest.TSomeClass.Destroy (Line , "u_JclDebugTest.pas")
[] jcldebugtest.jcldebugtest (Line , "jcldebugtest.dpr")
http://stackoverflow.com/questions/19450140/combining-log4delphi-and-jcl-debug
http://stackoverflow.com/questions/19496046/get-name-of-the-previous-calling-method
Delphi JCL JEDI使用 jclDebug的更多相关文章
- Delphi与字符编码(实战篇)(MultiByteToWideChar会返回转换后的宽字符串长度)
本文目标: 了解Delphi的字符串类型 字符编码的检测与转换 简体繁体转换 0. 导言 看完“.Net与字符编码(理论篇)”,我们明白了字符是自然语言中的最小单位,在存储和传输的过程中可以使用三种编 ...
- Delphi:基于jcl的Bugsplat Crash收集单元
//BugSplat Crash模拟.net数据封装 unit uBugSplat; interface uses Windows, SysUtils, Classes, StrUtils, Shel ...
- Jedi项目,还真得好好看看,有许多控件和新封装的API(Delphi里面没有)
以前没有重视 http://www.delphi-jedi.org/ https://github.com/project-jedi https://sourceforge.net/projects/ ...
- delphi代码实现创建dump文件
I used a "watchdog" thread for this, which checks if the mainform is responding, and make ...
- Delphi:Exception输出堆栈信息
起源: 用习惯了c#之Exception的StackTrace,在程序出异常crash时候能够以其定位出问题的模块及行号,用回Delphi 2009,发现没有这东西. 显然,在编译环境日新月异的今天, ...
- Delphi 控件大全
delphi 控件大全(确实很全) delphi 控件查询:http://www.torry.net/ http://www.jrsoftware.org Tb97 最有名的工具条(ToolBar ...
- delphi 控件大全(确实很全)
delphi 控件查询:http://www.torry.net/ http://www.jrsoftware.org Tb97 最有名的工具条(ToolBar)控件库,仿Office97,如TDoC ...
- Delphi经验总结(2)
Q: 怎么来改变ListBox的字体呢?就修改其中的一行. A: 先把ListBox1.Style 设成lbOwnerDrawFixed 然后在 OnDrawItem 事件下写下如下代码 proced ...
- DLL Injection with Delphi(转载)
原始链接 I had recently spent some time playing around with the simple to use DelphiDetours package from ...
随机推荐
- ILGenerator.Emit动态 MSIL编程(三)之动态代理
using System; using System.Linq; using System.Reflection; using System.Reflection.Emit; public seale ...
- .NET微信开发通过Access Token和OpenID获取用户信息
本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言. 本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息 ...
- office project 激活
office project 2010激活方式: 图上中,箭头位置,可能没激活,需要软件激活 ( mini-KMS Activator(Office2010激活工具) V1.2 绿色版 ) 激活方式如 ...
- 关于request.getParameterMap()的类型转换和数据获取
首先po上一个自己写的转换类. /** * @author Xfiler * @described 将request.getParameterMap()转换为普通的Map的工具方法 * @param ...
- 获取小众ftp服务器指定目录内容列表
今天获取小众ftp服务器指定目录内容列表时费劲急了. ///parama url="ftp://x.x.x.x/dir_name" public string GetFTPDir( ...
- 理解Condition的用法
这个示例中BoundedBuffer是一个固定长度的集合,这个在其put操作时,如果发现长度已经达到最大长度,那么会等待notFull信号,如果得到notFull信号会像集合中添加元素,并发出notE ...
- 关于Exception
Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" 1.java.lang ...
- AMap公交线路查询
<!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...
- ses_cations 值顺序
16个位置的字符所代表的操作依次如下: 1. ALTER 2. AUDIT 3.COMMENT 4.DELETE 5.GRANT 6.INDEX 7.INSERT 8.LOCK 9.RENAME 10 ...
- 尚学堂Spring视频教程(二):Spring控制反转
用Spring来实现IOC 在上节中我们自定义了一个接口BeanFactory和类ClassPathXmlApplicationContext来模拟Spring,其实它们在Spring中确实是存在的, ...