Podążam za sugestią w odpowiedzi here przekierowania wyjścia NSLog na urządzeniu z systemem iOS do pliku, który działa świetnie. Problem polega na tym, że nie pojawia się już w konsoli na urządzeniu. To, co bardzo bym chciał, to sposób na przeniesienie strumienia stderr zarówno do konsoli, jak i do pliku. Czy ktoś ma pomysł, jak to zrobić?Napisz stderr na iPhone do pliku i konsoli
Odpowiedz
Znalazłem akceptowalną odpowiedź na inny wątek (NSLog() to both console and file).
rozwiązanie pod warunkiem, że jest tylko przekierować do pliku, jeśli nie zostanie wykryty debugger, tak:
if (!isatty(STDERR_FILENO))
{
// Redirection code
}
Dzięki Sailesh za tę odpowiedź.
gdzie powinniśmy napisać to, jeśli oświadczenie? W delegacie aplikacji czy musimy napisać to w każdym kontrolerze widoku? – Max
Powinieneś napisać to, jeśli chcesz zawrzeć kod, który przekierowuje stderr do pliku. –
Po uzyskaniu freopen()
deskryptora pliku, możesz go odczytać i wykonać, jak chcesz z danymi. Niektóre pomysły z this przydadzą ci się.
Możesz napisać go z powrotem na standardowe wyjście lub spróbować napisać bezpośrednio pod numerem /dev/console
. Nigdy nie próbowałem otworzyć /dev/console
na iPhonie, ale domyślam się, że jest to możliwe, mimo że znajduje się poza piaskownicą. Nie wiem, jak potraktuje to proces oceny aplikacji.
Możesz też przekierować do gniazda TCP i wyświetlić na zdalnym kliencie telnet. Nie potrzebujesz XCode w ten sposób!
zasadniczo:
utworzenia standardowej funkcji C, który wywołuje obj-C metodą statyczną:
void tcpLogg_log(NSString* fmt, ...) { va_list args; va_start(args, fmt); [TCPLogger tcpLog:fmt :args]; va_end(args); }
metoda statyczna obj-C:
(void)tcpLog:(NSString*)fmt :(va_list)args { NSLogv(fmt, args);
}if(sharedSingleton != nil && sharedSingleton.socket != nil) { NSString *time = [sharedSingleton.dateFormat stringFromDate:[NSDate date]]; NSString *msg = [[NSString alloc] initWithFormat:fmt arguments:args]; mach_port_t tid = pthread_mach_thread_np(pthread_self()); NSString *str = [NSString stringWithFormat:@"%@[%X]: %@\r\n", time, tid, msg]; NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; [sharedSingleton.socket writeData:data withTimeout:NETWORK_CLIENT_TIMEOUT_PERIOD tag:0]; }
Następnie w pliku .pch dodaj następujące linie zastąpić NSLog()
define NSLog(...) tcpLogg_log(__VA_ARGS__); void tcpLogg_log(NSString* fmt, ...);
Oczywiście więcej szczegółów są wymagane do obsługi gniazda TCP. Działający kod źródłowy jest dostępny tutaj: https://github.com/driedler/iOS-TCP-Logger/wiki/About
- 1. NSLog() do konsoli i pliku
- 2. PhantomJS/Javascript: napisz do pliku zamiast do konsoli
- 3. Napisz xmlwriter do pliku
- 4. Napisz ciąg do pliku
- 5. Napisz do pliku CSV i wyeksportuj go?
- 6. C++ napisz na początku pliku
- 7. Python Napisz bajty do pliku
- 8. Napisz StringIO do pliku Tempfile
- 9. Jak dodać stdout i stderr do pliku rejestratora w kolbie
- 10. Python, napisz w pliku zip do pliku
- 11. Przekierowanie stdout i stderr z pliku wsadowego
- 12. Napisz na środku istniejącego pliku binarnego C++
- 13. Piksele bitmapowe Androida - napisz bezpośrednio do pliku?
- 14. Napisz do pliku CSV z hash perl
- 15. Napisz wiele numpy tablic do pliku
- 16. przekierowanie stdout i stderr do tego samego pliku i przywrócić go
- 17. funkcja do pisania na stderr z python2 i python3
- 18. Jak przekierować STDOUT i STDERR do zmiennej
- 19. Przekierowanie stdout i stderr do funkcji
- 20. przekierować stderr do instancji Logger
- 21. Python 2.7 - Napisz i przeczytaj listę z pliku
- 22. szyny - Przekierowanie wyjścia konsoli do pliku
- 23. Napisz ciągi informacji Git do pliku exe C#
- 24. Napisz i przeczytaj obiekt php w pliku tekstowym?
- 25. fork() i STDOUT/STDERR na konsolę z procesów potomnych
- 26. Napisz duży strumień danych do pliku w Kotlin
- 27. Napisz StringBuilder do strumienia
- 28. Orurowanie stdout i stderr w bash?
- 29. Jak przekierować wyjście konsoli do pliku tekstowego
- 30. Dziwna wiadomość konsoli iPhone SDK launchd_core_logic.c
możliwy duplikat [NSLog() do konsoli i pliku] (http://stackoverflow.com/questions/9619708/nslog-to-both-console-and-file) – AechoLiu