[Lldb-commits] [lldb] r132430 - in /lldb/trunk/utils/test: main.c run-until-faulted.py

Johnny Chen johnny.chen at apple.com
Wed Jun 1 15:12:27 PDT 2011


Author: johnny
Date: Wed Jun  1 17:12:27 2011
New Revision: 132430

URL: http://llvm.org/viewvc/llvm-project?rev=132430&view=rev
Log:
Make 'run-until-faulted.py' script more interesting by modifying the example main.c program
to seg fault randomly instead of deterministically.

Example:

[15:10:43] johnny:/Volumes/data/lldb/svn/trunk/utils/test $ clang -g main.c
[15:10:46] johnny:/Volumes/data/lldb/svn/trunk/utils/test $ ./run-until-faulted.py -l $PWD/../../build/Debug/lldb -e a.out
lldb command: /Volumes/data/lldb/svn/trunk/utils/test/../../build/Debug/lldb
executable: a.out
executable options: 
(lldb) sending 'file a.out' command...
file a.out
Current executable set to 'a.out' (x86_64).
(lldb) sending 'process launch -- ' command... (iteration: 0)
process launch -- 
Process 63630 launched: '/Volumes/data/lldb/svn/trunk/utils/test/a.out' (x86_64)
Hello, fault!
val=9
Better luck next time!
Process 63630 exited with status = 0 (0x00000000) 
(lldb) sending 'process launch -- ' command... (iteration: 1)
process launch -- 
Process 63633 launched: '/Volumes/data/lldb/svn/trunk/utils/test/a.out' (x86_64)
Process 63633 exited with status = 0 (0x00000000) 
sending 'process launch -- ' command... (iteration: 2)
Hello, fault!
val=0
Better luck next time!
(lldb) process launch -- 
Process 63637 launched: '/Volumes/data/lldb/svn/trunk/utils/test/a.out' (x86_64)
Hello, fault!
val=15
Better luck next time!
Process 63637 exited with status = 0 (0x00000000) 
(lldb) sending 'process launch -- ' command... (iteration: 3)
process launch -- 
Process 63640 launched: '/Volumes/data/lldb/svn/trunk/utils/test/a.out' (x86_64)
Hello, fault!
val=2
Better luck next time!
Process 63640 exited with status = 0 (0x00000000) 
sending 'process launch -- ' command... (iteration: 4)
(lldb) process launch -- 
Process 63643 launched: '/Volumes/data/lldb/svn/trunk/utils/test/a.out' (x86_64)
Process 63643 stopped
* thread #1: tid = 0x2d03, 0x0000000100000e93 a.out`main + 99 at main.c:11, stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
  frame #0: 0x0000000100000e93 a.out`main + 99 at main.c:11
   8   	    u_int32_t val = (arc4random() & 0x0f);
   9   	    printf("val=%u\n", val);
   10  	    if (val == 0x07) // Lucky 7 :-)
-> 11  	        printf("Now segfault %d\n", *null_ptr);
   12  	    else
   13  	        printf("Better luck next time!\n");
   14  	}
(lldb) 
* thread #1: tid = 0x2d03, 0x0000000100000e93 a.out`main + 99 at main.c:11, stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
  frame #0: 0x0000000100000e93 a.out`main + 99 at main.c:11
   8   	    u_int32_t val = (arc4random() & 0x0f);
   9   	    printf("val=%u\n", val);
   10  	    if (val == 0x07) // Lucky 7 :-)
-> 11  	        printf("Now segfault %d\n", *null_ptr);
   12  	    else
   13  	        printf("Better luck next time!\n");
   14  	}
Hello, fault!
val=7
(lldb) 

Modified:
    lldb/trunk/utils/test/main.c
    lldb/trunk/utils/test/run-until-faulted.py

Modified: lldb/trunk/utils/test/main.c
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/utils/test/main.c?rev=132430&r1=132429&r2=132430&view=diff
==============================================================================
--- lldb/trunk/utils/test/main.c (original)
+++ lldb/trunk/utils/test/main.c Wed Jun  1 17:12:27 2011
@@ -1,8 +1,14 @@
 #include <stdio.h>
+#include <stdlib.h>
 
 int main(int argc, const char* argv[])
 {
     int *null_ptr = 0;
     printf("Hello, fault!\n");
-    printf("Now segfault %d\n", *null_ptr);
+    u_int32_t val = (arc4random() & 0x0f);
+    printf("val=%u\n", val);
+    if (val == 0x07) // Lucky 7 :-)
+        printf("Now segfault %d\n", *null_ptr);
+    else
+        printf("Better luck next time!\n");
 }

Modified: lldb/trunk/utils/test/run-until-faulted.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/utils/test/run-until-faulted.py?rev=132430&r1=132429&r2=132430&view=diff
==============================================================================
--- lldb/trunk/utils/test/run-until-faulted.py (original)
+++ lldb/trunk/utils/test/run-until-faulted.py Wed Jun  1 17:12:27 2011
@@ -33,31 +33,25 @@
     prompt = "\(lldb\) "
     lldb = pexpect.spawn(lldb_command)
     # Turn on logging for what lldb sends back.
-    #lldb.logfile_read = sys.stdout
+    lldb.logfile_read = sys.stdout
     lldb.expect(prompt)
 
     # Now issue the file command.
-    print "sending file command...."
+    print "sending 'file %s' command..." % exe
     lldb.sendline('file %s' % exe)
     lldb.expect(prompt)
-    #print "lldb.buffer:--->", lldb.buffer, "<---"
-    #print "lldb.before:--->", lldb.before, "<---"
-    #print "lldb.after:--->", lldb.buffer, "<----"
 
     # Loop until it faults....
     count = 0
     #while True:
     #    count = count + 1
-    for i in range(10):
+    for i in range(100):
         count = i
-        print "sending process launch -- %s (iteration: %d)" % (exe_options, count)
+        print "sending 'process launch -- %s' command... (iteration: %d)" % (exe_options, count)
         lldb.sendline('process launch -- %s' % exe_options)
         index = lldb.expect(['Process .* exited with status',
                              'Process .* stopped',
                              pexpect.TIMEOUT])
-        #print "lldb.buffer:--->", lldb.buffer, "<---"
-        #print "lldb.before:--->", lldb.before, "<----"
-        #print "lldb.after:--->", lldb.buffer, "<----"
         if index == 0:
             # We'll try again later.
             time.sleep(3)
@@ -78,10 +72,9 @@
     sys.path.append(os.path.join(scriptPath, os.pardir, os.pardir, 'test', 'pexpect-2.4'))
 
     parser = OptionParser(usage="""\
+%prog [options]
 Run a program via lldb until it fails.
-The lldb executable is located via your PATH env variable, if not specified.
-
-Usage: %prog [options]
+The lldb executable is located via your PATH env variable, if not specified.\
 """)
     parser.add_option('-l', '--lldb-command',
                       type='string', action='store', metavar='LLDB_COMMAND',





More information about the lldb-commits mailing list