标签: stack-overflow

Maven编译:执行javac失败

以下是我们尝试使用Maven 2.2.1和JDK 1.6.0_23在Windows Server 2003下编译新签出的代码时遇到的异常.运行具有相同Maven和JDK版本的Ubuntu的几台机器在编译完全相同的源时没有任何问题.

试过提供替代Maven选项(即MAVEN_OPTS = -Xms256m -Xmx1024m)无济于事.

可能是什么原因导致这个问题以及可能的解决方案是什么?感谢名单.

[INFO] Compilation failure

Failure executing javac, but could not parse the error:


The system is out of resources.
Consult the following stack trace for details.
java.lang.StackOverflowError
    at com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:1799)
    at com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1522)
    at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360)
    at com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:377)
    at com.sun.tools.javac.comp.Attr.visitApply(Attr.java:1241)
    at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1210)
    at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:360)
   ... then trace repeats multiple times
Run Code Online (Sandbox Code Playgroud)

java stack-overflow maven-2

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

线程退出与未捕获的异常:没有堆栈跟踪

我的应用程序导致一个强制关闭某个地方,但我没有在我的LogCat中获得通常(且信息量很大)堆栈跟踪的致命异常,我只收到以下4行:

06-27 07:08:54.546: D/dalvikvm(14351): GC_FOR_MALLOC freed 9923 objects / 657416 bytes in 21ms
06-27 07:08:54.769: W/dalvikvm(14351): threadid=20: thread exiting with uncaught exception (group=0x4001d7f0)
06-27 07:08:54.796: W/dalvikvm(14351): threadid=21: thread exiting with uncaught exception (group=0x4001d7f0)
06-27 07:08:54.796: I/Process(14351): Sending signal. PID: 14351 SIG: 9
Run Code Online (Sandbox Code Playgroud)

这是在DEBUG模式下,LogCat上没有应用过滤器!

  • 什么可能导致这种行为?
  • 有没有办法告诉导致此异常的原因?

更新:感谢下面的@assylias,我已经能够实现:

final UncaughtExceptionHandler subclass = Thread.currentThread().getUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
    Log.getStackTraceString(paramThrowable);

    subclass.uncaughtException(paramThread, paramThrowable);
    }
});
Run Code Online (Sandbox Code Playgroud)

这产生了这些增加的线:

06-27 08:24:47.105: D/dalvikvm(15475): GC_FOR_MALLOC freed 13865 objects / 1435952 bytes in …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow android stack-trace uncaught-exception

11
推荐指数
1
解决办法
8065
查看次数

使用fgets导致缓冲区溢出

我正在尝试缓冲区溢出,并尝试使用一定的fgets输入覆盖堆栈的返回地址

这是代码:

void foo()
{
    fprintf(stderr, "You did it.\n");
}

void bar()
{
    char buf[20];
    puts("Input:");
    fgets(buf, 24, stdin);
    printf("Your input:.\n", strlen(buf));
}


