Open Source Debugging v1.3.2

214
by Matthew McCullough of Ambient Ideas, LLC Debugging Tools Open Source my favorite apps to ease debugging pain

Transcript of Open Source Debugging v1.3.2

Page 1: Open Source Debugging v1.3.2

by Matthew McCullough of Ambient Ideas, LLC

Debugging ToolsOpen Source

my favorite apps to ease

debugging pain

Page 2: Open Source Debugging v1.3.2

Matthew

Page 3: Open Source Debugging v1.3.2

Quick bits about me...

-Denver-Open source architect

-Author of Maven Refcard

-NFJS speaker

-Mentor

Page 4: Open Source Debugging v1.3.2

OSS Debug Tools

Page 5: Open Source Debugging v1.3.2

OSS Debug Tools

Web Service

JavaScriptFilesystem

Java

Network

Page 6: Open Source Debugging v1.3.2

Not

Page 7: Open Source Debugging v1.3.2

Instead

Page 8: Open Source Debugging v1.3.2

Why open source

debugging tools?

Page 9: Open Source Debugging v1.3.2
Page 10: Open Source Debugging v1.3.2
Page 11: Open Source Debugging v1.3.2

Today’s Deal

Page 12: Open Source Debugging v1.3.2

- 90 minute investment

Page 13: Open Source Debugging v1.3.2

- Hours back in return

Page 14: Open Source Debugging v1.3.2

NetworkCentric

Page 15: Open Source Debugging v1.3.2

OSS Debug Tools

Web Service

JavaScriptFilesystem

Java

Network

Page 16: Open Source Debugging v1.3.2
Page 17: Open Source Debugging v1.3.2

We’re having a problem on the web

site...web service...whatever

you call it.

Page 18: Open Source Debugging v1.3.2

It returns the correct <pointy>

code stuff for some folks but not

others.

Page 19: Open Source Debugging v1.3.2

Purpose‣ Command line URL tasks.‣ Test web services.‣ Inspect raw HTML pages.

Page 20: Open Source Debugging v1.3.2

remove browser magic

Page 21: Open Source Debugging v1.3.2

www.microsoft.com

Page 22: Open Source Debugging v1.3.2

more advanced usage

Page 23: Open Source Debugging v1.3.2

-X [action]Selects an HTTP verb (POST,GET, PUT, DELETE).

cURL flags

Page 24: Open Source Debugging v1.3.2

conditional content presentation

Page 25: Open Source Debugging v1.3.2

-H [HTTP header]Set the Accept or Content-Type headers(e.g. text/xml, or application/json)

Useful, if the web server/service parses them.

cURL flags

Page 26: Open Source Debugging v1.3.2

cURL examples

curl -X GET -H "Accept: text/xml" http://localhost/agents/1◀Request XM

L Response

Page 27: Open Source Debugging v1.3.2

curl in action

with a Grails app

content detecting

service

Page 28: Open Source Debugging v1.3.2

REST

Page 29: Open Source Debugging v1.3.2

curl -X POST http://localhost/agents/?name=Ben

curl -X GET http://localhost/agents/1

curl -X PUT http://localhost/agents/1/?name=Benny

curl -X DELETE http://localhost/agents/1

◀Create

◀Read

◀Update

◀Delete

Page 30: Open Source Debugging v1.3.2

curl in action

with a Grails app

REST service

Page 31: Open Source Debugging v1.3.2

-d [variable]or--data [variable]Set a data block to transmit to the URL.Automatically sets the action to POST.

cURL flags

Page 32: Open Source Debugging v1.3.2

curl -d "agent[name]=Ann Banks" http://localhost/agents/1◀POST data with nam

e

Page 33: Open Source Debugging v1.3.2

curl passing a

data variable

Page 34: Open Source Debugging v1.3.2

-o [filename]Output results to a file.

All formatting and encoding intact.

cURL flags

Page 35: Open Source Debugging v1.3.2

http is just the beginning

Page 36: Open Source Debugging v1.3.2

Supported Protocols‣ HTTP‣ HTTPS‣ FTP‣ FTPS‣ TFTP‣ SCP‣ SFTP‣ Telnet‣ LDAP

