标签: stack-trace

抛出“std::string”实例后调用终止

我有这个二进制文件通过抛出 std:string 类型的异常而崩溃。

来自剥离二进制文件的堆栈跟踪:

terminate called after throwing an instance of 'std::string'
*** Aborted at 1309483487 (unix time) try "date -d @1309483487" if you are using GNU date ***
PC: @       0x3fb0c30155 (unknown)
*** SIGABRT (@0xd54) received by PID 3412 (TID 0x40d03940) from PID 3412; stack trace: ***
    @       0x3fb180de70 (unknown)
    @       0x3fb0c30155 (unknown)
    @       0x3fb0c31bf0 (unknown)
    @     0x2aaaaab80cc4 (unknown)
    @     0x2aaaaab7ee36 (unknown)
    @     0x2aaaaab7ee63 (unknown)
    @     0x2aaaaab7ef4a (unknown)
    @           0x4c2622 XYZ::connect()
    @           0x4c3e0f XYZ::refresh()
    @       0x3fb18062f7 (unknown)
    @       0x3fb0cd1e3d …
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling stack-trace

2
推荐指数
1
解决办法
1万
查看次数

Java Appcrash问题

当我启动Java程序时,我收到此错误(使用带有Webcam的Xuggle-library):


问题签名:
问题事件名称:APPCRASH
应用程序名:java.exe的
应用程序版本:6.0.260.3
应用程序时间戳:4dc11607
故障模块名称:libxuggle轮渡-4.dll
故障模块版本:0.0.0.0
故障模块时间戳:4b9493c5
异常代码: 0000005
异常偏移:0000822a
OS版本:6.1.7601.2.1.0.256.48
区域设置ID:1031
其他信息1:0a9e
其他信息2:0a9e372d3b4ad19135b953a78882e789
附加信息3:0a9e
附加信息4:0a9e372d3b4ad19135b953a78882e789


我已经发现,c0000005是一种访问冲突.有没有办法解决这样的错误?或者我如何跟踪此错误(Stacktrace或其他东西,或者可能是某些工具)?Java是否为此类错误创建了日志文件.我在哪里可以找到它们?我的Java程序不会抛出任何异常.我刚刚得到这个appcrash和"Java结果:-xxxxxxx"(其中xxxxxx是一个大数字).

谢谢.

java crash stack-trace jvm-crash xuggle

2
推荐指数
1
解决办法
6034
查看次数

帮助理解堆栈跟踪:"#0 0x00000000 in ??()"

我正在尝试调试使用本机C代码的Android应用程序.我能够设置GDB并获得我的segfaulting的堆栈跟踪.我理解堆栈跟踪直到最顶层的项目:

#0  0x00000000 in ?? ()
#1  0x84601920 in fvalue_set (fv=0xe262c0, value=0x494530cc, already_copied=0) at ftypes.c:422
#2  0x845eaae8 in proto_tree_new_item (new_fi=0xe262c0, tree=<value optimized out>, tvb=0xe29080, start=14, length=11, encoding_arg=0) at proto.c:1429
#3  0x845eb2f8 in proto_tree_add_item (tree=<value optimized out>, hfindex=<value optimized out>, tvb=0xe29080, start=14, length=11, encoding=0) at proto.c:1760
#4  0x84a163dc in add_tagged_field (pinfo=<value optimized out>, tree=0xe245b8, tvb=0xe29080, offset=<value optimized out>) at packet-ieee80211.c:6272
#5  0x84a18e74 in ieee_80211_add_tagged_parameters (tvb=0xe29080, offset=12, pinfo=0x10f8978, tree=0xe24588, tagged_parameters_len=190) at packet-ieee80211.c:7914
#6  0x84a19094 in dissect_ieee80211_mgt (fcf=<value optimized out>, tvb=0xe29080, pinfo=0x10f8978, tree=0xe21dc0) …
Run Code Online (Sandbox Code Playgroud)

c debugging gdb stack-trace android-ndk

2
推荐指数
1
解决办法
3171
查看次数

ARM cortex m3 中的调用堆栈展开

我想创建一个调试工具来帮助我更好地调试我的应用程序。我正在工作(没有操作系统)。在 Atmel 的 SAM3 上使用 IAR 嵌入式工作台。