int main(int argc, char **argv)
{
    bar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在正常执行时,程序只返回您的输入.我希望它输出foo()而不修改代码.

我的想法是buf通过进入20 'A'秒来溢出缓冲区.这会起作用并导致分段错误.我的下一个想法是找出其中的地址并将foo()\x4006cd附加到20 'A'秒.

根据我的理解,这应该覆盖堆栈的返回地址并使其跳转到foo.但它只会导致段错误.

我究竟做错了什么?

更新:汇编程序转储主要

    Dump of assembler code for function main:
   0x000000000040073b <+0>: push   %rbp
   0x000000000040073c <+1>: mov    %rsp,%rbp
   0x000000000040073f <+4>: sub    $0x10,%rsp
   0x0000000000400743 <+8>: mov    %edi,-0x4(%rbp)
   0x0000000000400746 <+11>:    mov    %rsi,-0x10(%rbp)
   0x000000000040074a <+15>:    mov …
Run Code Online (Sandbox Code Playgroud)

c stack-overflow buffer overflow fortify-source

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

递归main() - 为什么会出现段错误?

为什么以下程序会出现段错误?

int main() { main(); }
Run Code Online (Sandbox Code Playgroud)

即使它是一个没有结束的递归,因此根据定义也是无效的,我不明白它为什么是segfaults(gcc 4.4.3和clang 1.5(trunk)).

c stack-overflow segmentation-fault

10
推荐指数
3
解决办法
3797
查看次数

如何在Java中重现EXCEPTION_STACK_OVERFLOW错误

如何在Java中重现EXCEPTION_STACK_OVERFLOW错误.

PS:我不是在谈论优雅地关闭JVM的Java中的StackOverflowError错误.我在讨论error.log中的EXCEPTION_STACK_OVERFLOW,这会导致JVM崩溃.

java stack-overflow crash jvm crash-dumps

10
推荐指数
1
解决办法
1196
查看次数

功能参数最大数量

我没有发现C99标准中计数函数参数的任何限制,我想它只受堆栈大小的限制.

但是,我编写了一个简单的测试程序来演示具有大量参数的函数的行为.当它大约10k时,我在gcc上遇到以下错误(gg版本4.5.3在Cygwin上):

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../libcygwin.a(libcmain.o):(.text+0xa9): undefined reference to `_WinMain@16'
Run Code Online (Sandbox Code Playgroud)

我意识到如此大量的参数不太可能,但我想知道编译器的哪个参数决定了这个限制?

编辑

脚本生成C源代码

#!/bin/sh

num=$1

echo "" > out.c
echo "#include <stdio.h>" >> out.c

echo "int getsum( " >> out.c

i=0
while [ $i -lt $num ]
do
    ((i++))
    if [ $i -eq $num ] 
    then
        echo "int p$i )" >> out.c
    else 
        echo -ne "int p$i," >> out.c
    fi
done

echo "{" >> out.c

echo -ne "  return " >> out.c

i=0
while [ $i -lt $num ]
do
    ((i++))
        if [ …
Run Code Online (Sandbox Code Playgroud)

c stack-overflow parameter-passing

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

如何扩展Java堆栈跟踪的大小以查看堆栈的底部?(触发堆栈溢出)

在Java中,有没有办法查看完整的,未截断的堆栈跟踪(例如,通过增加记录的帧数),或以其他方式获取堆栈跟踪的底部?通常情况下,堆栈跟踪在1024帧的情况下从顶部被截断,但是对于堆栈溢出问题,这实际上是毫无价值的,因为您确实需要查看是谁进行了触发递归的调用,靠近底部.更好的是在堆栈中间截断,但显然Sun的JVM不够聪明,无法做到这一点.

甚至可能是一些特殊的Sun特定标志?我尝试将堆栈大小减小到允许的最小值(-Xss1000),但仍然超过1024帧.

就我而言,我正在尝试调试Hadoop映射器中发生的堆栈溢出,但仅限于在非常大的输入上运行时.我假设问题来了,因为递归操作(Scala foldRight)正在一个非常大的链表上完成,我需要非递归地重写它...但我需要知道是谁调用了它foldRight.这是一个直接和间接在很多地方调用的基本例程,我正在使用很多很多代码,所以这是非常不明显的.

java stack-overflow debugging scala stack-frame

10
推荐指数
1
解决办法
8637
查看次数

Gson 2.2.2仅在4.2.1上引起stackoverflow

我正在开发一个Android应用程序,它使用JSON字符串从服务器下载兴趣点.一切都工作正常但是因为我已经开始测试4.2.1,我收到了以下错误:

01-28 15:32:14.167: E/AndroidRuntime(31174): FATAL EXCEPTION: AsyncTask #1
01-28 15:32:14.167: E/AndroidRuntime(31174): java.lang.RuntimeException: An error occured while executing doInBackground()
01-28 15:32:14.167: E/AndroidRuntime(31174):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at java.lang.Thread.run(Thread.java:856)
01-28 15:32:14.167: E/AndroidRuntime(31174): Caused by: java.lang.StackOverflowError
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:371)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
01-28 15:32:14.167: E/AndroidRuntime(31174):    at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
01-28 …
Run Code Online (Sandbox Code Playgroud)

stack-overflow android json gson android-4.2-jelly-bean

10
推荐指数
1
解决办法
5072
查看次数

由于递归导致的java.lang.StackOverflowError

我的问题是,当我使用递归时,我通常会得到一个java.lang.StackOverflowError.我的问题是 - 为什么递归导致stackoverflow比循环更多,并且是否有任何使用递归来避免堆栈溢出的好方法?

这是一个解决问题107的尝试,它适用于他们的示例,但是为了自身的问题耗尽了堆栈空间.

//-1 16 12 21 -1 -1 -1 16 -1 -1 17 20 -1 -1 12 -1 -1 28 -1 31 -1 21 17 28 -1 18 19 23 -1 20 -1 18 -1 -1 11 -1 -1 31 19 -1 -1 27 -1 -1 -1 23 11 27 -1
public class tries
{
    public static int n=7,min=Integer.MAX_VALUE;
    public static boolean[][] wasHere=new boolean[n][60000];
    public static void main(String[] args)
    {
        int[] lines=new int[n]; Arrays.fill(lines, -1000); lines[0]=0; …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow recursion

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

如何解决R Studio中的"保护堆栈溢出"问题

我正在尝试使用glmnet包构建模型,但是当我运行以下行时出现以下错误:

#library('glmnet')
x = model.matrix(response ~ ., data = acgh_frame[,c(3:ncol(acgh_frame))])

Error: protect(): protection stack overflow
Run Code Online (Sandbox Code Playgroud)

我知道这是由于我在数据帧中有大量变量(26​​k +).当我使用较少的变量时,错误不会显示.我知道如何在命令行R中解决这个问题,但我需要留在R studio中,所以我想从R Studio修复它.那么,我该怎么做?

stack-overflow r rstudio glmnet

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