【问题标题】:C++ Builder Exception - StackTrace empty?C++ 生成器异常 - StackTrace 为空?
【发布时间】:2013-02-20 14:38:34
【问题描述】:

我想获取堆栈跟踪但它总是空的?

try{
    int a = 5, b = 0;
    int c = a/b;
}
catch(Exception &e){
    ShowMessage("Exception: " + e.Message + "\nStackTrace:" + e.StackTrace);
}

使用 C++ Builder XE2。

编辑:此代码在 TForm1::Button1Click 上执行。

【问题讨论】:

  • 你在你的主函数中吗?
  • 你确定被零除会导致Exception被抛出吗?
  • 是的,抛出异常。我更新了帖子。
  • 不是ShowMessage("Exception: " + e.Message() + "\nStackTrace:" + e.StackTrace());吗?
  • 没有。 StackTrace 是 UnicodeString(数据成员)。

标签: c++ exception c++builder stack-trace c++builder-xe2


【解决方案1】:

在这里找到答案: https://forums.embarcadero.com/thread.jspa?messageID=419807&tstart=0

但是,该属性默认返回一个空字符串。它被设计 因此第三方异常记录器(MadExcept、EurekaLog 等)可以挂钩 它提供实际的堆栈跟踪信息。为什么 Embarcadero 选择了 不提供自己的本地实现是任何人的猜测。

【讨论】:

  • 就像答案说的那样,您必须使用第三方解决方案,例如列出的产品之一,或者从头开始编写自己的解决方案。 Embarcadero 不提供自己的本机堆栈跟踪器。
  • 从您的答案中删除附加问题并将其标记为已接受。除非单独询问,否则其他 SO 用户不会注意到您的问题。如果您想知道如何使用 Embarcadero 提供的钩子实现堆栈跟踪,最好的方法是自己实现它,然后在遇到困难时创建一个新问题。
  • Embarcadero 论坛的上述链接已损坏。谁能提供更正的链接或论坛条目的缓存副本?
猜你喜欢
  • 2013-01-20
  • 2011-04-08
  • 2021-08-03
  • 2012-08-03
  • 2023-01-03
  • 1970-01-01
  • 2021-12-13
  • 2016-09-02
  • 2020-12-26
相关资源
最近更新 更多