PHP如何导致内存泄漏,缓冲区溢出,堆栈溢出以及此类任何其他错误?PHP甚至会导致这样的错误吗?
从昨天起我每次在Eclipse中为Android UI打开布局编辑器时都会遇到以下异常:
未处理的事件循环异常
java.lang.StackOverflowError
at com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite.isTheme(Unknown Source)
at
com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite.isTheme(Unknown Source)
at...
Run Code Online (Sandbox Code Playgroud)
如果发生Stackoverflow异常,最后一部分会按预期继续.
有没有其他人经历过这个并找到了解决方案?我正在使用Eclipse 3.5.2在Mac OS X上使用最新的android sdk
我刚安装了eclipse的Carbon版本,即使在这个全新的eclipse副本中我也遇到了这个错误.
非常奇怪,我是唯一遇到此错误的人.也许这不是Eclipse问题,而是我的项目设置问题......
我有一个Windows服务,每隔一分钟做一些密集的工作(实际上它每次启动一个新的线程,它通过http同步到不同的系统).问题是,几天后突然停止,没有错误信息.
我有NLog,我已注册'AppDomain.CurrentDomain.UnhandledException'.textfile-log中的最后一个条目只是一个正常的条目,没有任何问题.查看EventLog,我也无法在应用程序日志中找到任何消息,但是,系统日志中有两个条目.
一个人基本上说服务意外终止了.而已.第二个事件(与第一个事件同时)说:"......无法创建堆栈的新保护页面......"
从我读过的内容来看,这可能是堆栈溢出异常.我没有解析任何XML而且我不做递归工作.我使用Gate,Nancy和SignalR托管一个Web服务器,并使RavenDB以嵌入模式运行.每分钟都使用.NET 4.0中的Taskfactory启动一个新任务,我还有一个ContinueWith,我重新启动System.Timers.Timer,在一分钟内再次启动.
我该如何开始调查此问题?可能出现这种错误的原因是什么?
编辑在你兴奋之前,最后看到重要的编辑,如果你仍然好奇,这些被报道为:
我一直在尝试一段代码,并惊讶地发现我没有得到堆栈溢出.试图简化我甚至得到的东西:
#include <stdio.h>
int main()
{
int i;
/* 1,500,000,000 x 4 bytes = 6,000,000,000 bytes = 6GB */
int size = 1500000000;
int arr[size];
for (i = 0; i < size; i++) {
arr[i] = 1;
}
printf("first: %d\n", arr[0]);
printf("last: %d\n", arr[size - 1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这使我怀疑我甚至不知道内存管理的基础知识.我认为arr[size]应该轻松分配堆栈和溢出,但它使用我的所有内存和交换并成功完成.我错过了什么?
我试过gcc和clang版本:
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Ubuntu clang version 3.0-6ubuntu3 (tags/RELEASE_30/final) (based on LLVM 3.0)
Run Code Online (Sandbox Code Playgroud)我关闭了优化(-O0) …
我想通过在遇到StackOverflowError时返回一个thunk来实现java中的trampoline.是否有任何关于StackOverflowError的保证,比如,如果在StackOverflowError之后我唯一要做的就是在堆上创建对象并从函数返回,我会没事的?
如果上面的内容听起来很模糊,我在延续传递方式中以尾递归的方式添加了一些用于计算偶数/奇数的代码,每当堆栈流过时返回一个延迟的thunk.代码在我的机器上运行,但Java是否保证它始终有效?
public class CPS {
public static class Thunk {
final Object r;
final Continuation c;
final boolean isDelayed;
public Object force() {
Thunk t = this;
while (t.isDelayed)
t = t.compute();
return t.r;
}
public Thunk compute() {
return this;
}
public Thunk(Object answer) {
isDelayed = false;
r = answer;
c = null;
}
public Thunk(Object intermediate, Continuation cont) {
r = intermediate;
c = cont;
isDelayed = true;
}
}
public static class Continuation {
public …Run Code Online (Sandbox Code Playgroud) 我试图了解如果使用金丝雀,是否/如何返回到libc和面向返回的编程漏洞是可能的.
金丝雀将被放置在返回值和要溢出的缓冲区之间的堆栈上,并且需要被覆盖以便将返回值更改为库函数或计算的位置.金丝雀自1997年以来一直存在(StackGuard),而ROP是2007年首次推出的技术(Shacham).
金丝雀是否无法进行这些类型的攻击?
我有一个非常复杂的UI应用程序,包含许多layouts嵌套的应用程序.在创建另一个布局时,我抓住了一个StackOverflowError
想知道,我创建了两个测试示例:
1)以下xml主要活动的Hello world应用程序
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<!-- ...So on 30 times... -->
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</FrameLayout>
<!-- ...So on 30 times... -->
</FrameLayout>
</FrameLayout>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
在绘制布局时导致StackOverflowError(导致每个布局递归地绘制它的子节点)
2)以下测试用例
public class TestOverflowActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overflow(0);
}
private void overflow(int i){
android.util.Log.i("Stack depth:", " = " …Run Code Online (Sandbox Code Playgroud) 例如,如果我们通过跟随函数遍历一个相当大的树,我们可能会得到堆栈溢出.
void inorder(node* n)
{
if(n == null) return;
inorder(n->l);
n->print();
inorder(n->r);
}
Run Code Online (Sandbox Code Playgroud)
如何在函数中添加条件或某些东西以防止这种溢出发生?
我有一段时间以来一直面临这个错误.完全因此而烦恼.尝试了在stackoverflow和其他站点中看到的所有类似解决方案.
我有4个单独的scala项目.其中,我在编译拖曳项目时遇到StackOverflow错误.这两个项目是4个项目中最大的项目.当我尝试在Ubuntu Server机器中构建项目时,我收到此错误.我尝试在sbt配置文件中增加Xmx选项,但没有成功.
任何人都可以帮我解决这个问题,因为我因此而生气.如果我构建项目10次,它将在1或2次尝试中成功.
我从错误日志中理解的是,问题伴随着类型检查.但是,我不知道发生了什么.
其中一个失败的项目有超过1000个类/特征(不包括案例类).
细节:
Ubuntu Server(14)
Sbt : 0.13.6 and 0.13.8 tried
Scala Version : 2.11.6
JDK: 1.8
Run Code Online (Sandbox Code Playgroud)
下面粘贴了几行错误:
java.lang.StackOverflowError
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:696)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396)
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5370)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5374)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:680)
at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4522)
at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4578)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5343)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5360)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:696)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396)
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5370)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5374)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5472)
at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5480)
at scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:642)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:696)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396)
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5370)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5374)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$96.apply(Typers.scala:4523)
at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:680) …Run Code Online (Sandbox Code Playgroud) 据我所知,这段代码应该抛出StackOverflowError,但事实并非如此.可能是什么原因?
public class SimpleFile {
public static void main(String[] args) {
System.out.println("main");
try{
SimpleFile.main(args);
}
catch(Exception e){
System.out.println("Catch");
}
finally{
SimpleFile.main(args);
}
}
}
Run Code Online (Sandbox Code Playgroud)