blob: 1395b45b39ea7f48e4e069ee9daca055c27b2486 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2015 QNX Software Systems, Freescale Semiconductor and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Freescale Semiconductor, QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.dsf.mi.service.command.output;
import java.util.StringTokenizer;
/**
* @since 3.0
*/
public class CLIInfoProgramInfo extends MIInfo {
Long fPid;
public CLIInfoProgramInfo(MIOutput out) {
super(out);
parse();
}
/**
* Return the inferior's PID reported in the output, or null if we didn't
* find it there.
*/
public Long getPID() {
return fPid;
}
void parse() {
if (isDone()) {
MIOutput out = getMIOutput();
MIOOBRecord[] oobs = out.getMIOOBRecords();
for (MIOOBRecord oob : oobs) {
if (oob instanceof MIConsoleStreamOutput) {
parseLine(((MIConsoleStreamOutput) oob).getString());
// quit parsing output once we have everything we want out
// of it
if (fPid != null) {
break;
}
}
}
}
}
void parseLine(String str) {
// Sample output on Windows:
// [New thread 4960.0x5d8]
// Using the running image of child thread 4960.0x5d8.
// Program stopped at 0x4012f5.
// It stopped at a breakpoint that has since been deleted.
if (str != null && !str.isEmpty()) {
str = str.replace('.', ' ').trim();
if (str.startsWith("Using")) { //$NON-NLS-1$
StringTokenizer st = new StringTokenizer(str);
while (st.hasMoreTokens()) {
String s = st.nextToken();
/* Not a process id if LWP is reported */
if (s.equals("LWP")) //$NON-NLS-1$
break;
if (Character.isDigit(s.charAt(0))) {
try {
fPid = Long.decode(s).longValue();
break;
} catch (NumberFormatException e) {
}
}
}
}
}
}
}