Page 37: Open Source Debugging v1.3.2
Page 38: Open Source Debugging v1.3.2
Page 39: Open Source Debugging v1.3.2

The operations desk called.

Page 40: Open Source Debugging v1.3.2

They say our apps is using too much

network bandwidth.

Page 41: Open Source Debugging v1.3.2

Can you take a look at the transmitted

data?

Page 42: Open Source Debugging v1.3.2

What’s being sent over the wire?

Page 43: Open Source Debugging v1.3.2

Purpose‣ Output headers of packets from a network.

‣ Filter results with powerful expressions.

‣ Save captured data to a file.

TCPDump

Page 44: Open Source Debugging v1.3.2

Useful for‣ Debugging network traffic.

‣ Examining socket communications.

‣ Inspecting web service calls.

‣ Examining network data as a 3rd party

TCPDump

Page 45: Open Source Debugging v1.3.2

TCPDump commands

tcpdump -i en1

Page 46: Open Source Debugging v1.3.2

TCPDump commands

tcpdump -i lo0

Page 47: Open Source Debugging v1.3.2

TCPDump commands

tcpdump -i en1 -v◀I

ncrea

sed p

acket i

nfo

Page 48: Open Source Debugging v1.3.2

TCPDump commands

tcpdump -i en1 -n◀p

ort n

umbers, n

ot na

mes

Page 49: Open Source Debugging v1.3.2

TCPDump commands

tcpdump -i en1 -A◀A

SCII

out

put

Page 50: Open Source Debugging v1.3.2

TCPDump commands

tcpdump -i en1 -X◀H

EX +

ASC

II out

put

Page 51: Open Source Debugging v1.3.2

TCPDump commands

tcpdump -i en1 icmp

◀Exp

ressio

n

Page 52: Open Source Debugging v1.3.2

TCPDump commands

tcpdump -i en1 tcp port 80

◀Exp

ressio

n

Page 53: Open Source Debugging v1.3.2

Des

tinat

ion

Add

ress

Sour

ce A

ddre

ss

Leng

th

DSA

P

SSA

P

Con

trol

SNA

P

Dat

a

FCS

Ethernet Frame, up to 1514 bytes

Page 54: Open Source Debugging v1.3.2

TCPDump commands

tcpdump -i en1 -s 1514

◀ sn

aplen

gth

Page 55: Open Source Debugging v1.3.2

TCPDump commands

tcpdump -i en1 -c20◀C

aptu

re 20

packets

Page 56: Open Source Debugging v1.3.2
Page 57: Open Source Debugging v1.3.2

Wireshark (Cross Platform)

PurposeNetwork protocol analyzer.

A GUI on tcpdump

Page 58: Open Source Debugging v1.3.2

Wireshark

Useful featuresOnline and offline operation.Reading TCPDump data files.

Page 59: Open Source Debugging v1.3.2

Wireshark

Useful featuresLogical packet parsing, display.Decryption.

Page 60: Open Source Debugging v1.3.2

Gotcha on Mac OSXAt a terminal, upon each boot, type:sudo chown YOURUSERNAME /dev/bpf*

Gotcha on WindowsPromiscuous mode doesn’t always work.

Wireshark usage

Page 61: Open Source Debugging v1.3.2

Wireshark in action

Page 62: Open Source Debugging v1.3.2

Eavesdrop

Page 63: Open Source Debugging v1.3.2

Purpose-A Mac-specific network packet inspector.-Listens to TCP traffic between machines.

Eavesdrop (mac)

Page 64: Open Source Debugging v1.3.2

Eavesdrop in action

Page 65: Open Source Debugging v1.3.2
Page 66: Open Source Debugging v1.3.2

Why does our app crash whenever we

have a lot of users?

Page 67: Open Source Debugging v1.3.2

How many?

Page 68: Open Source Debugging v1.3.2

Oh, 10... or 1000.Something like that.

Page 69: Open Source Debugging v1.3.2

Maybe 10,000.

Page 70: Open Source Debugging v1.3.2

PurposeLoad test or sequence test HTML, EJBs, SOAP, and many other interfaces.

JMeter (Cross Platform)

Page 71: Open Source Debugging v1.3.2

Useful ForTesting web sites under strain.Finding load-induced problems.Graphing performance metrics.

