2012-07-24 15 views
57

Jestem zdalnym debugowaniem dużej aplikacji między DElphi XE2 (aktualizacja nr 4) a celem Windows XP. PAServer działa na celu, a aplikacja działa dobrze i zatrzymuje się na pułapkach (nie wierzysz, jak ciężko było to osiągnięcie - podpowiedź - usuń swój DPROJ i zacznij od nowa, jeśli był przez jakiekolwiek IDE przed XE).Zdalne debugowanie za pomocą XE2 - wyświetlanie ciągów znaków

Zauważam, że wyświetlanie zmiennych lokalnych i zegarków pokazuje moje ciągi w dziwnym formacie w porównaniu do zwykłego wyświetlania formatu "jakiegoś ciągu", który widzi się podczas lokalnego debugowania. Widzę:

enter image description here

Czy ktoś może mi powiedzieć, dlaczego struny są wyświetlane w ten sposób? Dostaję też sporo {NULL} i śmieci między {} na zmiennych wyjściowych, które nie są jeszcze przypisane. Dzięki.

. Widzę, że ten format wskazuje szerokie ciągi znaków. Próbowałem prostej aplikacji na Windows 7 i otrzymałem następujący wynik. Moja aplikacja przy zerwaniu:

enter image description here

Wyświetlane zmienne lokalne wyrażenie:

enter image description here

Uwaga obcięty 'cześć'. Wydawałoby się, że XE2 ma problem ze zdalnymi ciągami Unicode. Mój PaServer to wersja 1.0.2. Czy ktoś może sprawdzić, czy to jest najnowsze? "Zrobione z Aktualizacji # 4 ...

+7

Zgaduję używasz do czegoś, będziemy chcieli, aby zalogować się na jakości Środkowej i wątpię dowolny zwykły użytkownik końcowy może to dla ciebie naprawić. Wzniesiono go za bycie wystarczająco odważnym, by spróbować tego. –

+0

Jak wygląda twój zdalny profil? Czy masz jakieś problemy z instalacją PA na zdalnym serwerze? Czy zdalny serwer jest w pełni załatany i zaktualizowany? Co dzieje się po rozwinięciu S2 w widoku zmiennych lokalnych? – Daisetsu

+0

@Daisetsu: Profil zdalny jest bardzo prosty dla innego systemu IP. Żadnych innych problemów instalatora. Spróbuję rozszerzyć zmienną na zrzut pamięci i zobaczyć, co się stanie. –

Odpowiedz

1

Nie jestem pewien, czy to dotyczy, ale jestem świadomy System.AnsiStrings zawierających wyspecjalizowane polecenia, takie jak" Format ", etc ... Korzystanie z czegoś podobnego może rozwiązać Twój problem:

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

Ponadto istnieje kilka otwarte robaki, żeby wykluczyć żadnej z tych, jakie konkretne wersje systemu operacyjnego i narzędzi używasz Win7 x64 Ostatecznego tj itp?

+0

Interesujący, chory, spójrz. Dzięki. –

3

(jestem kopiując kod z @Dave)

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

Domyślam lokalnej var S1 tutaj jest zoptymalizowany, ponieważ nie jest stosowany wszędzie, więc wartość nie jest relvant więcej.

Spróbuj uruchomić to na komputerze lokalnym, czy widzisz S1?

4

Nie jestem do końca pewien, dlaczego masz {} wokół wartości ciągu, - moim przeczuciem jest to, że demonstruje, że wartości pochodzą z odległego wykonania - ale wiem, że jest fakt, że S jest obcięty ze względu na optymalizację ...

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

będziesz teraz zauważyć, że wartość „Hello” (zmiennej S) pozostaje nienaruszona podczas debugowania. Podobnie, jeśli wykorzystanie wartości przypisanej do S: optymalizacja

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

Delphi teraz identyfikuje że S jest używany w jego prawidłowy zakres, a więc wartość jest zachowana.

To, co nazywacie "błędem", jest w rzeczywistości "funkcją kompilującą" dokładnie tak, jak zamierzali Borland/Inprise/Codegear/Embarcadero.

0

Project -> Opcje -> Delphi Compiler -> Połączenie -> Dołącz zdalnych symboli debugowania = true

Powiązane problemy