2012-07-24 23 views
57

Estoy depurando remotamente una aplicación grande entre DElphi XE2 (actualización n. ° 4) y un destino de Windows XP. PAServer se está ejecutando en el destino y la aplicación funciona bien y se detiene en los puntos de interrupción (NO se cree cuán difícil fue ese logro, sugerencia, elimine su DPROJ y comience nuevamente si ha pasado por un IDE anterior a XE).Depuración remota con XE2 - visualización de cadenas

Observé que la visualización de variables locales y relojes muestra mis cadenas en un formato extraño en comparación con la visualización habitual del formato 'algunas cadenas' que se ve al depurar localmente. Veo:

enter image description here

¿Puede alguien decirme por qué las cadenas se muestran de esta manera? También obtengo bastante {NULL} y basura entre {} en variables de salida que aún no están asignadas. Gracias.

. Veo que este formato indica cadenas amplias. Intenté una aplicación simple en Windows 7 y obtuve el siguiente resultado. Mi aplicación a un punto de ruptura:

enter image description here

La muestra variables de cadena locales:

enter image description here

Nota del truncada de 'Hello'. Parece que XE2 tiene un problema con cadenas de Unicode remotas a veces. Mi PaServer es la versión 1.0.2. ¿Alguien puede verificar que esta sea la última? 'Tomado de Actualización # 4 ...

+7

supongo que se está ejecutando en algo que querrá iniciar sesión en Quality Central, y dudo que cualquier el mero usuario final puede arreglar esto por ti. Upvoted por ser lo suficientemente valiente como para probar esto. –

+0

¿Cómo se ve tu perfil remoto? ¿Tuvo algún problema al instalar el PA en el servidor remoto? ¿El servidor remoto está completamente parcheado y actualizado? ¿Qué sucede cuando expandes S2 en la vista de variables locales? – Daisetsu

+0

@Daisetsu: El perfil remoto es muy básico para otro sistema IP. No hay otros problemas de instalador. Intentaré expandir la variable a un volcado de memoria y ver qué pasa. –

Respuesta

1

No estoy seguro de si pertenece, pero estoy al tanto de System.AnsiStrings que contiene comandos especializados como "Formato", etc ... El uso de algo como lo siguiente puede resolver el problema:

var 
    S1: AnsiString; 
    S2: UnicodeString; 
begin 
    S1 := 'Foo'; 
    S2 := 'Bar'; 
    ShowMessage(Format('%s!', S2)); 
end; 

también hay algunos errores abiertos, sólo para descartar ninguna de ellas, lo específico de las versiones del sistema operativo y herramientas que están utilizando es decir, Win7 x64 último etc?

+0

Interesante, eche un vistazo. Gracias. –

3

(estoy copiando el código de @Dave)

var 
    S1: AnsiString; 
    S2: UnicodeString; 
begin 
    S1 := 'Foo'; 
    S2 := 'Bar'; 
    ShowMessage(Format('%s!', S2)); 
end; 

estoy adivinando var S1 aquí está optimizado, ya que no se utiliza en cualquier lugar, por lo que el valor no se relvant más.

Intenta ejecutar esto en una máquina local, ¿puedes ver S1?

4

No estoy del todo seguro de por qué tiene el {} alrededor de los valores de cadena, - mi corazonada es que es para demostrar que los valores provienen de una ejecución remota - pero sé de hecho que S está siendo truncado debido a la optimización ...

{$O-} // Disable Optimization 
var 
    S: AnsiString; 
    S2: UnicodeString; 
begin 
    S := 'Hello'; 
    S2 := 'Hello2'; 
    ShowMessage(S2); 
end; 
{$O+} // Enable Optimization 

ahora vamos a tener en cuenta que el valor 'Hola' (de la variable S) permanece intacto durante la depuración. Del mismo modo, si usted hace uso del valor asignado a S: optimización

var 
    S: AnsiString; 
    S2: UnicodeString; 
begin 
    S := 'Hello'; 
    S2 := 'Hello2'; 
    ShowMessage(S + S2); 
end; 

de Delphi ahora identifica que S está siendo utilizado dentro de su ámbito válido, y así se conserva el valor.

Por lo tanto, lo que usted llama un "error" es, de hecho, una "función de compilación" exactamente como lo pretendía Borland/Inprise/Codegear/Embarcadero.

0

Project -> Opciones -> Delphi compilador -> Vinculación -> Incluir símbolos de depuración remota = true

Cuestiones relacionadas