【问题标题】:JclLastExceptStackListToStrings produces an empty string listJclLastExceptStackListToStrings 产生一个空字符串列表
【发布时间】:2011-01-16 12:12:15
【问题描述】:

我已将 JCL 安装到 Delphi 2010 中。在以下代码中

try
  raise Exception.Create('Error Message');
except
  on E: Exception do
  begin
    ResultStatus := JclLastExceptStackListToStrings(sl, True, True, True, True);
  end;
end;

我在初始化部分也有这个调用:

initialization
  JclStartExceptionTracking;

ResultStatus 为 false,sl 为空。我已经设置了生成地图和 .jdbg 文件的选项。其他功能,如 ProcByLevel 工作正常。我还需要做些什么来让 JclLastExceptStackListToStrings 工作吗?

来自 JclDebug.pas 文件:

最后修改时间:$Date:: 2010-09-07 19:43:19 +0200(2010 年 3 月 7 日) 修订:$Rev:: 3331

【问题讨论】:

  • 如果你回过头来说发生了什么事,并接受了有效的答案,那就太好了!
  • 不幸的是我不知道原因。我重新安装了所有东西(包括 IDE)并开始了一个新项目。所以这可能有很多原因,但我没有时间找到它到底是什么。
  • 我在使用 XE2 时得到了相同的行为。我发现我落后了 1 个例外。这意味着我在第二次通过时得到结果。

标签: delphi jedi-code-library


【解决方案1】:

尝试调用

JclStartExceptionTracking;

在您的应用程序的最开始。

[编辑]你已经是了。然后我目前没有建议。 [/编辑]

【讨论】:

  • 他在初始化部分调用它。你让他早点还是晚点打电话?如果更早,怎么做?
  • 当我发布这个答案时,他还没有提到这一点(检查编辑日志)。我会更新我的答案以避免混淆。
【解决方案2】:

我用:

JclStackTrackingOptions := [stStack, stExceptFrame, stRawMode, stAllModules, stStaticModuleList];

【讨论】:

    【解决方案3】:

    我在 Delphi XE 1 中解决了这个问题。

    1. 打开项目选项菜单
    2. 打开Delphi编译器树节点
    3. 选择链接树节点
    4. 启用调试信息复选框

    【讨论】:

      【解决方案4】:

      我已经被这个问题困扰了几天。 JCL 堆栈跟踪正在与我的程序一起工作,我能够查明错误位置。不知何故,它刚刚停止工作。

      然后我使用 JCL 的演示来查看它是否可以正常工作。它工作得很好。我将所有项目选项设置为与演示相同,但​​我的程序在演示每次运行时都没有转储堆栈。

      突然间,我注意到我的程序和演示程序之间的唯一区别是 CPU 架构。演示是 32 位的,我的程序是 64 位的。

      我将 JCL 演示编译为 64 位,但它也停止工作。它仅适用于 32 位代码。不是 64 位。

      不幸的是,我的程序需要 6-7 GB 的内存,而我无法使用 32 位模式。我建议使用 Eurekalog,因为它适用于两种架构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 1970-01-01
        • 2019-08-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多