JOCKEY 사용하기
리눅스 상에서 record & replay 를 이용해서 일어나기 힘든 버그를 재현 해낼 수 있는 jockey 의 사용법에 대해서 설명한다.
jockey 는 'BINARY HACKS' 라는 책에서 소개하고 있다.
준비운동 하기
jockey 는 http://home.gna.org/jockey/ 에서 다운 받을 수 있다. 현재 최신 버전은 0.8.1 이며, 각각 source 와 rpm 포맷으로 받을 수 있다.
참고로 여기서는 rpm 포맷으로 설치하기로 한다.
리눅스는 페도라 코어 4 를 설치했다.
설치 하기
jockey 를 설치하기 전에 미리 설치되어 있어야 할 rpm 패키지들이 있다.
- autoconf
- libtool
- boost, boost-devel
- ruby, ruby-lib, ruby-devel
없다면, 설치해주어야 한다. http://download.gna.org/jockey/fc4/ 에서 가장 최신버전(jockey-0.8.1-1.i386.rpm, jockey-debuginfo-0.8.1-1.i386.rpm)을 다운로드 한다.
#rpm -ivh jockey-debuginfo-0.8.1-1.i386.rpm #rpm -ivh jockey-0.8.1-1.i386.rpm // 의존성 오류
설치시에 의존성 오류가 발생하면, '–nodeps' 옵션을 추가한다.
#rpm -ivh --nodeps jockey-0.8.1-1.i386.rpm
에러없이 설치되었다면, /etc/sysctl.conf 파일에 다음을 추가해준다.
kernel.randomize_va_space = 0 vm.legacy_va_layout = 1
그리고 재부팅한다.
사용 하기
record & replay 를 확인하기 위해서 실시간 시간을 출력하는 date 명령어를 이용해보겠다.
#jockey /bin/date Warning: /bin/date is, by default, excluded from tracing. Warning: I'm adding 'excludedprogram=-' option as a courtesy. Tue Oct 30 04:22:34 KST 2007
이제 다시 실행시켜 보겠다.
#jockey --replay=1 /bin/date Warning: /bin/date is, by default, excluded from tracing. Warning: I'm adding 'excludedprogram=-' option as a courtesy. Tue Oct 30 04:22:34 KST 2007
같은 결과가 출력되는 것을 볼 수 있다.
이번에는 소켓을 이용한 프로그램을 record & replay 해보겠다.
#jockey 더블유겟 -qO- 'http://www.random.org/integers/?num=100&min=1&max=100&col=5&base=10&format=html&rnd=new'
Warning: /usr/bin/더블유겟 is, by default, excluded from tracing.
Warning: I'm adding 'excludedprogram=-' option as a courtesy.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>RANDOM.ORG - Integer Generator</title>
<link rel="stylesheet" type="text/css" href="/style.css" media="all" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="Keywords" content="true random numbers" />
<meta name="author" content="Mads Haahr" />
<script type="text/javascript" src="/random.js"></script>
</head>
<body>
<div id="invisible"><ul id="navigation">
<li><a href="/">Home</a></li>
<li><a href="/randomness/">Introduction</a></li>
<li><a href="/statistics/">Statistics</a></li>
<li><a href="/integers/">Numbers</a></li>
<li><a href="/quota/">Quota</a></li>
<li><a href="/testimonials/">Testimonials</a></li>
<li><a href="/faq/">FAQ</a></li>
<li><a href="/mads/">Contact</a></li>
<li><a href="/account/">Premium Login</a></li>
<li><a href="/news/">What's New!</a></li>
</ul>
<h1><span><img src="/graphics/v2beta-128x32.png" width="128" height="32" alt="v2.0 beta" /><br />True Random Number Service</span></h1>
<h2>Random Integer Generator</h2>
<p>Here are your random numbers:</p>
<pre class="data">8 19 9 96 83
59 12 18 77 34
53 82 73 26 49
18 71 93 55 74
40 69 40 92 100
5 43 61 95 46
38 75 15 29 12
57 35 83 56 49
31 15 79 83 43
27 39 69 37 52
2 66 68 20 81
19 67 22 88 50
98 49 64 94 66
80 40 94 52 97
99 1 25 83 56
97 19 3 62 7
19 94 7 8 84
52 15 82 82 50
42 76 23 63 65
46 100 68 7 73
</pre>
<p>Timestamp: 2007-12-28 13:52:29 UTC</p>
<p></p>
<form method="get" action="">
<input type="hidden" name="num" value="100" />
<input type="hidden" name="min" value="1" />
<input type="hidden" name="max" value="100" />
<input type="hidden" name="col" value="5" />
<input type="hidden" name="base" value="10" />
<input type="hidden" name="format" value="html" />
<input type="hidden" name="rnd" value="new" />
<input type="submit" value="Again!" />
<input type="button" onclick="history.go(-1);" value="Go Back" />
</form>
<p>Note: The numbers are generated left to right, i.e., <a href="/faq/#Q2.2" target="_blank">across columns</a>.</p>
<p></p>
<div class="ruler"></div>
</div>
</body>
</html>
위에서 주의깊게 봐야할 부분은 랜덤한 숫자들이다.
#jockey --replay=1 더블유겟 -qO- 'http://www.random.org/integers/?num=100&min=1&max=100&col=5&base=10&format=html&rnd=new'
Warning: /usr/bin/더블유겟 is, by default, excluded from tracing.
Warning: I'm adding 'excludedprogram=-' option as a courtesy.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>RANDOM.ORG - Integer Generator</title>
<link rel="stylesheet" type="text/css" href="/style.css" media="all" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="Keywords" content="true random numbers" />
<meta name="author" content="Mads Haahr" />
<script type="text/javascript" src="/random.js"></script>
</head>
<body>
<div id="invisible"><ul id="navigation">
<li><a href="/">Home</a></li>
<li><a href="/randomness/">Introduction</a></li>
<li><a href="/statistics/">Statistics</a></li>
<li><a href="/integers/">Numbers</a></li>
<li><a href="/quota/">Quota</a></li>
<li><a href="/testimonials/">Testimonials</a></li>
<li><a href="/faq/">FAQ</a></li>
<li><a href="/mads/">Contact</a></li>
<li><a href="/account/">Premium Login</a></li>
<li><a href="/news/">What's New!</a></li>
</ul>
<h1><span><img src="/graphics/v2beta-128x32.png" width="128" height="32" alt="v2.0 beta" /><br />True Random Number Service</span></h1>
<h2>Random Integer Generator</h2>
<p>Here are your random numbers:</p>
<pre class="data">8 19 9 96 83
59 12 18 77 34
53 82 73 26 49
18 71 93 55 74
40 69 40 92 100
5 43 61 95 46
38 75 15 29 12
57 35 83 56 49
31 15 79 83 43
27 39 69 37 52
2 66 68 20 81
19 67 22 88 50
98 49 64 94 66
80 40 94 52 97
99 1 25 83 56
97 19 3 62 7
19 94 7 8 84
52 15 82 82 50
42 76 23 63 65
46 100 68 7 73
</pre>
<p>Timestamp: 2007-12-28 13:52:29 UTC</p>
<p></p>
<form method="get" action="">
<input type="hidden" name="num" value="100" />
<input type="hidden" name="min" value="1" />
<input type="hidden" name="max" value="100" />
<input type="hidden" name="col" value="5" />
<input type="hidden" name="base" value="10" />
<input type="hidden" name="format" value="html" />
<input type="hidden" name="rnd" value="new" />
<input type="submit" value="Again!" />
<input type="button" onclick="history.go(-1);" value="Go Back" />
</form>
<p>Note: The numbers are generated left to right, i.e., <a href="/faq/#Q2.2" target="_blank">across columns</a>.</p>
<p></p>
<div class="ruler"></div>
</div>
</body>
</html>
출력된 숫자가 같은 것을 볼 수 있다.