Skip to content
Kohei Tamura edited this page Mar 2, 2017 · 55 revisions

EasyBuggy can reproduce:

  • Troubles

  • Memory Leak (Java heap space)

  • Memory Leak (PermGen space)

  • Memory Leak (C heap space)

  • Dead Lock (Java)

  • Dead Lock (SQL)

  • Endless Waiting Process

  • Infinite Loop

  • Redirect Loop

  • Forward Loop

  • JVM Crash

  • Network Socket Leak

  • Database Connection Leak

  • File Descriptor Leak

  • Thread Leak

  • Mojibake

  • Vulnerabilities

  • XSS

  • SQL Injection

  • LDAP Injection

  • Code Injection

  • Errors

  • ExceptionInInitializerError

  • NoClassDefFoundError

  • OutOfMemoryError (Java heap space)

  • OutOfMemoryError (Requested array size exceeds VM limit)

  • OutOfMemoryError (unable to create new native thread)

  • OutOfMemoryError (GC overhead limit exceeded)

  • OutOfMemoryError (PermGen space)

  • OutOfMemoryError (Direct buffer memory)

  • StackOverflowError

  • UnsatisfiedLinkError

  • Performance

  • Slow Regular Expression Parsing

  • Others

  • Integer Overflow

  • Round Off Error

  • Truncation Error

  • Loss of Trailing Digits

Screenshot (browser language: Japanese)

how2dev

To develop on eclipse:

mvn eclipse:eclipse

To build war and runnable jar:

mvn package

To start by mvn command (w/ embedded Jettty):

mvn clean install exec:exec

To start by runnable jar (w/ Payara micro):

java -jar easybuggy.jar

w/ JVM options:

-Xmx256m -XX:MaxPermSize=64m -XX:MaxDirectMemorySize=90m -XX:+UseSerialGC -Xloggc:logs/gc.log -XX:+PrintHeapAtGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M -XX:GCTimeLimit=15 -XX:GCHeapFreeLimit=50 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/ -XX:ErrorFile=logs/hs_err_pid%p.log -XX:NativeMemoryTracking=summary -agentlib:jdwp=transport=dt_socket,server=y,address=9009,suspend=n -Dderby.stream.error.file=logs/derby.log -Dderby.infolog.append=true -Dderby.language.logStatementText=true -Dderby.locks.deadlockTrace=true -Dderby.locks.monitor=true -Dderby.storage.rowLocking=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7900 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

To start by another container, for example Tomcat:

cp ROOT.war ${CATALINA_HOME}/webapps/
${CATALINA_HOME}/bin/startup.sh

To attach a remote debugger:

  • Connection type: Standard (Socket Listen)
  • Host: localhost
  • Port: 9009

Trouble shooting

EasyBuggy may not work correctly on Windows.

  • If you get the following error,
[2017-02-10T10:51:12.058+0900] [Payara Micro 4.1] [WARNING] [] [javax.enterprise.web] [tid: _ThreadID=15 _ThreadName=http-thread-pool(3)] [timeMillis: 1486691472058] [levelValue: 900] [[
  StandardWrapperValve[org.t246osslab.easybuggy.MainServlet]: Servlet.service() for servlet org.t246osslab.easybuggy.MainServlet threw exception
org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac.  A full JDK (not just JRE) is required
        at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:92)
        at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:378)
        at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:119)
        at org.apache.jasper.compiler.Jsr199JavaCompiler.compile(Jsr199JavaCompiler.java:208)
        at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:384)
        ...

then you may have to add JDK/bin to path and run JRE/bin/java.

set path=%path%;C:\Program Files\Java\jdk1.8.0_121\bin
"C:\Program Files\Java\jdk1.8.0_121\jre\bin\java" -jar easybuggy.jar
  • If you get the following error,
[INFO] --- exec-maven-plugin:1.2:exec (startup-embedded-jetty) @ easybuggy ---
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=32m; support was removed in 8.0
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.715 s
[INFO] Finished at: 2017-02-10T11:19:47+09:00
[INFO] Final Memory: 12M/226M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2:exec (startup-embedded-jetty) on project easybuggy: Command execution failed. Process exited with an error: 2(Exit value: 2) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

or

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project easybuggy: Failed to clean project: Failed to delete C:\Users\ktamura\git\easybuggy\target\easybuggy-1-SNAPSHOT\WEB-INF\lib\t
log-1.1.jar -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project easybuggy: Failed to clean project: Failed to delete C:\Users\ktamura\git\eas
ggy\target\easybuggy-1-SNAPSHOT\WEB-INF\lib\tinylog-1.1.jar
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: Failed to clean project: Failed to delete C:\Users\ktamura\git\easybuggy\target\easybuggy-1-SNAPSHOT\WEB-INF\lib\tinylog-1.1.jar
        at org.apache.maven.plugin.clean.CleanMojo.execute(CleanMojo.java:215)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
        ... 19 more
Caused by: java.io.IOException: Failed to delete C:\Users\ktamura\git\easybuggy\target\easybuggy-1-SNAPSHOT\WEB-INF\lib\tinylog-1.1.jar
        at org.apache.maven.plugin.clean.Cleaner.delete(Cleaner.java:249)
        at org.apache.maven.plugin.clean.Cleaner.delete(Cleaner.java:191)
        at org.apache.maven.plugin.clean.Cleaner.delete(Cleaner.java:158)
        at org.apache.maven.plugin.clean.Cleaner.delete(Cleaner.java:158)
        at org.apache.maven.plugin.clean.Cleaner.delete(Cleaner.java:158)
        at org.apache.maven.plugin.clean.Cleaner.delete(Cleaner.java:158)
        at org.apache.maven.plugin.clean.Cleaner.delete(Cleaner.java:117)
        at org.apache.maven.plugin.clean.CleanMojo.execute(CleanMojo.java:193)
        ... 21 more
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

then you should kill the EasyBuggy (java) process (using task manager) or click the link of "JVM crash" in the main page 😅

Road map

  • EasyBuggy 2.0.0 (2017 Summer)

    • False Sharing
    • Classloader Leak
    • Stop the World
    • Humongous Allocation Failure
    • JVM Crash (SIGSEGV)
    • JVM Crash (EXCEPTION_ACCESS_VIOLATION)
    • JVM Crash (EXCEPTION_STACK_OVERFLOW)
    • Infinite Recursion SQL
    • Open Redirect
    • Unrestricted Upload
    • Unrestricted login page
    • CSS injection

To develop quickly on terminal:

git clone https://github.com/k-tamura/easybuggy
cd easybuggy
cp src/main/java/org/t246osslab/easybuggy/TestServlet.java src/main/java/org/t246osslab/easybuggy/exceptions/NewServlet.java
grep -l "Test" src/main/java/org/t246osslab/easybuggy/exceptions/NewServlet.java | xargs perl -i -pe "s/Test/New/g"
grep -l "test" src/main/java/org/t246osslab/easybuggy/exceptions/NewServlet.java | xargs perl -i -pe "s/test/new/g"
vi src/main/java/org/t246osslab/easybuggy/exceptions/NewServlet.java
mvn clean install exec:exec
curl http://localhost:8080/new

how2dev

Clone this wiki locally