From c61ae8a137725a03e7b8bb3a71f618aa2fa88b58 Mon Sep 17 00:00:00 2001 From: Mathias Kunter Date: Mon, 5 Mar 2012 16:08:53 -0500 Subject: [PATCH] Bug 370462: Improving the debug preferences - add support for different charsets and unify DSF and CDI debug preferences --- .../src/org/eclipse/cdt/core/IAddress.java | 11 +- .../utils/org/eclipse/cdt/utils/Addr32.java | 23 +++- .../utils/org/eclipse/cdt/utils/Addr64.java | 23 +++- .../eclipse/cdt/debug/core/CDebugUtils.java | 7 +- .../cdt/debug/core/ICDebugConstants.java | 22 +++- .../core/CDebugCorePreferenceInitializer.java | 11 +- .../internal/core/model/CIndexedValue.java | 9 +- .../cdt/debug/internal/core/model/CValue.java | 117 ++++++++++++++++-- .../ui/preferences/CDebugPreferencePage.java | 110 ++++++++++++---- .../preferences/PreferenceMessages.properties | 19 +-- .../images/view_debug_prefs.png | Bin 22587 -> 39301 bytes .../reference/cdt_u_dbg_pref.htm | 26 ++-- .../gdb/launching/FinalLaunchSequence.java | 17 ++- .../dsf/gdb/service/command/GDBControl.java | 27 +++- .../gdb/service/command/GDBControl_7_0.java | 30 ++++- .../dsf/gdb/service/command/IGDBControl.java | 11 +- .../mi/service/command/CommandFactory.java | 26 ++++ .../command/commands/MIGDBSetCharset.java | 30 +++++ .../command/commands/MIGDBSetHostCharset.java | 28 +++++ .../MIGDBSetPrintSevenbitStrings.java | 29 +++++ .../commands/MIGDBSetTargetCharset.java | 29 +++++ .../commands/MIGDBSetTargetWideCharset.java | 31 +++++ .../numberformat/FormattedValueVMUtil.java | 35 +++++- .../cdt/dsf/debug/service/IExpressions.java | 4 +- 24 files changed, 589 insertions(+), 86 deletions(-) create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetCharset.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetHostCharset.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetPrintSevenbitStrings.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetTargetCharset.java create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetTargetWideCharset.java diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java index 13e94048c90..200fb426a35 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/IAddress.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2008 Intel Corporation and others. + * Copyright (c) 2004, 2012 Intel Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,6 +8,7 @@ * Contributors: * Intel Corporation - Initial API and implementation * Mark Mitchell, CodeSourcery - Bug 136896: View variables in binary format + * Mathias Kunter - Bug 370462: View variables in octal format *******************************************************************************/ package org.eclipse.cdt.core; @@ -103,6 +104,14 @@ public interface IAddress extends Comparable { */ String toHexAddressString(); + /** + * Converts address to the octal representation with '0' prefix and + * with all leading zeros. The length of returned string should be + * the same for all addresses of given class. I.e. 12 for 32-bit + * addresses and 23 for 64-bit addresses + * @since 5.4 + */ + String toOctalAddressString(); /** * Converts address to the binary representation with '0b' prefix and diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr32.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr32.java index 08ed4f425de..34291bc8ed5 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr32.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr32.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2010 Intel Corporation and others. + * Copyright (c) 2004, 2012 Intel Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,6 +8,7 @@ * Contributors: * Intel Corporation - Initial API and implementation * Mark Mitchell, CodeSourcery - Bug 136896: View variables in binary format + * Mathias Kunter - Bug 370462: View variables in octal format *******************************************************************************/ package org.eclipse.cdt.utils; @@ -29,6 +30,8 @@ public class Addr32 implements IAddress, Serializable { private static final int BYTES_NUM = 4; private static final int DIGITS_NUM = BYTES_NUM * 2; private static final int CHARS_NUM = DIGITS_NUM + 2; + private static final int OCTAL_DIGITS_NUM = (BYTES_NUM * 8 + 2) / 3; + private static final int OCTAL_CHARS_NUM = OCTAL_DIGITS_NUM + 1; private static final int BINARY_DIGITS_NUM = BYTES_NUM * 8; private static final int BINARY_CHARS_NUM = BINARY_DIGITS_NUM + 2; @@ -157,7 +160,23 @@ public class Addr32 implements IAddress, Serializable { sb.append(addressString); return sb.toString(); } - + + /** + * @since 5.4 + */ + @Override + public String toOctalAddressString() { + String addressString = Long.toString(address, 8); + StringBuffer sb = new StringBuffer(OCTAL_CHARS_NUM); + int count = OCTAL_DIGITS_NUM - addressString.length(); + sb.append("0"); //$NON-NLS-1$ + for (int i = 0; i < count; ++i) { + sb.append('0'); + } + sb.append(addressString); + return sb.toString(); + } + @Override public String toBinaryAddressString() { String addressString = Long.toString(address, 2); diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr64.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr64.java index f7321cc39ff..9babfb41c18 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr64.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/Addr64.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2010 Intel Corporation and others. + * Copyright (c) 2004, 2012 Intel Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,6 +8,7 @@ * Contributors: * Intel Corporation - Initial API and implementation * Mark Mitchell, CodeSourcery - Bug 136896: View variables in binary format + * Mathias Kunter - Bug 370462: View variables in octal format *******************************************************************************/ package org.eclipse.cdt.utils; @@ -27,6 +28,8 @@ public class Addr64 implements IAddress, Serializable { private static final int BYTES_NUM = 8; private static final int DIGITS_NUM = BYTES_NUM * 2; private static final int CHARS_NUM = DIGITS_NUM + 2; + private static final int OCTAL_DIGITS_NUM = (BYTES_NUM * 8 + 2) / 3; + private static final int OCTAL_CHARS_NUM = OCTAL_DIGITS_NUM + 1; private static final int BINARY_DIGITS_NUM = BYTES_NUM * 8; private static final int BINARY_CHARS_NUM = BINARY_DIGITS_NUM + 2; @@ -161,7 +164,23 @@ public class Addr64 implements IAddress, Serializable { sb.append(addressString); return sb.toString(); } - + + /** + * @since 5.4 + */ + @Override + public String toOctalAddressString() { + String addressString = address.toString(8); + StringBuffer sb = new StringBuffer(OCTAL_CHARS_NUM); + int count = OCTAL_DIGITS_NUM - addressString.length(); + sb.append("0"); //$NON-NLS-1$ + for (int i = 0; i < count; ++i) { + sb.append('0'); + } + sb.append(addressString); + return sb.toString(); + } + @Override public String toBinaryAddressString() { String addressString = address.toString(2); diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugUtils.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugUtils.java index b5795ec4946..e3894da28da 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugUtils.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugUtils.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2011 QNX Software Systems and others. + * Copyright (c) 2000, 2012 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -9,6 +9,7 @@ * QNX Software Systems - Initial API and implementation * Freescale Semiconductor - Address watchpoints, https://bugs.eclipse.org/bugs/show_bug.cgi?id=118299 * Patrick Chuong (Texas Instruments) - Update CDT ToggleBreakpointTargetFactory enablement (340177) + * Mathias Kunter - PREF_CHARSET has been renamed to PREF_WIDE_CHARSET (bug 370462) *******************************************************************************/ package org.eclipse.cdt.debug.core; @@ -502,7 +503,7 @@ public class CDebugUtils { private static CharsetDecoder fDecoder; public static CharsetDecoder getCharsetDecoder() { - String charsetName = CDebugCorePlugin.getDefault().getPluginPreferences().getString(ICDebugConstants.PREF_CHARSET); + String charsetName = CDebugCorePlugin.getDefault().getPluginPreferences().getString(ICDebugConstants.PREF_WIDE_CHARSET); if (fDecoder == null || !fDecoder.charset().name().equals(charsetName)) { Charset charset = Charset.forName(charsetName); fDecoder = charset.newDecoder(); @@ -756,4 +757,4 @@ public class CDebugUtils { String customModel = System.getProperty(ICDebugConstants.PREF_TOGGLE_BREAKPOINT_MODEL_IDENTIFIER, null); return customModel != null && Boolean.valueOf(customModel); } -} \ No newline at end of file +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDebugConstants.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDebugConstants.java index c56fd788c15..386035ec333 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDebugConstants.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICDebugConstants.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2011 QNX Software Systems and others. + * Copyright (c) 2000, 2012 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -9,6 +9,7 @@ * QNX Software Systems - Initial API and implementation * Ken Ryall (Nokia) - 207675 * Patrick Chuong (Texas Instruments) - Update CDT ToggleBreakpointTargetFactory enablement (340177) + * Mathias Kunter - Support for different charsets (bug 370462) *******************************************************************************/ package org.eclipse.cdt.debug.core; @@ -38,10 +39,17 @@ public interface ICDebugConstants { public static final String PREF_DEFAULT_REGISTER_FORMAT = PLUGIN_ID + "cDebug.default_register_format"; //$NON-NLS-1$ /** - * The identifier of the character set to use with unicode types - * view + * The charset to use for decoding char type strings. We however can't use the ID + * "character_set" here because that would break backwards compatibility. */ - public static final String PREF_CHARSET = PLUGIN_ID + "cDebug.character_set"; //$NON-NLS-1$ + public static final String PREF_CHARSET = PLUGIN_ID + "cDebug.non_wide_character_set"; //$NON-NLS-1$ + + /** + * The charset to use for decoding wchar_t type strings. We have to use the ID + * "character_set" here so that we don't break backwards compatibility. + * @since 7.2 + */ + public static final String PREF_WIDE_CHARSET = PLUGIN_ID + "cDebug.character_set"; //$NON-NLS-1$ /** * The identifier of the default expression format to use in the expressions @@ -105,10 +113,12 @@ public interface ICDebugConstants { public static final String PREF_INSTRUCTION_STEP_MODE_ON = PLUGIN_ID + "cDebug.Disassembly.instructionStepOn"; //$NON-NLS-1$ /** - * The default character set to use with unicode strings. + * The default character set to use. + * @deprecated Provided for compatibility reasons only. Use the default value + * from the Preferences object instead. */ public static final String DEF_CHARSET = "UTF-16"; //$NON-NLS-1$ - + /** * Specifies the stepping mode (context/source/instruction) */ diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CDebugCorePreferenceInitializer.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CDebugCorePreferenceInitializer.java index a5d67555f1c..d857953ab98 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CDebugCorePreferenceInitializer.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CDebugCorePreferenceInitializer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2007 QNX Software Systems and others. + * Copyright (c) 2004, 2012 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,9 +8,12 @@ * Contributors: * QNX Software Systems - Initial API and implementation * Ken Ryall (Nokia) - 207675 + * Mathias Kunter - Using adequate default charsets (bug 370462) *******************************************************************************/ package org.eclipse.cdt.debug.internal.core; +import java.nio.charset.Charset; + import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.ICDebugConstants; import org.eclipse.cdt.debug.core.cdi.ICDIFormat; @@ -37,7 +40,11 @@ public class CDebugCorePreferenceInitializer extends AbstractPreferenceInitializ CDebugCorePlugin.getDefault().getPluginPreferences().setDefault( ICDebugConstants.PREF_DEFAULT_VARIABLE_FORMAT, ICDIFormat.NATURAL ); CDebugCorePlugin.getDefault().getPluginPreferences().setDefault( ICDebugConstants.PREF_DEFAULT_EXPRESSION_FORMAT, ICDIFormat.NATURAL ); CDebugCorePlugin.getDefault().getPluginPreferences().setDefault( ICDebugConstants.PREF_DEFAULT_REGISTER_FORMAT, ICDIFormat.NATURAL ); - CDebugCorePlugin.getDefault().getPluginPreferences().setDefault( ICDebugConstants.PREF_CHARSET, ICDebugConstants.DEF_CHARSET ); + CDebugCorePlugin.getDefault().getPluginPreferences().setDefault( ICDebugConstants.PREF_CHARSET, Charset.defaultCharset().name() ); + if (System.getProperty("os.name").toLowerCase().startsWith("windows")) //$NON-NLS-1$ //$NON-NLS-2$ + CDebugCorePlugin.getDefault().getPluginPreferences().setDefault( ICDebugConstants.PREF_WIDE_CHARSET, "UTF-16"); //$NON-NLS-1$ + else + CDebugCorePlugin.getDefault().getPluginPreferences().setDefault( ICDebugConstants.PREF_WIDE_CHARSET, "UTF-32"); //$NON-NLS-1$ CDebugCorePlugin.getDefault().getPluginPreferences().setDefault( ICDebugConstants.PREF_INSTRUCTION_STEP_MODE_ON, false ); } } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CIndexedValue.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CIndexedValue.java index 2c7483df20b..e6ca4898757 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CIndexedValue.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CIndexedValue.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2009 QNX Software Systems and others. + * Copyright (c) 2004, 2012 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,6 +7,7 @@ * * Contributors: * QNX Software Systems - Initial API and implementation + * Mathias Kunter - Support for octal number format (bug 370462) *******************************************************************************/ package org.eclipse.cdt.debug.internal.core.model; @@ -162,9 +163,11 @@ public class CIndexedValue extends AbstractCValue implements IIndexedValue { CVariableFormat format = getParentVariable().getFormat(); if ( CVariableFormat.NATURAL.equals( format ) || CVariableFormat.HEXADECIMAL.equals( format ) ) return address.toHexAddressString(); - if ( CVariableFormat.DECIMAL.equals( format ) ) + else if ( CVariableFormat.DECIMAL.equals( format ) ) return address.toString(); - if ( CVariableFormat.BINARY.equals( format ) ) + else if ( CVariableFormat.OCTAL.equals( format ) ) + return address.toOctalAddressString(); + else if ( CVariableFormat.BINARY.equals( format ) ) return address.toBinaryAddressString(); return null; } catch (CDIException e) { diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java index 5614958f953..eca33a16f55 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2010 QNX Software Systems and others. + * Copyright (c) 2000, 2012 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -10,6 +10,7 @@ * Mark Mitchell, CodeSourcery - Bug 136896: View variables in binary format * Warren Paul (Nokia) - 150860, 150864, 150862, 150863, 217493 * Ken Ryall (Nokia) - 207675 + * Mathias Kunter - Support for octal number format (bug 370462) *******************************************************************************/ package org.eclipse.cdt.debug.internal.core.model; @@ -277,6 +278,19 @@ public class CValue extends AbstractCValue { sb.append( (stringValue.length() > 2) ? stringValue.substring( stringValue.length() - 2 ) : stringValue ); return sb.toString(); } + else if ( CVariableFormat.OCTAL.equals( format ) ) { + StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$ + String stringValue = (isUnsigned()) ? Integer.toOctalString( value.shortValue() ) : Integer.toOctalString( (byte)value.byteValue() ); + stringValue = (stringValue.length() > 3) ? stringValue.substring( stringValue.length() - 3 ) : stringValue; + sb.append( (stringValue.length() == 3 && stringValue.charAt( 0 ) >= '4') ? (char)(stringValue.charAt( 0 ) - 4) + stringValue.substring( 1 ) : stringValue ); + return sb.toString(); + } + else if ( CVariableFormat.BINARY.equals( format ) ) { + StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$ + String stringValue = (isUnsigned()) ? Integer.toBinaryString( value.shortValue() ) : Integer.toBinaryString( (byte)value.byteValue() ); + sb.append( (stringValue.length() > 8) ? stringValue.substring( stringValue.length() - 8 ) : stringValue ); + return sb.toString(); + } return null; } @@ -313,6 +327,13 @@ public class CValue extends AbstractCValue { sb.append( (stringValue.length() > 2) ? stringValue.substring( stringValue.length() - 2 ) : stringValue ); return sb.toString(); } + else if ( CVariableFormat.OCTAL.equals( format ) ) { + StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$ + String stringValue = (isUnsigned()) ? Integer.toOctalString( value.shortValue() ) : Integer.toOctalString( (byte)value.byteValue() ); + stringValue = (stringValue.length() > 3) ? stringValue.substring( stringValue.length() - 3 ) : stringValue; + sb.append( (stringValue.length() == 3 && stringValue.charAt( 0 ) >= '4') ? (char)(stringValue.charAt( 0 ) - 4) + stringValue.substring( 1 ) : stringValue ); + return sb.toString(); + } else if ( CVariableFormat.BINARY.equals( format ) ) { StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$ String stringValue = (isUnsigned()) ? Integer.toBinaryString( value.shortValue() ) : Integer.toBinaryString( (byte)value.byteValue() ); @@ -338,6 +359,13 @@ public class CValue extends AbstractCValue { sb.append( (stringValue.length() > 4) ? stringValue.substring( stringValue.length() - 4 ) : stringValue ); return sb.toString(); } + else if ( CVariableFormat.OCTAL.equals( format ) ) { + StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$ + String stringValue = Integer.toOctalString( (isUnsigned()) ? value.intValue() : value.shortValue() ); + stringValue = (stringValue.length() > 6) ? stringValue.substring( stringValue.length() - 6 ) : stringValue; + sb.append( (stringValue.length() == 6 && stringValue.charAt( 0 ) >= '2') ? (char)((stringValue.charAt( 0 ) - '0') % 2 + '0') + stringValue.substring( 1 ) : stringValue ); + return sb.toString(); + } else if ( CVariableFormat.BINARY.equals( format ) ) { StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$ String stringValue = Integer.toBinaryString( (isUnsigned()) ? value.intValue() : value.shortValue() ); @@ -363,6 +391,13 @@ public class CValue extends AbstractCValue { sb.append( (stringValue.length() > 8) ? stringValue.substring( stringValue.length() - 8 ) : stringValue ); return sb.toString(); } + else if ( CVariableFormat.OCTAL.equals( format ) ) { + StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$ + String stringValue = (isUnsigned()) ? Long.toOctalString( value.longValue() ) : Integer.toOctalString( value.intValue() ); + stringValue = (stringValue.length() > 11) ? stringValue.substring( stringValue.length() - 11 ) : stringValue; + sb.append( (stringValue.length() == 11 && stringValue.charAt( 0 ) >= '4') ? (char)(stringValue.charAt( 0 ) - 4) + stringValue.substring( 1 ) : stringValue ); + return sb.toString(); + } else if ( CVariableFormat.BINARY.equals( format ) ) { StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$ String stringValue = (isUnsigned()) ? Long.toBinaryString( value.longValue() ) : Integer.toBinaryString( value.intValue() ); @@ -385,7 +420,7 @@ public class CValue extends AbstractCValue { BigInteger bigValue = new BigInteger( value.getValueString() ); return bigValue.toString(); } - return Long.toString( value.longValue() ); + return Integer.toString( value.intValue() ); } else if ( CVariableFormat.HEXADECIMAL.equals( format ) ) { StringBuffer sb = new StringBuffer( "0x" ); //$NON-NLS-1$ @@ -394,7 +429,17 @@ public class CValue extends AbstractCValue { sb.append( bigValue.toString( 16 ) ); } else - sb.append( Long.toHexString( value.longValue() ) ); + sb.append( Integer.toHexString( value.intValue() ) ); + return sb.toString(); + } + else if ( CVariableFormat.OCTAL.equals( format ) ) { + StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$ + if ( isUnsigned() ) { + BigInteger bigValue = new BigInteger( value.getValueString() ); + sb.append( bigValue.toString( 8 ) ); + } + else + sb.append( Integer.toOctalString( value.intValue() ) ); return sb.toString(); } else if ( CVariableFormat.BINARY.equals( format ) ) { @@ -404,7 +449,7 @@ public class CValue extends AbstractCValue { sb.append( bigValue.toString( 2 ) ); } else - sb.append( Long.toBinaryString( value.longValue() ) ); + sb.append( Integer.toBinaryString( value.intValue() ) ); return sb.toString(); } } @@ -438,6 +483,16 @@ public class CValue extends AbstractCValue { sb.append( Long.toHexString( value.longValue() ) ); return sb.toString(); } + else if ( CVariableFormat.OCTAL.equals( format ) ) { + StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$ + if ( isUnsigned() ) { + BigInteger bigValue = new BigInteger( value.getValueString() ); + sb.append( bigValue.toString( 8 ) ); + } + else + sb.append( Long.toOctalString( value.longValue() ) ); + return sb.toString(); + } else if ( CVariableFormat.BINARY.equals( format ) ) { StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$ if ( isUnsigned() ) { @@ -470,6 +525,13 @@ public class CValue extends AbstractCValue { } else sb.append(Long.toHexString(bigValue.longValue())); return sb.toString(); + } else if (CVariableFormat.OCTAL.equals(format)) { + StringBuffer sb = new StringBuffer("0"); //$NON-NLS-1$ + if (isUnsigned()) { + sb.append(bigValue.toString(8)); + } else + sb.append(Long.toOctalString(bigValue.longValue())); + return sb.toString(); } else if (CVariableFormat.BINARY.equals(format)) { StringBuffer sb = new StringBuffer("0b"); //$NON-NLS-1$ if (isUnsigned()) { @@ -504,6 +566,13 @@ public class CValue extends AbstractCValue { sb.append( (stringValue.length() > 8) ? stringValue.substring( stringValue.length() - 8 ) : stringValue ); return sb.toString(); } + else if ( CVariableFormat.OCTAL.equals( format ) ) { + StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$ + String stringValue = Long.toOctalString( Float.floatToIntBits(floatValue) ); + stringValue = (stringValue.length() > 11) ? stringValue.substring( stringValue.length() - 11 ) : stringValue; + sb.append( (stringValue.length() == 11 && stringValue.charAt( 0 ) >= '4') ? (char)(stringValue.charAt( 0 ) - 4) + stringValue.substring( 1 ) : stringValue ); + return sb.toString(); + } else if ( CVariableFormat.BINARY.equals( format ) ) { StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$ String stringValue = Long.toBinaryString( Float.floatToIntBits(floatValue) ); @@ -533,6 +602,13 @@ public class CValue extends AbstractCValue { sb.append( (stringValue.length() > 16) ? stringValue.substring( stringValue.length() - 16 ) : stringValue ); return sb.toString(); } + else if ( CVariableFormat.OCTAL.equals( format ) ) { + StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$ + String stringValue = Long.toOctalString( Double.doubleToLongBits(doubleValue) ); + stringValue = (stringValue.length() > 22) ? stringValue.substring( stringValue.length() - 22 ) : stringValue; + sb.append( (stringValue.length() == 22 && stringValue.charAt( 0 ) >= '2') ? (char)((stringValue.charAt( 0 ) - '0') % 2 + '0') + stringValue.substring( 1 ) : stringValue ); + return sb.toString(); + } else if ( CVariableFormat.BINARY.equals( format ) ) { StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$ String stringValue = Long.toBinaryString( Double.doubleToLongBits(doubleValue) ); @@ -554,9 +630,11 @@ public class CValue extends AbstractCValue { CVariableFormat format = getParentVariable().getFormat(); if ( CVariableFormat.NATURAL.equals( format ) || CVariableFormat.HEXADECIMAL.equals( format ) ) return address.toHexAddressString(); - if ( CVariableFormat.DECIMAL.equals( format ) ) + else if ( CVariableFormat.DECIMAL.equals( format ) ) return address.toString(); - if ( CVariableFormat.BINARY.equals( format ) ) + else if ( CVariableFormat.OCTAL.equals( format ) ) + return address.toOctalAddressString(); + else if ( CVariableFormat.BINARY.equals( format ) ) return address.toBinaryAddressString(); return null; } @@ -590,6 +668,13 @@ public class CValue extends AbstractCValue { sb.append( (stringValue.length() > 4) ? stringValue.substring( stringValue.length() - 4 ) : stringValue ); return sb.toString(); } + else if ( CVariableFormat.OCTAL.equals( format ) ) { + StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$ + String stringValue = Integer.toOctalString( (isUnsigned()) ? value.intValue() : value.shortValue() ); + stringValue = (stringValue.length() > 6) ? stringValue.substring( stringValue.length() - 6 ) : stringValue; + sb.append( (stringValue.length() == 6 && stringValue.charAt( 0 ) >= '2') ? (char)((stringValue.charAt( 0 ) - '0') % 2 + '0') + stringValue.substring( 1 ) : stringValue ); + return sb.toString(); + } else if ( CVariableFormat.BINARY.equals( format ) ) { StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$ String stringValue = Integer.toBinaryString( (isUnsigned()) ? value.intValue() : value.shortValue() ); @@ -623,9 +708,16 @@ public class CValue extends AbstractCValue { sb.append( (stringValue.length() > 8) ? stringValue.substring( stringValue.length() - 8 ) : stringValue ); return sb.toString(); } + else if ( CVariableFormat.OCTAL.equals( format ) ) { + StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$ + String stringValue = (isUnsigned()) ? Long.toOctalString( value.longValue() ) : Integer.toOctalString( value.intValue() ); + stringValue = (stringValue.length() > 11) ? stringValue.substring( stringValue.length() - 11 ) : stringValue; + sb.append( (stringValue.length() == 11 && stringValue.charAt( 0 ) >= '4') ? (char)(stringValue.charAt( 0 ) - 4) + stringValue.substring( 1 ) : stringValue ); + return sb.toString(); + } else if ( CVariableFormat.BINARY.equals( format ) ) { StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$ - String stringValue = (isUnsigned()) ? Long.toBinaryString( value.longValue() ) : Integer.toHexString( value.intValue() ); + String stringValue = (isUnsigned()) ? Long.toBinaryString( value.longValue() ) : Integer.toBinaryString( value.intValue() ); sb.append( (stringValue.length() > 32) ? stringValue.substring( stringValue.length() - 32 ) : stringValue ); return sb.toString(); } @@ -648,14 +740,17 @@ public class CValue extends AbstractCValue { } else if ( CVariableFormat.HEXADECIMAL.equals( format ) ) { StringBuffer sb = new StringBuffer("0x"); //$NON-NLS-1$ - BigInteger bigValue = value.bigIntegerValue(); - sb.append(bigValue.toString(16)); + sb.append(value.bigIntegerValue().toString(16)); + return sb.toString(); + } + else if ( CVariableFormat.OCTAL.equals( format ) ) { + StringBuffer sb = new StringBuffer("0"); //$NON-NLS-1$ + sb.append(value.bigIntegerValue().toString(8)); return sb.toString(); } else if ( CVariableFormat.BINARY.equals( format ) ) { StringBuffer sb = new StringBuffer("0b"); //$NON-NLS-1$ - BigInteger bigValue = value.bigIntegerValue(); - sb.append(bigValue.toString(2)); + sb.append(value.bigIntegerValue().toString(2)); return sb.toString(); } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/CDebugPreferencePage.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/CDebugPreferencePage.java index 8e0da95abd1..1960ddd60a5 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/CDebugPreferencePage.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/CDebugPreferencePage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2011 QNX Software Systems and others. + * Copyright (c) 2004, 2012 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,14 +8,10 @@ * Contributors: * QNX Software Systems - Initial API and implementation * Ken Ryall (Nokia) - 207675 + * Mathias Kunter - Support for different charsets (bug 370462) *******************************************************************************/ package org.eclipse.cdt.debug.internal.ui.preferences; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.SortedMap; - import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePreferenceConstants; import org.eclipse.cdt.debug.core.CDebugCorePlugin; @@ -26,8 +22,10 @@ import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.cdt.utils.ui.controls.ControlFactory; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.IDebugView; +import org.eclipse.jface.preference.FieldEditor; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.jface.preference.PreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.StructuredViewer; @@ -46,6 +44,7 @@ import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.ide.dialogs.EncodingFieldEditor; /** * Preference page for debug preferences that apply specifically to C/C++ Debugging. @@ -57,15 +56,29 @@ public class CDebugPreferencePage extends PreferencePage implements IWorkbenchPr private Combo fVariableFormatCombo; private Combo fExpressionFormatCombo; - + private Combo fRegisterFormatCombo; - private Combo fCharsetCombo; + private EncodingFieldEditor fCharsetEditor; + + private EncodingFieldEditor fWideCharsetEditor; // Format constants - private static int[] fFormatIds = new int[]{ ICDIFormat.NATURAL, ICDIFormat.HEXADECIMAL, ICDIFormat.DECIMAL, ICDIFormat.BINARY }; + private static int[] fFormatIds = new int[] { + ICDIFormat.NATURAL, + ICDIFormat.HEXADECIMAL, + ICDIFormat.DECIMAL, + ICDIFormat.OCTAL, + ICDIFormat.BINARY + }; - private static String[] fFormatLabels = new String[]{ PreferenceMessages.getString( "CDebugPreferencePage.0" ), PreferenceMessages.getString( "CDebugPreferencePage.1" ), PreferenceMessages.getString( "CDebugPreferencePage.2" ), PreferenceMessages.getString( "CDebugPreferencePage.14" ) }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + private static String[] fFormatLabels = new String[] { + PreferenceMessages.getString( "CDebugPreferencePage.0" ), //$NON-NLS-1$ + PreferenceMessages.getString( "CDebugPreferencePage.1" ), //$NON-NLS-1$ + PreferenceMessages.getString( "CDebugPreferencePage.2" ), //$NON-NLS-1$ + PreferenceMessages.getString( "CDebugPreferencePage.17" ), //$NON-NLS-1$ + PreferenceMessages.getString( "CDebugPreferencePage.14" ) //$NON-NLS-1$ + }; private PropertyChangeListener fPropertyChangeListener; @@ -79,10 +92,21 @@ public class CDebugPreferencePage extends PreferencePage implements IWorkbenchPr public void propertyChange( PropertyChangeEvent event ) { if ( event.getProperty().equals( ICDebugPreferenceConstants.PREF_SHOW_HEX_VALUES ) ) { fHasStateChanged = true; - } - else if ( event.getProperty().equals( ICDebugPreferenceConstants.PREF_SHOW_CHAR_VALUES ) ) { + } else if ( event.getProperty().equals( ICDebugPreferenceConstants.PREF_SHOW_CHAR_VALUES ) ) { fHasStateChanged = true; + } else if (event.getProperty().equals(FieldEditor.VALUE)) { + fHasStateChanged = true; + } else if (event.getProperty().equals(FieldEditor.IS_VALID)) { + setValid(fCharsetEditor.isValid() && fWideCharsetEditor.isValid()); + if (!fCharsetEditor.isValid()) { + setErrorMessage(PreferenceMessages.getString("CDebugPreferencePage.19")); //$NON-NLS-1$ + } else if (!fWideCharsetEditor.isValid()) { + setErrorMessage(PreferenceMessages.getString("CDebugPreferencePage.20")); //$NON-NLS-1$ + } else { + setErrorMessage(null); + } } + } protected boolean hasStateChanged() { @@ -122,6 +146,8 @@ public class CDebugPreferencePage extends PreferencePage implements IWorkbenchPr createSpacer( composite, 1 ); createViewSettingPreferences( composite ); createSpacer( composite, 1 ); + createCharsetSettingPreferences( composite ); + createSpacer( composite, 1 ); createBinarySettings( composite ); setValues(); return composite; @@ -146,10 +172,29 @@ public class CDebugPreferencePage extends PreferencePage implements IWorkbenchPr * Set the values of the component widgets based on the values in the preference store */ private void setValues() { + // Number format combos fVariableFormatCombo.select( getFormatIndex( CDebugCorePlugin.getDefault().getPluginPreferences().getInt( ICDebugConstants.PREF_DEFAULT_VARIABLE_FORMAT ) ) ); fExpressionFormatCombo.select( getFormatIndex( CDebugCorePlugin.getDefault().getPluginPreferences().getInt( ICDebugConstants.PREF_DEFAULT_EXPRESSION_FORMAT ) ) ); fRegisterFormatCombo.select( getFormatIndex( CDebugCorePlugin.getDefault().getPluginPreferences().getInt( ICDebugConstants.PREF_DEFAULT_REGISTER_FORMAT ) ) ); - fCharsetCombo.setText( CDebugCorePlugin.getDefault().getPluginPreferences().getString( ICDebugConstants.PREF_CHARSET ) ); + + // Charset editors + PreferenceStore ps = new PreferenceStore(); + + ps.setDefault(ICDebugConstants.PREF_CHARSET, CDebugCorePlugin.getDefault().getPluginPreferences().getDefaultString(ICDebugConstants.PREF_CHARSET)); + ps.setValue(ICDebugConstants.PREF_CHARSET, CDebugCorePlugin.getDefault().getPluginPreferences().getString(ICDebugConstants.PREF_CHARSET)); + fCharsetEditor.setPreferenceStore(ps); + fCharsetEditor.load(); + if (CDebugCorePlugin.getDefault().getPluginPreferences().isDefault(ICDebugConstants.PREF_CHARSET)) + fCharsetEditor.loadDefault(); + + ps.setDefault(ICDebugConstants.PREF_WIDE_CHARSET, CDebugCorePlugin.getDefault().getPluginPreferences().getDefaultString(ICDebugConstants.PREF_WIDE_CHARSET)); + ps.setValue(ICDebugConstants.PREF_WIDE_CHARSET, CDebugCorePlugin.getDefault().getPluginPreferences().getString(ICDebugConstants.PREF_WIDE_CHARSET)); + fWideCharsetEditor.setPreferenceStore(ps); + fWideCharsetEditor.load(); + if (CDebugCorePlugin.getDefault().getPluginPreferences().isDefault(ICDebugConstants.PREF_WIDE_CHARSET)) + fWideCharsetEditor.loadDefault(); + + // Others fShowBinarySourceFilesButton.setSelection( CCorePlugin.getDefault().getPluginPreferences().getBoolean( CCorePreferenceConstants.SHOW_SOURCE_FILES_IN_BINARIES ) ); } @@ -196,21 +241,25 @@ public class CDebugPreferencePage extends PreferencePage implements IWorkbenchPr fVariableFormatCombo = createComboBox( formatComposite, PreferenceMessages.getString( "CDebugPreferencePage.8" ), fFormatLabels, fFormatLabels[0] ); //$NON-NLS-1$ fExpressionFormatCombo = createComboBox( formatComposite, PreferenceMessages.getString( "CDebugPreferencePage.9" ), fFormatLabels, fFormatLabels[0] ); //$NON-NLS-1$ fRegisterFormatCombo = createComboBox( formatComposite, PreferenceMessages.getString( "CDebugPreferencePage.10" ), fFormatLabels, fFormatLabels[0] ); //$NON-NLS-1$ - String[] charsetNames = getCharsetNames(); - fCharsetCombo = createComboBox( formatComposite, PreferenceMessages.getString( "CDebugPreferencePage.16" ), charsetNames, charsetNames[0] ); //$NON-NLS-1$ } - - private String[] getCharsetNames() { - ArrayList names = new ArrayList(); - SortedMap setmap = Charset.availableCharsets(); + + private void createCharsetSettingPreferences( Composite parent ) { + // Create containing composite + Composite formatComposite = ControlFactory.createComposite( parent, 2); + ((GridLayout)formatComposite.getLayout()).marginWidth = 0; + ((GridLayout)formatComposite.getLayout()).marginHeight = 0; - for (Iterator iterator = setmap.keySet().iterator(); iterator.hasNext();) { - String entry = (String) iterator.next(); - names.add(entry); - } - return (String[]) names.toArray(new String[names.size()]); + // Create charset editor + Composite charsetComposite = ControlFactory.createComposite(formatComposite, 1); + fCharsetEditor = new EncodingFieldEditor(ICDebugConstants.PREF_CHARSET, "", PreferenceMessages.getString( "CDebugPreferencePage.18" ), charsetComposite); //$NON-NLS-1$ //$NON-NLS-2$ + fCharsetEditor.setPropertyChangeListener(getPropertyChangeListener()); + + // Create wide charset editor + Composite wideCharsetComposite = ControlFactory.createComposite(formatComposite, 1); + fWideCharsetEditor = new EncodingFieldEditor(ICDebugConstants.PREF_WIDE_CHARSET, "", PreferenceMessages.getString( "CDebugPreferencePage.16" ), wideCharsetComposite); //$NON-NLS-1$ //$NON-NLS-2$ + fWideCharsetEditor.setPropertyChangeListener(getPropertyChangeListener()); } - + private void createBinarySettings( Composite parent ) { fShowBinarySourceFilesButton = createCheckButton( parent, PreferenceMessages.getString("CDebugPreferencePage.15") ); //$NON-NLS-1$ } @@ -304,7 +353,13 @@ public class CDebugPreferencePage extends PreferencePage implements IWorkbenchPr CDebugCorePlugin.getDefault().getPluginPreferences().setValue( ICDebugConstants.PREF_DEFAULT_VARIABLE_FORMAT, getFormatId( fVariableFormatCombo.getSelectionIndex() ) ); CDebugCorePlugin.getDefault().getPluginPreferences().setValue( ICDebugConstants.PREF_DEFAULT_EXPRESSION_FORMAT, getFormatId( fExpressionFormatCombo.getSelectionIndex() ) ); CDebugCorePlugin.getDefault().getPluginPreferences().setValue( ICDebugConstants.PREF_DEFAULT_REGISTER_FORMAT, getFormatId( fRegisterFormatCombo.getSelectionIndex() ) ); - CDebugCorePlugin.getDefault().getPluginPreferences().setValue( ICDebugConstants.PREF_CHARSET, fCharsetCombo.getItem( fCharsetCombo.getSelectionIndex()) ); + + fCharsetEditor.store(); + CDebugCorePlugin.getDefault().getPluginPreferences().setValue(ICDebugConstants.PREF_CHARSET, fCharsetEditor.getPreferenceStore().getString(ICDebugConstants.PREF_CHARSET)); + + fWideCharsetEditor.store(); + CDebugCorePlugin.getDefault().getPluginPreferences().setValue(ICDebugConstants.PREF_WIDE_CHARSET, fWideCharsetEditor.getPreferenceStore().getString(ICDebugConstants.PREF_WIDE_CHARSET)); + CCorePlugin.getDefault().getPluginPreferences().setValue( CCorePreferenceConstants.SHOW_SOURCE_FILES_IN_BINARIES, fShowBinarySourceFilesButton.getSelection() ); } @@ -323,7 +378,8 @@ public class CDebugPreferencePage extends PreferencePage implements IWorkbenchPr fVariableFormatCombo.select( getFormatIndex( CDebugCorePlugin.getDefault().getPluginPreferences().getDefaultInt( ICDebugConstants.PREF_DEFAULT_VARIABLE_FORMAT ) ) ); fExpressionFormatCombo.select( getFormatIndex( CDebugCorePlugin.getDefault().getPluginPreferences().getDefaultInt( ICDebugConstants.PREF_DEFAULT_EXPRESSION_FORMAT ) ) ); fRegisterFormatCombo.select( getFormatIndex( CDebugCorePlugin.getDefault().getPluginPreferences().getDefaultInt( ICDebugConstants.PREF_DEFAULT_REGISTER_FORMAT ) ) ); - fCharsetCombo.setText( CDebugCorePlugin.getDefault().getPluginPreferences().getDefaultString( ICDebugConstants.PREF_CHARSET ) ); + fCharsetEditor.loadDefault(); + fWideCharsetEditor.loadDefault(); } private static int getFormatId( int index ) { diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/PreferenceMessages.properties b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/PreferenceMessages.properties index f3fe088b32c..7723772da27 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/PreferenceMessages.properties +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/PreferenceMessages.properties @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2003, 2010 QNX Software Systems and others. +# Copyright (c) 2003, 2012 QNX Software Systems and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at @@ -8,23 +8,28 @@ # Contributors: # QNX Software Systems - initial API and implementation # IBM Corporation +# Mathias Kunter - Support for different charsets (bug 370462) ############################################################################### CDebugPreferencePage.Color_of_disassembly_source_lines_1=Color of source lines: -CDebugPreferencePage.0=Natural +CDebugPreferencePage.0=Default CDebugPreferencePage.1=Hexadecimal CDebugPreferencePage.2=Decimal CDebugPreferencePage.3=General settings for C/C++ Debugging. -CDebugPreferencePage.4=Opened view default settings -CDebugPreferencePage.8=Default variable format: -CDebugPreferencePage.9=Default expression format: -CDebugPreferencePage.10=Default register format: +CDebugPreferencePage.4=Default number format +CDebugPreferencePage.8=Variables: +CDebugPreferencePage.9=Expressions: +CDebugPreferencePage.10=Registers: CDebugPreferencePage.11=Disassembly options CDebugPreferencePage.12=Maximum number of displayed instructions: CDebugPreferencePage.13=Value must be an integer between {0} and {1}. CDebugPreferencePage.14=Binary CDebugPreferencePage.15=Show source files in binaries -CDebugPreferencePage.16=Character encoding: +CDebugPreferencePage.16=Wide character encoding +CDebugPreferencePage.17=Octal +CDebugPreferencePage.18=Character encoding +CDebugPreferencePage.19=The selected character encoding is not supported. +CDebugPreferencePage.20=The selected wide character encoding is not supported. SourcePreferencePage.0=Default S&ource Lookup Path: DebuggerTypesPage.0=Select All DebuggerTypesPage.1=Deselect All diff --git a/doc/org.eclipse.cdt.doc.user/images/view_debug_prefs.png b/doc/org.eclipse.cdt.doc.user/images/view_debug_prefs.png index df849f3de2a260e536a30d2a21e0ae200c6b9d09..1e23bdc7c9ef4879f70b89288bdc8b45d1c1b587 100644 GIT binary patch literal 39301 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 jy3BDGFl$hWt%rka`b-zB3U9U literal 22587 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 V#e$ow7kR-TgI3O50nq z_a0TNi$35leM=tzMN3V@={~n9;KC204u|cX6D2(>3wfJBMyeKl~20}n|=$g#zOPO zxGwyOSD(9YB;11f^A(Dd*IVthf@bcJpz_=sk3-UjK1dZiiLW*Dh_ej_PkNP!q$dSI(xkOegliQ``u|kxBK1Epo20c2J!d# zF8}d~ch787(1^dU`M%H+vlmO3p}W_mHYH!qw-8=-@-3%uI}qqqzD@jP|9p_ggcCrm zAMX*+%d<10$#v<1@xSXs-KPf)D=>~+%xN_*qIi9v?aJg0*;AmGe7#NG`+Ko6G7sk4 z(alA{(>uM&U_*H6QzhZ3hRy6eY>oU^CS*`hl%{9dXd}QIu(pKYRz|2MPkDz%wNr~Y zh(G`A(Sy)xy&Lm=;2!I1EXup*X)a%OCxAv|5a72!xp!otAdp~Ze%w6k#T@f zEb3F4sV4T`6tf>nX=GrhfFiE^5zjWz9erMFF|%&ojMY@2BDXLE7YLq^bML~I+qh7p!O-CW z)tPyogghPIKar#y=Tt_}ue(FTfR^$3820SBtH# zF-frG7KTHZ?#=`H#-yRi7MJygd&M=`ug7;-W9UPO>715dj_{7|CwlJ z0EKMkUSExv-8r`cAzZ4PD$r+pwK}dZhF$#3?_Jfh| zho7^v=YHC&wG#I{Eo?x-Mez%1UABzfPbWt6yRRqQ;hxSVWwxGxFKVZXq_ zC6gs&s#b<)Rh2?)0@EQ(4xx9Q1VP_wDzexfi)V%@JhP+sf19ZVI@=)1t7HRM?t6B2 z7vf4cY71REuXpD?**jC|woZaU+(XoIU@}N^KDNe2H>we~EDLQFYUn`LL>xxj<+M?|X;k$I7QXdtOMzp) zU_pf44W%;MVaUpj5T$_7al};>NK<5}*rmIW~CA`axO5(R>CN1s6pI46>)_RwlwULd{@WE@m z&l?9`cMj$J)CBdb2hcGu4(j1CAuDBUEJe*?;p&jN7Excbu82W|#I!Pi3Y*qaK1?>I z&!5MmEuXxf;_1*$0fdOMNnn*Y=`-5OV%~%cUy*%c{s|30lz`SlZmpY%HECyOw^mum zQ?pWrlx0gcujJ+oqy^&x2Dj@2g!n=1ufTUik~&}2bk}rfR+~tTBK{YPRTq>(fXf)> z8#UjS&GcjH+(He|l1dkn-jOk9d^}tv{-u3r>LzEmlKS3KQYnh|i3((PdeA=1uOyV} z-b9QQVqh1omnbtBUcDZ)J~DQAuw0~fz8?7Uu>9myG+|K?`B@92&i8r(IhBK8o(|Yy z4n5^6S#c|E^sKIDJ#Bv1Z#BT(^$|q-Zp4Pru2fRY)qd?Z z8t@s0!RT^3F|u^ITQtG6jqL=zRTX!@$VfvSY|2l-NmsMxCPdO@5Sw|Ws*H*}AZTdg zilIcPpFjz??Q3yw^jKJ-T8|*acQDj;xtVpg#|ae9>^sf6<*swiU?kw9jYS53>1V>} z3xMq@Mg~(78h$|hlmW%%D{~~{-6u4lM`;TT87}gF5*lQi^Gb&g(Uk?qd-REqFi_er zm)14jZxPf1F9@~S;{|=-AzubZRqvc&u{N^aheA9Pc2TvhynjIHv!szY^CDdYxHa(3 zpN>^4@qYtG#0z06`N1MGxEqC}bgv6ekd6PJU}cxtSnSn)lCg~NX;7W-K5zF0TA+N? zwY!ZoQ1afA<({m!))oEWg{b*~bw$6;dsNpwt&j-l${K?PtA95k^)t?@9LEy#xF9R?!fXVtVuhV5S#TXh268=x*#_+Q^aGNVAHzPsoP*?yE z%dZ{vxCJ<$r{^8E7OgJ20hBW+C;@00V>%3MAy9tjA!D+-iAtx)*Q3Y}(s-Z?{d~_l FU!s diff --git a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_pref.htm b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_pref.htm index c95ca9ac8ab..de013804f14 100644 --- a/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_pref.htm +++ b/doc/org.eclipse.cdt.doc.user/reference/cdt_u_dbg_pref.htm @@ -24,30 +24,26 @@ Option Description - - Show full paths - Displays the full path of resources. - Default variable format - Specifies the number system in which to display variables (Natural, Hexadecimal, Decimal, or Binary). + Select the default variable format from either Default, Hexadecimal, Decimal, Octal or Binary. Default expression format - Specifies the number system in which to display expressions (Natural, Hexadecimal, Decimal, or Binary). + Select the default expression format from either Default, Hexadecimal, Decimal, Octal or Binary. Default register format - Specifies the number system in which to display registers (Natural, Hexadecimal, Decimal, or Binary). - - - Maximum number of displayed instructions - The maximum number of assembler instructions displayed in the Disassembly view. - - - Color of source lines - The color of source lines in the Disassembly view if mixed source/disassembly code is shown. + Select the default register format from either Default, Hexadecimal, Decimal, Octal or Binary. + + Character encoding + Select the character encoding of the debugged program. This applies to char type strings. Note that this requires GDB version 7.0 or later. + + + Wide character encoding + Select the wide character encoding of the debugged program. This applies to wchar_t type strings. Note that this requires GDB version 7.0 or later. + Show source files in binaries Show source files associated with project binaries. diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence.java index 92ee9fb219d..9f5b09f9034 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2011 Ericsson and others. + * Copyright (c) 2008, 2012 Ericsson and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -12,14 +12,17 @@ * Jens Elmenthaler (Verigy) - Added Full GDB pretty-printing support (bug 302121) * Sergey Prigogin (Google) * Marc Khouzam (Ericsson) - No longer call method to check non-stop for GDB < 7.0 (Bug 365471) + * Mathias Kunter - Support for different charsets (bug 370462) *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.launching; import java.util.List; import java.util.Map; +import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.CDebugUtils; import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; +import org.eclipse.cdt.debug.core.ICDebugConstants; import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector; import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor; @@ -79,6 +82,7 @@ public class FinalLaunchSequence extends ReflectionSequence { "stepSetEnvironmentDirectory", //$NON-NLS-1$ "stepSetBreakpointPending", //$NON-NLS-1$ "stepEnablePrettyPrinting", //$NON-NLS-1$ + "stepSetCharset", //$NON-NLS-1$ "stepSourceGDBInitFile", //$NON-NLS-1$ "stepSetAutoLoadSharedLibrarySymbols", //$NON-NLS-1$ "stepSetSharedLibraryPaths", //$NON-NLS-1$ @@ -212,6 +216,17 @@ public class FinalLaunchSequence extends ReflectionSequence { fCommandControl.setPrintPythonErrors(false, requestMonitor); } } + + /** + * Set the charsets. + * @since 4.0 + */ + @Execute + public void stepSetCharset(final RequestMonitor requestMonitor) { + String charset = CDebugCorePlugin.getDefault().getPluginPreferences().getString(ICDebugConstants.PREF_CHARSET); + String wideCharset = CDebugCorePlugin.getDefault().getPluginPreferences().getString(ICDebugConstants.PREF_WIDE_CHARSET); + fCommandControl.setCharsets(charset, wideCharset, requestMonitor); + } /** * Source the gdbinit file specified in the launch. diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java index 79b6a05d9be..f5901aed60c 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java @@ -9,10 +9,11 @@ * Wind River Systems - initial API and implementation * Ericsson - Modified for additional features in DSF Reference implementation * Nokia - create and use backend service. - * Vladimir Prus (CodeSourcery) - Support for -data-read-memory-bytes (bug 322658) + * Vladimir Prus (CodeSourcery) - Support for -data-read-memory-bytes (bug 322658) * Jens Elmenthaler (Verigy) - Added Full GDB pretty-printing support (bug 302121) * Mikhail Khodjaiants (Mentor Graphics) - Refactor common code in GDBControl* classes (bug 372795) * Marc Khouzam (Ericsson) - Pass errorStream to startCommandProcessing() (Bug 350837) + * Mathias Kunter - Support for different charsets (bug 370462) *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.service.command; @@ -461,6 +462,30 @@ public class GDBControl extends AbstractMIControl implements IGDBControl { public void enablePrettyPrintingForMIVariableObjects(RequestMonitor rm) { rm.done(); } + + /** + * Sets the charsets. + * @param charset This parameter is ignored. GDB 7.0 or later required. + * @param wideCharset This parameter is ignored. GDB 7.0 or later required. + * @param rm + */ + @Override + public void setCharsets(String charset, String wideCharset, RequestMonitor rm) { + // Enable printing of sevenbit-strings. This is required to avoid charset issues. + // See bug 307311 for details. + queueCommand( + getCommandFactory().createMIGDBSetPrintSevenbitStrings(fControlDmc, true), + new DataRequestMonitor(getExecutor(), rm)); + + // Set the charset to ISO-8859-1. We have to do this here because GDB earlier than + // 7.0 has no proper Unicode support. Note that we can still handle UTF-8 though, as + // we can determine and decode UTF-8 encoded strings on our own. This makes ISO-8859-1 + // the most suitable option here. See the MIStringHandler class and bug 307311 for + // details. + queueCommand( + getCommandFactory().createMIGDBSetCharset(fControlDmc, "ISO-8859-1"), //$NON-NLS-1$ + new DataRequestMonitor(getExecutor(), rm)); + } /** * @since 4.0 diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java index 717de153560..ca74cd3c3d5 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2011 Wind River Systems and others. + * Copyright (c) 2006, 2012 Wind River Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -13,6 +13,7 @@ * Jens Elmenthaler (Verigy) - Added Full GDB pretty-printing support (bug 302121) * Marc Khouzam (Ericsson) - Call new FinalLaunchSequence_7_0 (Bug 365471) * Mikhail Khodjaiants (Mentor Graphics) - Refactor common code in GDBControl* classes (bug 372795) + * Mathias Kunter - Support for different charsets (bug 370462) *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.service.command; @@ -236,6 +237,33 @@ public class GDBControl_7_0 extends GDBControl { getCommandFactory().createMIEnablePrettyPrinting(getControlDMContext()), new DataRequestMonitor(getExecutor(), rm)); } + + @Override + public void setCharsets(String charset, String wideCharset, RequestMonitor rm) { + // Enable printing of sevenbit-strings. This is required to avoid charset issues. + // See bug 307311 for details. + queueCommand( + getCommandFactory().createMIGDBSetPrintSevenbitStrings(getControlDMContext(), true), + new DataRequestMonitor(getExecutor(), rm)); + + // Set the host charset to UTF-8. This ensures that we can correctly handle different + // charsets used by the inferior program. + queueCommand( + getCommandFactory().createMIGDBSetHostCharset(getControlDMContext(), "UTF-8"), //$NON-NLS-1$ + new DataRequestMonitor(getExecutor(), rm)); + + // Set the target charset. The target charset is the charset used by the char type of + // the inferior program. Note that GDB only accepts upper case charset names. + queueCommand( + getCommandFactory().createMIGDBSetTargetCharset(getControlDMContext(), charset.toUpperCase()), + new DataRequestMonitor(getExecutor(), rm)); + + // Set the target wide charset. The target wide charset is the charset used by the wchar_t + // type of the inferior program. Note that GDB only accepts upper case charset names. + queueCommand( + getCommandFactory().createMIGDBSetTargetWideCharset(getControlDMContext(), wideCharset.toUpperCase()), + new DataRequestMonitor(getExecutor(), rm)); + } /** * @since 4.0 diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/IGDBControl.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/IGDBControl.java index fb7ef002ba5..a40f7c61eba 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/IGDBControl.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/IGDBControl.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2011 Ericsson and others. + * Copyright (c) 2008, 2012 Ericsson and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse License v1.0 * which accompanies this distribution, and is available at @@ -9,6 +9,7 @@ * Ericsson - initial API and implementation * Vladimir Prus (CodeSourcery) - Support for -data-read-memory-bytes (bug 322658) * Jens Elmenthaler (Verigy) - Added Full GDB pretty-printing support (bug 302121) + * Mathias Kunter - Support for different charsets (bug 370462) *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.service.command; @@ -92,4 +93,12 @@ public interface IGDBControl extends IMICommandControl { * @since 4.0 */ void setPrintPythonErrors(boolean enabled, RequestMonitor rm); + + /** + * Sets the charsets. + * @param charset The charset used by the char type of the inferior program. + * @param wideCharset The charset used by the wchar_t type of the inferior program. + * @param rm + */ + void setCharsets(String charset, String wideCharset, RequestMonitor rm); } \ No newline at end of file diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java index 3f15f8eee18..2a53698b8c2 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java @@ -16,6 +16,7 @@ * Abeer Bagul - Support for -exec-arguments (bug 337687) * Marc Khouzam (Ericsson) - New methods for new MIDataDisassemble (Bug 357073) * Marc Khouzam (Ericsson) - New method for new MIGDBSetPythonPrintStack (Bug 367788) + * Mathias Kunter - New methods for handling different charsets (Bug 370462) *******************************************************************************/ package org.eclipse.cdt.dsf.mi.service.command; @@ -98,15 +99,20 @@ import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSet; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetArgs; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetAutoSolib; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetBreakpointPending; +import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetCharset; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetDetachOnFork; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetEnv; +import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetHostCharset; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetNonStop; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetPagination; +import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetPrintSevenbitStrings; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetPythonPrintStack; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetSchedulerLocking; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetSolibAbsolutePrefix; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetSolibSearchPath; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetTargetAsync; +import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetTargetCharset; +import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBSetTargetWideCharset; import org.eclipse.cdt.dsf.mi.service.command.commands.MIGDBShowExitCode; import org.eclipse.cdt.dsf.mi.service.command.commands.MIInferiorTTYSet; import org.eclipse.cdt.dsf.mi.service.command.commands.MIInterpreterExec; @@ -644,6 +650,26 @@ public class CommandFactory { } /** @since 4.0 */ + public ICommand createMIGDBSetPrintSevenbitStrings(ICommandControlDMContext ctx, boolean enable) { + return new MIGDBSetPrintSevenbitStrings(ctx, enable); + } + + public ICommand createMIGDBSetCharset(ICommandControlDMContext ctx, String charset) { + return new MIGDBSetCharset(ctx, charset); + } + + public ICommand createMIGDBSetHostCharset(ICommandControlDMContext ctx, String hostCharset) { + return new MIGDBSetHostCharset(ctx, hostCharset); + } + + public ICommand createMIGDBSetTargetCharset(ICommandControlDMContext ctx, String targetCharset) { + return new MIGDBSetTargetCharset(ctx, targetCharset); + } + + public ICommand createMIGDBSetTargetWideCharset(ICommandControlDMContext ctx, String targetWideCharset) { + return new MIGDBSetTargetWideCharset(ctx, targetWideCharset); + } + public ICommand createMIGDBSetSolibAbsolutePrefix(ICommandControlDMContext ctx, String prefix) { return new MIGDBSetSolibAbsolutePrefix(ctx, prefix); } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetCharset.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetCharset.java new file mode 100644 index 00000000000..1bc7701547d --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetCharset.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2012 Mathias Kunter and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Mathias Kunter - Initial API and implementation +*******************************************************************************/ + +package org.eclipse.cdt.dsf.mi.service.command.commands; + +import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext; + +/** + * + * -gdb-set charset CHARSET + * + * Sets both the current host and target charset to CHARSET. The host charset is the + * charset used by gdb. The target charset is the charset used by the char type of the + * inferior program. + * + * @since 4.0 + */ +public class MIGDBSetCharset extends MIGDBSet { + public MIGDBSetCharset(ICommandControlDMContext ctx, String charset) { + super(ctx, new String[] {"charset", charset}); //$NON-NLS-1$ + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetHostCharset.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetHostCharset.java new file mode 100644 index 00000000000..7bc2535cb57 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetHostCharset.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2012 Mathias Kunter and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Mathias Kunter - Initial API and implementation +*******************************************************************************/ + +package org.eclipse.cdt.dsf.mi.service.command.commands; + +import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext; + +/** + * + * -gdb-set host-charset CHARSET + * + * Sets the current host charset to CHARSET. The host charset is the charset used by gdb. + * + * @since 4.0 + */ +public class MIGDBSetHostCharset extends MIGDBSet { + public MIGDBSetHostCharset(ICommandControlDMContext ctx, String hostCharset) { + super(ctx, new String[] {"host-charset", hostCharset}); //$NON-NLS-1$ + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetPrintSevenbitStrings.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetPrintSevenbitStrings.java new file mode 100644 index 00000000000..68769e77266 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetPrintSevenbitStrings.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2012 Mathias Kunter and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Mathias Kunter - Initial API and implementation +*******************************************************************************/ + +package org.eclipse.cdt.dsf.mi.service.command.commands; + +import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext; + +/** + * + * -gdb-set print sevenbit-strings [on | off] + * + * When on, gdb displays any eight-bit characters (in strings or character values) using + * the octal escape notation \nnn. When off, prints full eight-bit characters. + * + * @since 4.0 + */ +public class MIGDBSetPrintSevenbitStrings extends MIGDBSet { + public MIGDBSetPrintSevenbitStrings(ICommandControlDMContext ctx, boolean enable) { + super(ctx, new String[] {"print", "sevenbit-strings", enable ? "on" : "off"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetTargetCharset.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetTargetCharset.java new file mode 100644 index 00000000000..aabae61b922 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetTargetCharset.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2012 Mathias Kunter and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Mathias Kunter - Initial API and implementation +*******************************************************************************/ + +package org.eclipse.cdt.dsf.mi.service.command.commands; + +import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext; + +/** + * + * -gdb-set target-charset CHARSET + * + * Sets the current target charset to CHARSET. The target charset is the charset used + * by the char type of the inferior program. + * + * @since 4.0 + */ +public class MIGDBSetTargetCharset extends MIGDBSet { + public MIGDBSetTargetCharset(ICommandControlDMContext ctx, String targetCharset) { + super(ctx, new String[] {"target-charset", targetCharset}); //$NON-NLS-1$ + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetTargetWideCharset.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetTargetWideCharset.java new file mode 100644 index 00000000000..264c8e5e0f7 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIGDBSetTargetWideCharset.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2012 Mathias Kunter and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Mathias Kunter - Initial API and implementation +*******************************************************************************/ + +package org.eclipse.cdt.dsf.mi.service.command.commands; + +import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService.ICommandControlDMContext; + +/** + * + * -gdb-set target-wide-charset CHARSET + * + * Sets the current target wide charset to CHARSET. The target wide charset is the charset + * used by the wchar_t type of the inferior program. + * + * Available with gdb 7.0 + * + * @since 4.0 + */ +public class MIGDBSetTargetWideCharset extends MIGDBSet { + public MIGDBSetTargetWideCharset(ICommandControlDMContext ctx, String targetWideCharset) { + super(ctx, new String[] {"target-wide-charset", targetWideCharset}); //$NON-NLS-1$ + } +} diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/numberformat/FormattedValueVMUtil.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/numberformat/FormattedValueVMUtil.java index 18f79bd6881..3b4e57dffab 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/numberformat/FormattedValueVMUtil.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/numberformat/FormattedValueVMUtil.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2010 Wind River Systems and others. + * Copyright (c) 2009, 2012 Wind River Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,6 +7,7 @@ * * Contributors: * Wind River Systems - initial API and implementation + * Mathias Kunter - Use CDI number format defaults (bug 370462) *******************************************************************************/ package org.eclipse.cdt.dsf.debug.ui.viewmodel.numberformat; @@ -16,6 +17,9 @@ import java.util.Iterator; import java.util.Map; import java.util.TreeMap; +import org.eclipse.cdt.debug.core.CDebugCorePlugin; +import org.eclipse.cdt.debug.core.ICDebugConstants; +import org.eclipse.cdt.debug.core.cdi.ICDIFormat; import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor; import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor; import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants; @@ -32,6 +36,7 @@ import org.eclipse.cdt.dsf.ui.concurrent.ViewerDataRequestMonitor; import org.eclipse.cdt.dsf.ui.viewmodel.datamodel.IDMVMContext; import org.eclipse.cdt.dsf.ui.viewmodel.properties.IPropertiesUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; +import org.eclipse.debug.ui.IDebugUIConstants; import com.ibm.icu.text.MessageFormat; @@ -204,7 +209,33 @@ public class FormattedValueVMUtil { if ( prop != null ) { return (String) prop; } - return IFormattedValues.NATURAL_FORMAT; + + // Get the CDI number format from the preferences. + int formatID; + if (context.getId() == IDebugUIConstants.ID_VARIABLE_VIEW) { + formatID = CDebugCorePlugin.getDefault().getPluginPreferences().getInt( ICDebugConstants.PREF_DEFAULT_VARIABLE_FORMAT ); + } else if (context.getId() == IDebugUIConstants.ID_EXPRESSION_VIEW) { + formatID = CDebugCorePlugin.getDefault().getPluginPreferences().getInt( ICDebugConstants.PREF_DEFAULT_EXPRESSION_FORMAT ); + } else if (context.getId() == IDebugUIConstants.ID_REGISTER_VIEW) { + formatID = CDebugCorePlugin.getDefault().getPluginPreferences().getInt( ICDebugConstants.PREF_DEFAULT_REGISTER_FORMAT ); + } else { + // Use the default natural format. + formatID = ICDIFormat.NATURAL; + } + + // Map the CDI number format to the DSF number format. + if (formatID == ICDIFormat.HEXADECIMAL) { + return IFormattedValues.HEX_FORMAT; + } else if (formatID == ICDIFormat.DECIMAL) { + return IFormattedValues.DECIMAL_FORMAT; + } else if (formatID == ICDIFormat.OCTAL) { + return IFormattedValues.OCTAL_FORMAT; + } else if (formatID == ICDIFormat.BINARY) { + return IFormattedValues.BINARY_FORMAT; + } else { + // Everything else is mapped to the default natural format. + return IFormattedValues.NATURAL_FORMAT; + } } diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java index fac33c4a85c..0c9b1c446fe 100644 --- a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java +++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 Wind River Systems and others. + * Copyright (c) 2006, 2012 Wind River Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -8,6 +8,7 @@ * Contributors: * Wind River Systems - initial API and implementation * Ericsson - Update for GDB/MI + * Mathias Kunter - Support for octal number format (bug 370462) *******************************************************************************/ package org.eclipse.cdt.dsf.debug.service; @@ -107,6 +108,7 @@ public interface IExpressions extends IFormattedValues { @Override public boolean isMax() { return false; } @Override public String toString(int radix) { return "INVALID"; } @Override public String toHexAddressString() { return toString(); } + @Override public String toOctalAddressString() { return toString(); } @Override public String toBinaryAddressString() { return toString(); } @Override public int getCharsNum() { return 0; } @Override public int getSize() { return 0; }