我有一个看门狗定时器,它会在超时的情况下调用特定的 IRQ(这将在发布时被软件重置替换)。在 IRQ 处理程序中,我想打印出(UART)堆栈跟踪,看门狗超时发生的确切位置。

我查看了网络,并没有找到该功能的任何实现。

任何人都知道如何处理这种事情?

编辑:好的,我设法从堆栈中获取返回地址,所以我确切地知道 WDT 超时发生的位置。展开整个堆栈并不像最初出现的那样简单,因为每个函数将不同数量的局部变量压入堆栈。

我最终得到的代码是这样的(对于其他人,可能会发现它有用)

void WDT_IrqHandler( void )
{
    uint32_t * WDT_Address;
    Wdt *pWdt = WDT ;
    volatile uint32_t dummy ;
    WDT_Address = (uint32_t *) __get_MSP() + 16 ;
    LogFatal ("Watchdog Timer timeout,The Return Address is %#X", *WDT_Address);
    /* Clear status bit to acknowledge interrupt */
    dummy = pWdt->WDT_SR ;

}
Run Code Online (Sandbox Code Playgroud)

c arm cortex-m3 stack-trace iar

2
推荐指数
1
解决办法
9411
查看次数

py.test Tracebacks:突出显示我的代码,折叠框架框架

自从我使用 pytest 以来,我的测试的回溯太长了。

Pytests 包括周围的代码行和许多其他信息。

如果回溯线(框架)来自我的代码,我希望看到此信息。但我不想看到它,如果它来自库或框架。

我找不到过滤或折叠框架的方法。

有什么提示吗?

8 年后更新:我认为是时候告别 ASCII 并拥抱 html 了。使用 html,您可以展开/折叠部分(就像在很棒的 django 调试视图中一样)。

不幸的是,似乎没有 pytest 输出可以为您提供像哨兵那样的良好界面。

python filter stack-trace traceback pytest

2
推荐指数
1
解决办法
502
查看次数

在 Go 中快速查找文件和行号引发错误的技巧?

在我的 go 之旅中发现没有堆栈跟踪。因此,每当出现问题时,我们都会收到一条简单的字符串错误消息,而没有任何信息来自何处。这与我习惯查看详细堆栈跟踪的其他语言形成鲜明对比

\n\n

例如,下面是来自apex的错误消息

\n\n
$ cat event.json | apex invoke --logs webhook                                  \n   \xe2\xa8\xaf error parsing response: json: cannot unmarshal array into Go value of type map[string]interface {}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里它告诉我解组到地图无法工作,因为它event.json是一个数组。我们已解组interface{}以支持数组和映射。但是,它并没有告诉我哪个文件/行导致了此错误。

\n\n

问题:

\n\n
    \n
  1. 有什么方法可以快速找到此错误来自哪个文件/行?
  2. \n
  3. 一般来说,地鼠是否可以使用一些提示/技巧来从该字符串错误消息中快速找到问题的根源?
  4. \n
  5. 大多数 go 项目的堆栈跟踪都是这样的,还是应该遵循任何最佳实践?
  6. \n
\n

debugging stack-trace go aws-lambda

2
推荐指数
1
解决办法
4549
查看次数

堆栈跟踪中没有函数名称,GDB,但出现在 LLDB 中

我目前正在尝试测试 Vector 类实现,并尝试使用 GDB 来查看错误发生的位置。

当我使用以下内容编译gcc -ggdb Vector.c TestVector.c并随后在 GDB 中运行它时,我得到以下输出(在崩溃并尝试打印堆栈跟踪之后):

| => gdb ./a.out
Reading symbols from ./a.out...Reading symbols from /Users/prog/Desktop/Generics/a.out.dSYM/Contents/Resources/DWARF/a.out...done.
done.
(gdb) r
Starting program: /Users/prog/Desktop/Generics/a.out
[New Thread 0x2703 of process 56984]
warning: unhandled dyld version (15)

