2016-08-31 2 views
1

Ich habe ein Programm, in dem ich ioctl(0, TIOCGWINSZ, (struct winsize *)) verwende, um die Größe des Terminalfensters zu finden, in dem das Programm ausgeführt wird. Wenn ich es im Terminal ausführe, funktioniert es gut, aber wenn ich LLDB verwende, gibt ioctl ein Fenstergröße von 0 x 0LLDB ioctl Probleme

Beispiel:

#include <unistd.h> 
#include <sys/ioctl.h> 
#include <stdio.h> 

int main(){ 
    struct winsize tty_window_size; 

    ioctl(STDOUT_FILENO, TIOCGWINSZ, &tty_window_size); 

    printf("Rows: %i, Cols: %i\n", tty_window_size.ws_row, tty_window_size.ws_col); 

    return 0; 
} 

Terminal-Transkript:

$ clang test.c 
$ ./a.out 
Rows: 24, Cols: 80 
$ lldb ./a.out 
(lldb) target create "./a.out" 
Current executable set to './a.out' (x86_64). 
(lldb) r 
Process 32763 launched: './a.out' (x86_64) 
Rows: 0, Cols: 0 
Process 32763 exited with status = 0 (0x00000000) 

Hat jemand, warum dies geschieht, oder eine Möglichkeit, dies zu beheben?

Vielen Dank im Voraus.

Antwort

2

lldb verwendet Pty's, um die Programmeingabe & Ausgabe zu behandeln, aber es scheint wie ein Fehler, dass sie nicht festgelegt werden, Terminal-Größe Ildb zu verfolgen. Bitte füge das mit dem lldb.llvm.org Bug Tracker ein.

Wenn Sie unter OS X sind, können Sie Ihre Anwendung in einem separaten Terminal-Fenster laufen (was wahrscheinlich ist, was Sie wollen, wenn Sie etwas Besonderes mit dem Terminal sowieso tun sind), indem Sie starten möchten:

(lldb) Prozess starten -tt

Ich weiß nicht, ob dies unter Linux noch nicht implementiert wurde oder nicht.

+0

Danke, der 'Prozess-Start -tty' hat super funktioniert! – Xenon