JMeter (Cross Platform)

Page 72: Open Source Debugging v1.3.2

Caution!

Page 73: Open Source Debugging v1.3.2

Denial of Service

Page 74: Open Source Debugging v1.3.2

JMeter in action

Page 75: Open Source Debugging v1.3.2

JMeter in action

Page 76: Open Source Debugging v1.3.2

JMeter acting Groovy

Page 77: Open Source Debugging v1.3.2

Survey

Page 78: Open Source Debugging v1.3.2

StackOverflow.com

Page 79: Open Source Debugging v1.3.2

What’s your favoriteOpen Source Debugging Tool?

Page 80: Open Source Debugging v1.3.2

VisualVM

Page 81: Open Source Debugging v1.3.2

Eclipse

Page 82: Open Source Debugging v1.3.2

System.out.println(brokenobj);

System.out.println(brokenobj);System.out.println(brokenobj);

System.out.println(brokenobj);

System.out.println(brokenobj);

System.out.println(brokenobj);

System.out.println(brokenobj);

System.out.println(brokenobj);

System.out.println(brokenobj);

System.out.println(brokenobj);

System.out.println(brokenobj);

System.out.println(brokenobj);

System.out.println(brokenobj);

System.out.println(brokenobj);

System.out.println(brokenobj);

Page 83: Open Source Debugging v1.3.2

buckle up

Page 84: Open Source Debugging v1.3.2

Java-Centric Tools

Page 85: Open Source Debugging v1.3.2

OSS Debug Tools

Web Service

JavaScriptFilesystem

Java

Network

Page 86: Open Source Debugging v1.3.2

JPS Process List

Page 87: Open Source Debugging v1.3.2

What JVM options did we use when we started up the app

server?

Page 88: Open Source Debugging v1.3.2

I’m gonna need a list of the other java processes running on

that box too.

Page 89: Open Source Debugging v1.3.2

jps

Page 90: Open Source Debugging v1.3.2

jps -l

◀Sho

w fu

ll pack

age na

me

Page 91: Open Source Debugging v1.3.2

jps -l -v

◀Sho

w fu

ll pack

age na

me

◀Sho

w JV

M arg

uments

Page 92: Open Source Debugging v1.3.2

jps -l -v -m

◀Sho

w fu

ll pack

age na

me

◀Sho

w JV

M arg

uments

◀Sho

w ma

in() a

rgume

nts

Page 93: Open Source Debugging v1.3.2

only local?

Page 94: Open Source Debugging v1.3.2

jps 10.15.25.32

Page 95: Open Source Debugging v1.3.2

How?

Page 96: Open Source Debugging v1.3.2

Run jstatd daemon

Page 97: Open Source Debugging v1.3.2

Allow-all policy

Page 98: Open Source Debugging v1.3.2

jstatd -J-Djava.security.policy=allowall.pol

◀You

r Poli

cy

Page 99: Open Source Debugging v1.3.2

grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission;};

Page 100: Open Source Debugging v1.3.2

Another port besides 1099?

Page 101: Open Source Debugging v1.3.2

jstatd -J-Djava.security.policy=your.pol -p 1099

◀You

r Poli

cy◀P

ort

Page 102: Open Source Debugging v1.3.2

jps 10.15.25.32

Page 103: Open Source Debugging v1.3.2

jstat process info

Page 104: Open Source Debugging v1.3.2

jstat -options

Page 105: Open Source Debugging v1.3.2

jstat -gcutil <pid>

◀Sho

w gar

bage

colle

ction

Page 106: Open Source Debugging v1.3.2

jstat -gcutil <pid> 500 999◀m

s betw

een s

ample

s

◀repeti

tions

Page 107: Open Source Debugging v1.3.2

jstat -gcutil -h5 <pid> 500 999

◀Sho

w he

ader

every

X lin

es

Page 108: Open Source Debugging v1.3.2

jmap memory MAPs

Page 109: Open Source Debugging v1.3.2

Heap Dump

Page 110: Open Source Debugging v1.3.2

jmap -dump:file=myfile <pid>

Page 111: Open Source Debugging v1.3.2

Histogram

Page 112: Open Source Debugging v1.3.2

jmap -histo <pid>