Thread 2 received signal SIGSEGV, Segmentation fault.
0x00007fff65d97fe6 in ?? ()
(gdb) bt
#0  0x00007fff65d97fe6 in ?? ()
#1  0x00007ffeefbff640 in ?? ()
#2  0x00007fff65be4139 in ?? ()
#3  0x00007ffeefbff660 in ?? ()
#4  0x0000000000000000 in ?? ()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 这对于找出错误是由于回溯仅显示我的函数执行的绝对内存位置而没有特别帮助。 …

c macos gdb stack-trace lldb

2
推荐指数
1
解决办法
430
查看次数

小部件库'!children.any((Widget child)=> child == null)'抛出的异常:不是真的

嗨我在运行应用程序时收到以下错误可能是什么原因导致问题?

??? EXCEPTION CAUGHT BY WIDGETS LIBRARY ????????????????????????????????????????????????????????????
The following assertion was thrown building Home(dirty, state: _HomeState#f7a67):
'package:flutter/src/widgets/framework.dart': Failed assertion: line 1639: '!children.any((Widget
child) => child == null)': is not true. 

widget stack-trace dart flutter

2
推荐指数
1
解决办法
2133
查看次数

Stackwalker 的帧数少于 stacktrace 的元素数

我正在尝试使用 Java 9 的 Stackwalking API 并注意到收集的帧少于实际堆栈跟踪给出的帧。我想知道是否有可能获得相同数量的帧和元素?

看看下面的测试:

@Test
public void test() {
    NaughtyBusiness nb = new NaughtyBusiness();
    try {
        //This method throws an exception
        nb.callMeForGoodTime(NaughtyBusiness.AlcoholTolerance.LOW);
    } catch (Exception e) {
        StackTraceElement[] stackTrace = e.getStackTrace();

        StackWalker stackWalker = StackWalker.getInstance(StackWalker.Option.SHOW_HIDDEN_FRAMES);
        List<StackWalker.StackFrame> frames = 
                            stackWalker.walk(stackFrameStream -> stackFrameStream.collect(toList()));
       
        System.out.println(frames);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我调试代码,我会看到以下内容:

在此处输入图片说明

第一个明显的区别是 StacktraceElements 与 StackFrames 的数量(26 对 23)。但更令人惊讶的是,丢失的帧(用红色标记)是真正有趣的帧,即来自我的自定义代码,而两者共享的绿色部分只是样板。

因此,问题是,如何使用 StackWalking API 获取“丢失”的帧?我已经尝试了3个选项SHOW_HIDDEN_FRAMESRETAIN_CLASS_REFERENCESHOW_REFLECT_FRAMES但没有奏效。

java stack-trace java-9

2
推荐指数
1
解决办法
138
查看次数

如何使用 `fmt::format` 使 `boost::stacktrace` 格式化

我正在努力让 boost 的堆栈跟踪库与 fmt 互操作,问题似乎是我不能完全专门化一个 boost::stacktrace::basic_stacktrace。有人知道根本问题是什么吗?

#include <fmt/core.h>
#include <boost/stacktrace.hpp>

using BoostTraceStackFrame = std::remove_reference_t<decltype(boost::stacktrace::stacktrace().as_vector().front())>;
template <> struct fmt::formatter<BoostTraceStackFrame> : formatter<string_view>
{
    template <typename FORMAT_CONTEXT> auto format(const BoostTraceStackFrame &rhs, FORMAT_CONTEXT &ctx)
    {
        return fmt::format(ctx.out(), "{}:{}\n", rhs.source_file(), rhs.source_line());
    }
};

using BoostTraceType = std::remove_reference_t<decltype(boost::stacktrace::stacktrace())>;
template <> struct fmt::formatter<BoostTraceType> : formatter<string_view>
{
    //possibly BoostTraceType = boost::stacktrace::basic_stacktrace ?
    template <typename FORMAT_CONTEXT> auto format(const BoostTraceType &rhs, FORMAT_CONTEXT &ctx)
    {
        return fmt::format(ctx.out(), "{}", fmt::join(rhs.as_vector(), "\n"));
    }
};

int main()
{
 auto trace = boost::stacktrace::stacktrace();
 fmt::print("Foo trace …
Run Code Online (Sandbox Code Playgroud)

c++ boost stack-trace c++20 fmt

2
推荐指数
1
解决办法
76
查看次数