2009-10-07 9 views
44

mam zmiennąJak wydrukować łańcuch zakończony znakiem Null za pomocą znaków nowej linii bez pokazywania odwrotnych ukośników w gdb?

char* x = "asd\nqwe\n ... " 

i chcę wydrukować go ze znakami nowej linii drukowanych jak nowe linie nie backslashem n. Czy to możliwe?

+0

jeśli nic innego działa, można wymienić '\ n' z '\ x0a' - to char nowego wiersza bezpośrednio. – slashmais

+0

@slashmais: To będzie nadal wyświetlane jako '\ n' w wyjściu gdb. – ezpz

+0

Właściwie, przyszedłem tutaj, aby uzyskać metodę DRUKUJ \ n>.> .. Udało mi się to zrobić: print (char *) [ nsstring cString] – Mazyod

Odpowiedz

75

Aktualizacja: Dlaczego po prostu nie użyć polecenia gdb printf?

(gdb) printf "%s", x 
asd 
qwe 
... 
(gdb) 

Old odpowiedź: Od wewnątrz debuggera można wykonywać polecenia. Wystarczy zadzwonić printf

(gdb) call printf("%s", x) 
asd 
qwe 
... 
(gdb) 
+0

Nie mogę używać stdout lub stderr, ponieważ te kanały są dołączone do innego programu. –

+0

Splendid. Dzięki. –

+7

Należy zauważyć, że ważne jest, aby zakończyć polecenie printf za pomocą a/n, jeśli znak * jeszcze się nie kończy. –

17

Użyj specyfikator wyrażenie:

print /s x 
+0

Jest to zdecydowanie lepsze niż wywoływanie funkcji programu debugowanego, takich jak 'printf', ale może działać tylko na stosunkowo nowych wersjach GDB: wydajność kopalni" Format litera "" na przykład nie ma znaczenia w komendzie "drukuj". –

+0

To nie działa, gdy 'x' jest zmienną inną niż adres, w takim przypadku trzeba użyć polecenia' x', np. 'X/sx', lub potrzebujesz konwersji typu, np.' P (char *) & x' . –

+1

Nie będzie działać, jeśli ciąg jest większy niż pewna długość. Jest przycinany podczas drukowania. Metoda printf drukuje pełny ciąg znaków. – sadashiv30

Powiązane problemy