Page 113: Open Source Debugging v1.3.2

jstack stack dumps

Page 114: Open Source Debugging v1.3.2

jstack <pid>

Page 115: Open Source Debugging v1.3.2

jhat Heap Analysis

Page 116: Open Source Debugging v1.3.2

jhat <heapfile>

Page 117: Open Source Debugging v1.3.2

jhat myheapdump.hprof

Page 118: Open Source Debugging v1.3.2

Javap Class File Disassembler

Page 119: Open Source Debugging v1.3.2

We added a new method to a class.

Page 120: Open Source Debugging v1.3.2

Is it on theserver-deployed copy

of the app?

Page 121: Open Source Debugging v1.3.2

javap classfile

Page 122: Open Source Debugging v1.3.2

javap -v classfile

◀Verb

ose

Page 123: Open Source Debugging v1.3.2

javap -v -s classfile

◀Verb

ose

◀Intern

al typ

e sign

atures

Page 124: Open Source Debugging v1.3.2

javap -v -s -l classfile

◀Verb

ose

◀Intern

al typ

e sign

atures

◀Disp

lay va

riable

table

s

Page 125: Open Source Debugging v1.3.2

javap -v -s -l -private classfile

◀Verb

ose

◀Intern

al typ

e sign

atures

◀Disp

lay va

riable

table

s

◀Sho

w Priva

te me

thod

s

Page 126: Open Source Debugging v1.3.2
Page 127: Open Source Debugging v1.3.2

We’re having, um some “problems” with the app in

production.

Page 128: Open Source Debugging v1.3.2

You’ll need to figure it out on the live production app.

Page 129: Open Source Debugging v1.3.2

No, you can’t restart the app!

Page 130: Open Source Debugging v1.3.2

No, you can’t put Eclipse on the

production box!!

Page 131: Open Source Debugging v1.3.2

PurposeDeeply inspect many metrics of Java processes.

Page 132: Open Source Debugging v1.3.2

Useful for‣ Discovering the GC cycles of your app.

Page 133: Open Source Debugging v1.3.2

Useful for‣ Discovering the GC cycles of your app.

‣ Finding the largest memory usage culprits.

Page 134: Open Source Debugging v1.3.2

Useful for‣ Discovering the GC cycles of your app.

‣ Finding the largest memory usage culprits.

‣ Diffing memory snapshots.

Page 135: Open Source Debugging v1.3.2

Useful for‣ Discovering the GC cycles of your app.

‣ Finding the largest memory usage culprits.

‣ Diffing memory snapshots.

‣ Injecting btrace code.

Page 136: Open Source Debugging v1.3.2

Useful for‣ Discovering the GC cycles of your app.

‣ Finding the largest memory usage culprits.

‣ Diffing memory snapshots.

‣ Injecting btrace code.

‣ Snapping heapdumps.

Page 137: Open Source Debugging v1.3.2

VisualVM in action

Page 138: Open Source Debugging v1.3.2

GotchaDownload version 1.1.1 even if your JDK includes 1.0.Standalone version always ahead of JVM version.

Page 139: Open Source Debugging v1.3.2

JStatd Daemon

Page 140: Open Source Debugging v1.3.2

We don’t have screens on our

servers.

Page 141: Open Source Debugging v1.3.2

Can you run these VisualVeeeEmmmms

remotely?

Page 142: Open Source Debugging v1.3.2

jstatd -J-Djava.security.policy=your.pol◀You

r Poli

cy

Page 143: Open Source Debugging v1.3.2

Remotely‣ Attach VisualVM

‣ Run any VisualVM debugging tool

‣ Run JPS

Page 144: Open Source Debugging v1.3.2

SerialVer Hash

Page 145: Open Source Debugging v1.3.2

Is the deployed version of the bean compatible with the copy we are

about to release?

Page 146: Open Source Debugging v1.3.2

Yeah, we don’t set serialVersionUID

Page 147: Open Source Debugging v1.3.2

serialver classname

Page 148: Open Source Debugging v1.3.2

MyBean: static final long serialVersionUID = -4193605393175618625L;

Page 149: Open Source Debugging v1.3.2

serialver -show

Page 150: Open Source Debugging v1.3.2
Page 151: Open Source Debugging v1.3.2

