开源

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工程文件。

运行bat文件,弹出下面的界面,点install即可。
 
like this
http://stackoverflow.com/questions/32881718/installing-jvcl-into-delphi-10-seattle

 
 

JclDebug

jcl\source\windows\JclDebug.pas
这包含了个Demo
jcl\examples\windows\debug\stacktrack.dproj
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的更多相关文章

  1. Delphi与字符编码(实战篇)(MultiByteToWideChar会返回转换后的宽字符串长度)

    本文目标: 了解Delphi的字符串类型 字符编码的检测与转换 简体繁体转换 0. 导言 看完“.Net与字符编码(理论篇)”,我们明白了字符是自然语言中的最小单位,在存储和传输的过程中可以使用三种编 ...

  2. Delphi:基于jcl的Bugsplat Crash收集单元

    //BugSplat Crash模拟.net数据封装 unit uBugSplat; interface uses Windows, SysUtils, Classes, StrUtils, Shel ...

  3. Jedi项目,还真得好好看看,有许多控件和新封装的API(Delphi里面没有)

    以前没有重视 http://www.delphi-jedi.org/ https://github.com/project-jedi https://sourceforge.net/projects/ ...

  4. delphi代码实现创建dump文件

    I used a "watchdog" thread for this, which checks if the mainform is responding, and make ...

  5. Delphi:Exception输出堆栈信息

    起源: 用习惯了c#之Exception的StackTrace,在程序出异常crash时候能够以其定位出问题的模块及行号,用回Delphi 2009,发现没有这东西. 显然,在编译环境日新月异的今天, ...

  6. Delphi 控件大全

    delphi 控件大全(确实很全)   delphi 控件查询:http://www.torry.net/ http://www.jrsoftware.org Tb97 最有名的工具条(ToolBar ...

  7. delphi 控件大全(确实很全)

    delphi 控件查询:http://www.torry.net/ http://www.jrsoftware.org Tb97 最有名的工具条(ToolBar)控件库,仿Office97,如TDoC ...

  8. Delphi经验总结(2)

    Q: 怎么来改变ListBox的字体呢?就修改其中的一行. A: 先把ListBox1.Style 设成lbOwnerDrawFixed 然后在 OnDrawItem 事件下写下如下代码 proced ...

  9. DLL Injection with Delphi(转载)

    原始链接 I had recently spent some time playing around with the simple to use DelphiDetours package from ...

随机推荐

  1. PHPWord

    PHPWord中文乱码 我在 使用PHPWord$section->addText(),输出中文是遇到乱码,PHPWord 中文乱码解决如下: 第一步:打开phpword/Section.php ...

  2. float、定位、inline-block、兼容性需注意的特性总结

    inline-block 特性: 1.块在一排显示 2.内联支持宽高 3.默认内容撑开宽度 4.标签之间的换行间隙被解析(问题)[相当字体大小的一半] 5.ie6 ie7不支持块属性标签的inline ...

  3. 熟悉RT-Thread的软硬件环境【RT-Thread学习笔记 1】

    软件环境:Win7+MDK4.7.2 硬件环境:STM32F4Discovery 所用OS代码:RT-Thread2.0.0 beta 下载地址: https://github.com/RT-Thre ...

  4. VS2010 无法计算HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0@VCTargetPath处的属性表达式

    VS2010打开.csproj工程文件报错,不能加载,错误信息如下: 无法计算HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\1 ...

  5. java 事件监听 - 控件

    java 事件监听 //事件监听 //事件监听,写了一个小案例,点击按钮改变面板的颜色. import java.awt.*; import javax.swing.*; import java.aw ...

  6. BeanFactory vs ApplicationContext

    <ref:https://techythought.wordpress.com/2013/01/12/92/>

  7. Google protobuf proto文件编写规则

    转载自: http://blog.csdn.net/yi_ya/article/details/40404231 1. 简单介绍 protobuf文件:就是定义你要的消息(类似java中的类)和消息中 ...

  8. [转载]《民航科技》2012年4月专家论坛:罗喜伶《SWIM技术国际研究动态及对中国民航的借鉴意义》

    专家介绍:罗喜伶,北京航空航天大学电子信息工程学院副教授,工学博士,硕士生导师,国家空管新航行系统技术重点实验室和协同式网络化空中交通管理系统研究教育部创新团队核心成员,民航空管广域信息系统专家组成员 ...

  9. rpm命令

    RPM 安装.卸载.升级.查询和验证. RPM 安装 命令: rpm -i 文件名 如: rpm -i example.rpm 安装 example.rpm 包: rpm -iv example.rp ...

  10. android ImageView 中的ScaleType

    center :居中,不执行缩放 centerCrop:按原始比例缩放,裁剪中间部分 centerInside:按原始比例缩放,居中,不裁剪 fitCenter:居中缩放 fitStart:上对齐缩放 ...