리눅스 상에서 record & replay 를 이용해서 일어나기 힘든 버그를 재현 해낼 수 있는 jockey 의 사용법에 대해서 설명한다.
jockey 는 'BINARY HACKS' 라는 책에서 소개하고 있다.

준비운동 하기

jockey 는 http://home.gna.org/jockey/ 에서 다운 받을 수 있다. 현재 최신 버전은 0.8.1 이며, 각각 source 와 rpm 포맷으로 받을 수 있다.
참고로 여기서는 rpm 포맷으로 설치하기로 한다.
리눅스는 페도라 코어 4 를 설치했다.

설치 하기

jockey 를 설치하기 전에 미리 설치되어 있어야 할 rpm 패키지들이 있다.

  1. autoconf
  2. libtool
  3. boost, boost-devel
  4. 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>

출력된 숫자가 같은 것을 볼 수 있다.

  • computer/rtcclab/jockey_사용하기.txt
  • Last modified: 3 years ago
  • by likewind