Eclipse Memory Analyzer(MAT)

Page 152: Open Source Debugging v1.3.2

Find out what objects are using so much memory in the

app!

Page 153: Open Source Debugging v1.3.2

Purpose‣ Visually investigate memory usage inside

a heap dump.

EclipseMemoryAnalyzer

Page 154: Open Source Debugging v1.3.2

PurposeInvestigate memory usage.

Useful forVisualizing memory footprint.

Finding memory leaks.

Querying through (OQL) allocated memory.

Discovering heavy memory allocation sources.

EclipseMemoryAnalyzer

Page 155: Open Source Debugging v1.3.2

GotchaDoesn’t create heap dumps, just analyzes.Available as a plugin or standalone RCP app.

EclipseMemoryAnalyzer

Page 156: Open Source Debugging v1.3.2

EclipseMemoryAnalyzer in action

Page 157: Open Source Debugging v1.3.2

ObjectQueryLanguage

Page 158: Open Source Debugging v1.3.2

EclipseMemoryAnalyzer in action

Page 159: Open Source Debugging v1.3.2

Retained Size Graphs

Page 160: Open Source Debugging v1.3.2

EclipseMemoryAnalyzer in action

Page 161: Open Source Debugging v1.3.2
Page 162: Open Source Debugging v1.3.2

Can you put a few debugging

“sysouts” into that running app not he

server?

Page 163: Open Source Debugging v1.3.2

OriginsDTrace on Sun SolarisPorted to other UNIX platforms

Now available as BTrace for Java

BTrace Tracing

Page 164: Open Source Debugging v1.3.2

Production-timeOperates on deployed codeRuntime injection of tracing statements

BTrace Tracing

Ken Sipe, contributing

Page 165: Open Source Debugging v1.3.2

CodeTracing written in Java.Doesn’t have to be compiled.

BTrace Tracing

Page 166: Open Source Debugging v1.3.2

ConsoleIt’s core strength.Original target.

BTrace Tracing

Page 167: Open Source Debugging v1.3.2

GUITightly integrated with VisualVM

BTrace Tracing

Page 168: Open Source Debugging v1.3.2

BTrace in action

Page 169: Open Source Debugging v1.3.2

Omniscient Debuggers

Page 170: Open Source Debugging v1.3.2
Page 171: Open Source Debugging v1.3.2

WebServiceCentric

Page 172: Open Source Debugging v1.3.2

OSS Debug Tools

Web Service

JavaScriptFilesystem

Java

Network

Page 173: Open Source Debugging v1.3.2
Page 174: Open Source Debugging v1.3.2

Purpose‣ Test, mock, and visualize web services.

SOAPUI

Page 175: Open Source Debugging v1.3.2

Useful for‣ Testing your app against a stub web

service.

‣ Testing a public web service via a GUI.

SOAPUI

Page 176: Open Source Debugging v1.3.2

SOAPUI in action

Page 177: Open Source Debugging v1.3.2

JavaScriptCentric

Page 178: Open Source Debugging v1.3.2

OSS Debug Tools

Web Service

JavaScriptFilesystem

Java

Network

Page 179: Open Source Debugging v1.3.2
Page 180: Open Source Debugging v1.3.2

PurposeVisually inspect an entire HTML DOM.

Useful forTesting HTML and CSS changes.Making realtime changes to the DOM.Monitoring network traffic.Debuging JavaScript.

FireBug

Page 181: Open Source Debugging v1.3.2

FireBug in action

Page 182: Open Source Debugging v1.3.2

FireBug in action

Page 183: Open Source Debugging v1.3.2

FireBug in action

Page 184: Open Source Debugging v1.3.2

FilesystemCentric

Page 185: Open Source Debugging v1.3.2

OSS Debug Tools

Web Service

JavaScriptFilesystem

Java

Network

Page 186: Open Source Debugging v1.3.2

fs_usage

Page 187: Open Source Debugging v1.3.2

PurposeShows file activity.

Useful forExamining which files are being written.Discovering what component is disk bound.

fs_usage (Mac, Linux)

Page 188: Open Source Debugging v1.3.2

fs_usage params

fs_usage -f filesys java◀M

