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 ...
随机推荐
- PHP使用JSON通信
PHP使用JSON通信 php中使用JSON的Code如下 <?php header("Content-type: text/html; charset=utf-8"); $ ...
- Eclipse debug高级技巧(转)
Debug视图 认识debug视图,红色部分框为线程堆栈视图,黄色部分框为表达式.断点.变量视图,蓝色部分为代码视图. 线程堆栈视图 分别介绍一下这几个按钮的含义: 1.表示当前实现继续运行直到下一个 ...
- 在CentOS中将/var等已有目录挂载到新添加的硬盘
1.查看当前硬盘使用状况: [root@gluster_node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on / ...
- 优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】
RTOS中很经典的问题.就是在使用共享资源的时候,优先级低的进程在优先级高的进程之前执行的问题.这里模拟这种情况. 下面的实验模拟了优先级反转的情况: 先定义三个线程: //优先级反转实验 rt_se ...
- 如何使用一个对象而非数组元素为ng-options初始化
a,是引用,而b是一个和a内容相同的另一个对象, 因此不能通过b直接赋值.如果要这样用,就用 track by xxx.id ,它的作用是通过id(唯一的)去ng-options做一次检索匹配
- 关于import caffe出错的解决
[http://blog.csdn.net/wuzuyu365/article/details/52431062]关于在caffe下,import caffe报错的解决:conda install p ...
- java异常笔记
1:<java核心技术卷一>473页提到:如果在子类中覆盖了超类的一个方法,子类方法中声明的已检查异常不能超过超类方法中声明的异常范围. 显然,如果子类中抛出的异常范围比超类还大.多态将无 ...
- 注释驱动的 Spring cache 缓存介绍
概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...
- emacs配置eslint 语法检查.找不到node解决
使用emacs配置eslint 当调用语法检查时报错 Suspicious state from syntax checker javascript-eslint: Checker javascrip ...
- SQL加权限
grant view definition on 存储过程名字 to 用户名