diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr2line.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr2line.java index 8a370d0a2e3..9f687643912 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr2line.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr2line.java @@ -15,6 +15,8 @@ import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.eclipse.cdt.core.IAddress; import org.eclipse.cdt.utils.spawner.ProcessFactory; @@ -25,6 +27,7 @@ public class Addr2line { private BufferedReader stdout; private BufferedWriter stdin; private String lastaddr, lastsymbol, lastline; + private static final Pattern OUTPUT_PATTERN = Pattern.compile("(.*)( \\(discriminator.*\\))"); //$NON-NLS-1$ //private boolean isDisposed = false; public Addr2line(String command, String[] params, String file) throws IOException { @@ -113,6 +116,7 @@ public class Addr2line { //IPF_TODO: check for (int i = 0; i <= 20; i += 4, address = address.add(i)) { String line = getLine(address); + line = parserOutput(line); if (line != null) { int colon = line.lastIndexOf(':'); String number = line.substring(colon + 1); @@ -138,6 +142,14 @@ public class Addr2line { addr2line.destroy(); //isDisposed = true; } + + private String parserOutput(String line) { + Matcher matcher = OUTPUT_PATTERN.matcher(line); + if (matcher.matches() && matcher.groupCount() > 1) { + line = matcher.group(1); + } + return line; + } }