ode/

info fil

ter◀C

omma

nd na

me

Page 189: Open Source Debugging v1.3.2

lsof

Page 190: Open Source Debugging v1.3.2

PurposeShows open files.

Useful forFinding what PID is holding a file open.

lsof (Mac, Linux)

Page 191: Open Source Debugging v1.3.2

lsof params

lsofFind all

open files

Page 192: Open Source Debugging v1.3.2

lsof params

lsof -p 4347

◀PID

flag

◀PID

numb

er

Find

everything

this PID has

open

Page 193: Open Source Debugging v1.3.2

Purpose #2Shows open network ports and PIDs.

Useful forFinding what PID is holding a port open.

lsof (Mac, Linux)

Page 194: Open Source Debugging v1.3.2

lsof params

Wait!

I thought

you said

files?

Page 195: Open Source Debugging v1.3.2

lsof params

lsof -iTCP:8080

◀Protoco

l◀P

ort

Page 196: Open Source Debugging v1.3.2
Page 197: Open Source Debugging v1.3.2

PurposeShows open files.Enumerates network TCP handles.Shows registry read/writes.

Useful forDiscovering network and disk activity causes.

ProcessMonitor (windows)

Page 198: Open Source Debugging v1.3.2

ProcessMonitor (windows)

Page 199: Open Source Debugging v1.3.2

An open source alternative

Page 200: Open Source Debugging v1.3.2
Page 201: Open Source Debugging v1.3.2

What Else?

Page 202: Open Source Debugging v1.3.2

Source Code search engines for examples

Page 203: Open Source Debugging v1.3.2
Page 204: Open Source Debugging v1.3.2
Page 205: Open Source Debugging v1.3.2
Page 206: Open Source Debugging v1.3.2

‣http://google.com/codesearch

‣ http://www.jexamples.com/

‣ http://www.codefetch.com/

‣ http://www.krugle.com/

‣ http://codesearch.developer.emc.com/

‣ http://www.codase.com/

‣ http://www.koders.com/

Page 207: Open Source Debugging v1.3.2
Page 208: Open Source Debugging v1.3.2
Page 209: Open Source Debugging v1.3.2

MatthewTwitter @matthewmccull

Blog http://www.ambientideas.com/blog sidebar has all my social media links

Email [email protected]

GitHub http://github.com/matthewmccullough

Page 210: Open Source Debugging v1.3.2

CURLhttp://curl.haxx.se/

CygWinhttp://www.cygwin.com/

TCPDumphttp://www.tcpdump.org/

Wiresharkhttp://www.wireshark.org/

Eavesdrophttp://www.baurhome.net/software/eavesdrop/

Resources

Page 211: Open Source Debugging v1.3.2

Apache JMeterhttp://jakarta.apache.org/jmeter/

JMeter Groovy Pluginhttp://code.google.com/p/jmeter-groovy-sampler/

Resources

Page 212: Open Source Debugging v1.3.2

VisualVMhttps://visualvm.dev.java.net/

GCHistohttps://gchisto.dev.java.net/

Eclipse Memory Analyzerhttp://www.eclipse.org/mat/

BTracehttps://btrace.dev.java.net/

DTrace, XRay, Instrumentshttp://en.wikipedia.org/wiki/DTrace

Resources

Page 213: Open Source Debugging v1.3.2

SOAPuihttp://www.soapui.org/

Firebughttp://getfirebug.com/

fs_usagehttp://rentzsch.com/macosx/fs_usageIntro

lsofhttp://www.akadia.com/services/lsof_intro.html

Process Monitorhttp://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

Resources

Page 214: Open Source Debugging v1.3.2

‣ http://www.ambientideasphotography.com‣ http://upload.wikimedia.org/wikipedia/commons/a/a4/

BernardMadoff.jpg‣ http://flickr.com/photos/triller/2226679393/‣ http://flickr.com/photos/ektogamat/2687444500/‣ http://flickr.com/photos/bfionline/2380398799/‣ http://flickr.com/photos/symphoney/76513801/‣ http://flickr.com/photos/foxypar4/2124673642/‣ http://flickr.com/photos/morberg/3146874095/‣ http://flickr.com/photos/triller/2226679393/

Image Credits