Include the crashing function in the link to a crash log on Mac
authoraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Feb 2011 18:01:25 +0000 (18:01 +0000)
committeraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Feb 2011 18:01:25 +0000 (18:01 +0000)
Fixes <http://webkit.org/b/53780> Crash log links in results.html should include the
function that crashed on Mac

Reviewed by David Kilzer.

* Scripts/old-run-webkit-tests:
(crashLocation): Moved all the Windows code inside an if instead of using an early return,
but didn't otherwise change it. Added an if for Mac that parses the crashing function out of
the crash log.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@77636 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/old-run-webkit-tests

index c6c5c461e8a5b8adc6a7cdac7b3bd25062a21938..5ac9ab81525fcefe767cff74b52b1f24def685d8 100644 (file)
@@ -1,3 +1,17 @@
+2011-02-04  Adam Roben  <aroben@apple.com>
+
+        Include the crashing function in the link to a crash log on Mac
+
+        Fixes <http://webkit.org/b/53780> Crash log links in results.html should include the
+        function that crashed on Mac
+
+        Reviewed by David Kilzer.
+
+        * Scripts/old-run-webkit-tests:
+        (crashLocation): Moved all the Windows code inside an if instead of using an early return,
+        but didn't otherwise change it. Added an if for Mac that parses the crashing function out of
+        the crash log.
+
 2011-02-04  Adam Roben  <aroben@apple.com>
 
         Link to Mac crash logs from results.html
index 6c277d7bd10d04e691c5a605d75b7e772c42e5bf..c56cb1c21b2a90199271a94998677e2f190779da 100755 (executable)
@@ -1969,31 +1969,57 @@ sub crashLocation($)
 {
     my ($base) = @_;
 
-    return unless isCygwin();
-
     my $crashLogFile = File::Spec->catfile($testResultsDirectory, "$base-$crashLogTag.txt");
 
-    # We're looking for the following text:
-    #
-    # FOLLOWUP_IP:
-    # module!function+offset [file:line]
-    #
-    # The second contains the function that crashed (or the function that ended up jumping to a bad
-    # address, as in the case of a null function pointer).
+    if (isCygwin()) {
+        # We're looking for the following text:
+        #
+        # FOLLOWUP_IP:
+        # module!function+offset [file:line]
+        #
+        # The second contains the function that crashed (or the function that ended up jumping to a bad
+        # address, as in the case of a null function pointer).
+
+        open LOG, "<", $crashLogFile or return;
+        while (my $line = <LOG>) {
+            last if $line =~ /^FOLLOWUP_IP:/;
+        }
+        my $desiredLine = <LOG>;
+        close LOG;
+
+        return unless $desiredLine;
 
-    open LOG, "<", $crashLogFile or return;
-    while (my $line = <LOG>) {
-        last if $line =~ /^FOLLOWUP_IP:/;
+        # Just take everything up to the first space (which is where the file/line information should
+        # start).
+        $desiredLine =~ /^(\S+)/;
+        return $1;
     }
-    my $desiredLine = <LOG>;
-    close LOG;
-
-    return unless $desiredLine;
 
-    # Just take everything up to the first space (which is where the file/line information should
-    # start).
-    $desiredLine =~ /^(\S+)/;
-    return $1;
+    if (isAppleMacWebKit()) {
+        # We're looking for the following text:
+        #
+        # Thread M Crashed:
+        # N   module                              address function + offset (file:line)
+        #
+        # Some lines might have a module of "???" if we've jumped to a bad address. We should skip
+        # past those.
+
+        open LOG, "<", $crashLogFile or return;
+        while (my $line = <LOG>) {
+            last if $line =~ /^Thread \d+ Crashed:/;
+        }
+        my $location;
+        while (my $line = <LOG>) {
+            $line =~ /^\d+\s+(\S+)\s+\S+ (.* \+ \d+)/ or next;
+            my $module = $1;
+            my $functionAndOffset = $2;
+            next if $module eq "???";
+            $location = "$module: $functionAndOffset";
+            last;
+        }
+        close LOG;
+        return $location;
+    }
 }
 
 sub linksForErrorTest