From 7585651f46e7736edc299df1f76ca69096e56c36 Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Thu, 16 Dec 2010 19:48:24 +0000 Subject: [PATCH] Bug 325552: GDB 7.x getOsId() pattern match too restrictive (DSF) --- .../mi/service/command/output/MIThread.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIThread.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIThread.java index b7b02b5553b..7a62ffc8a35 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIThread.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/MIThread.java @@ -114,13 +114,19 @@ public class MIThread { return new MIThread(threadId, targetId, osId, parentId, topFrame, details, state, core); } - private static Pattern fgOsIdPattern1 = Pattern.compile("(Thread\\s*)(0x[0-9a-fA-F]+|-?\\d+)(\\s*\\(LWP\\s*)(\\d*)", 0); //$NON-NLS-1$ - private static Pattern fgOsIdPattern2 = Pattern.compile("Thread\\s*\\d+\\.(\\d+)", 0); //$NON-NLS-1$ - + // Note that windows gdbs returns lower case "thread" , so the matcher needs to be case-insensitive. + private static Pattern fgOsIdPattern1 = Pattern.compile("([Tt][Hh][Rr][Ee][Aa][Dd]\\s*)(0x[0-9a-fA-F]+|-?\\d+)(\\s*\\([Ll][Ww][Pp]\\s*)(\\d*)", 0); //$NON-NLS-1$ + private static Pattern fgOsIdPattern2 = Pattern.compile("[Tt][Hh][Rr][Ee][Aa][Dd]\\s*\\d+\\.(\\d+)", 0); //$NON-NLS-1$ + private static Pattern fgOsIdPattern3 = Pattern.compile("[Tt][Hh][Rr][Ee][Aa][Dd]\\s*(\\S+)", 0); //$NON-NLS-1$ + private static String parseOsId(String str) { // General format: // "Thread 0xb7c8ab90 (LWP 7010)" + // ^^^^ // "Thread 162.32942" + // ^^^^^ + // "thread abc123" + // ^^^^^^ Matcher matcher = fgOsIdPattern1.matcher(str); if (matcher.find()) { @@ -132,15 +138,20 @@ public class MIThread { return matcher.group(1); } + matcher = fgOsIdPattern3.matcher(str); + if (matcher.find()) { + return matcher.group(1); + } + return null; } - private static Pattern fgIdPattern = Pattern.compile("Thread\\s*(\\d+)\\.\\d+", 0); //$NON-NLS-1$ + private static Pattern fgIdPattern = Pattern.compile("[Tt][Hh][Rr][Ee][Aa][Dd]\\s*(\\d+)\\.\\d+", 0); //$NON-NLS-1$ private static String parseParentId(String str) { // General format: - // "Thread 0xb7c8ab90 (LWP 7010)" // "Thread 162.32942" + // ^^^ Matcher matcher = fgIdPattern.matcher(str); if (matcher.find()) {