Systrace dla Windows


85

Szukam odpowiednika Systrace w systemie Windows lub przynajmniej strace . Jestem świadomy istnienia StraceNT , ale zastanawiam się, czy istnieje więcej alternatyw. W szczególności szukam konkretnego sposobu programowego wymuszania zasad wywołań systemowych, chociaż może to nastąpić po fakcie, a nie aktywnie je zatrzymać.

Czy obecnie jest na to dobry sposób?


Odpowiedzi:


26

3
Jednak bardziej przypomina ltrace niż strace, ponieważ przechwytuje wywołania bibliotek, a nie wywołania systemowe.
Michael,

@BrunoMartinez: nie musisz określać adresu pamięci, aby używać strace.
user2284570

39

Kilka opcji:

Monitor procesu

Zobacz również ten artykuł o narzędziach wbudowanych w Windows 7:

Podstawowe narzędzia systemu operacyjnego


3
Właśnie użyłem ProcessMonitor, aby dowiedzieć się, dlaczego proces się zawiesił - okazuje się, że próbował uzyskać dostęp do pliku, którego nie mógł usunąć ... nigdy nie rozwiązałbym tego bez ProcMon
Jamie Cook

2
Używam strace dość często w systemie Linux i natknąłem się na to pytanie, szukając podobnego narzędzia w systemie Windows do rozwiązania problemu, który miałem z NANT. Wypróbowałem Process Monitor, ustawiłem filtr tak, aby obejmował tylko Nant.exe i wykluczając wszystko inne, ustawiłem również filtr dostępu do rejestru tylko w przypadku, gdy miałem problem, i szybko zorientowałem się, jaki mam problem. Bardzo polecam Process Monitor.
hshib

@ djhaskin987: W moim przypadku mam program, który ładuje niektóre pliki; buforuj je do ʀᴀᴍ (aby nie było żadnego uchwytu) i zawieszaj się. Ponieważ nie ma uchwytu, monitor procesu nie jest pomocny.
user2284570

@hshib: problem z monitorem procesów polega na tym, że proces nie potrzebuje uchwytu, aby uzyskać dostęp do pliku. Więc w przypadku takim jak mój (próba sprawdzenia, który plik konfiguracyjny powoduje awarię) , to nie pomaga.
user2284570

15

Narzędzie Dr. Memory ( http://drmemory.org ) jest dostarczane z narzędziem do śledzenia wywołań systemowych o nazwie drstrace, które zawiera listę wszystkich wywołań systemowych wykonywanych przez aplikację docelową wraz z ich argumentami: http://drmemory.org/strace_for_windows.html

Aby programowo wymuszać zasady wywołań systemowych, można użyć tych samych mechanizmów bazowych, co drstrace: platformy narzędziowej DynamoRIO ( http://dynamorio.org ) i biblioteki monitorowania wywołań systemowych DrSyscall ( http://drmemory.org/docs/page_drsyscall. html ). Korzystają one z technologii dynamicznego tłumaczenia binarnego, co wiąże się z pewnym narzutem (20% -30% w stanie ustalonym, ale znacznie wyższym podczas uruchamiania nowego kodu, takiego jak uruchamianie dużej aplikacji komputerowej), co może, ale nie musi, być odpowiednie do Twoich celów.


11

W tym celu bardzo przydatne jest API Monitor .


Jest to doskonały program, pokazuje szczegółowe parametry funkcji / zwracane wartości, pozwala określić punkt przerwania, gdy spełnione są określone warunki, wiele różnych metod podpinania, dzięki czemu można go używać w wielu procesach, które nie lubią być kontrolowane.
yuikonnu


3

strace jest dostępny w Cygwin w pakiecie cygwin . Możesz go pobrać z lustra Cygwin , na przykład:

http://mirrors.sonic.net/cygwin/x86_64/release/cygwin/cygwin-2.0.2-1.tar.xz
#      |                      |                              |     |
#      +-----------+----------+                              +--+--+
#                  |                                            |
#               mirror                                       version

strace jest jednym z niewielu programów Cygwin, który nie opiera się na bibliotece DLL Cygwin, więc powinieneś być w stanie po prostu skopiować strace.exetam, gdzie chcesz i używać go.


6
To dobrze, ale wydaje się, że działa tylko na innych programach Cygwin. Nie możesz strace notepad. Uruchamia notatnik, ale nie przechwytuje żadnych wywołań systemowych.
Michael Fox

2
@MichaelFox: Tak, przechwytuje tylko wywołania do cygwin1.dll.
user2284570


1

strace obsługiwane przez Git , jak wspomniał Michael Fox. Może nie jest to przydatne w przypadku oprogramowania złożonego / Windows.


0

Możesz użyć monitora procesu napisanego przez Marka Russinovicha. Jest to fantastyczna mała aplikacja, która pozwoli ci podłączyć się do dowolnego uruchomionego procesu w systemie i zobaczyć wszystkie wywołania systemowe, które obecnie wykonuje.

https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx


2
djhaskin987 wspomniał już o Process Monitor w swojej wcześniejszej odpowiedzi. Powinieneś edytować jego odpowiedź i edytować w niej swój opis.
unforgettableidSupportsMonica
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.