2009-10-07 13 views
44

Tôi có một biếnLàm thế nào để in một chuỗi null chấm dứt với dòng mới mà không hiển thị dấu gạch chéo ngược trong gdb?

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

và tôi muốn in nó với dòng mới in như dòng mới không xuyệc ngược n. Có thể không?

+0

nếu vô ích khác hoạt động, bạn có thể thay thế '\ n' với '\ x0a' - đây sẽ là linefeed char trực tiếp. – slashmais

+0

@slashmais: Điều này sẽ vẫn hiển thị dưới dạng '\ n' trong đầu ra gdb – ezpz

+0

Thực ra, tôi đã đến đây để có cách IN. \ N>.> .. Tôi có thể thực hiện việc này: print (char *) [ nsstring cString] – Mazyod

Trả lời

75

Cập nhật: Tại sao không chỉ sử dụng lệnh gdb printf?

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

Cũ câu trả lời: Từ bên trong trình gỡ lỗi bạn có thể thực hiện các lệnh. Chỉ cần gọi printf

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

Tôi không thể sử dụng stdout hoặc stderr vì các kênh này được gắn vào chương trình khác. –

+0

Splendid. Cảm ơn. –

+7

Lưu ý rằng điều quan trọng là phải chấm dứt lệnh printf bằng/n nếu char * của bạn chưa kết thúc bằng lệnh. –

17

Sử dụng chuỗi specifier:

print /s x 
+0

Điều này chắc chắn tốt hơn gọi các chức năng của chương trình được gỡ lỗi như 'printf', nhưng chỉ có thể hoạt động trên các phiên bản GDB tương đối mới: sản lượng của tôi“ Định dạng chữ ”s là vô nghĩa trong lệnh“ in ”. –

+0

Điều này không hoạt động khi 'x' là một biến khác với địa chỉ, trong trường hợp đó, cần sử dụng lệnh' x', ví dụ 'x/sx', hoặc cần chuyển đổi kiểu, ví dụ' p (char *) & x' . –

+1

Điều này sẽ không hoạt động khi chuỗi lớn hơn một số độ dài. Nó bị cắt ngắn khi in. phương thức printf in toàn bộ chuỗi. – sadashiv30

Các vấn đề liên quan