Files
swift-mirror/tools/swift-inspect/README.md
2025-01-22 14:50:40 -08:00

114 lines
5.0 KiB
Markdown

# swift-inspect
swift-inspect is a debugging tool which allows you to inspect a live Swift process to gain insight into the runtime interactions of the application.
swift-inspect uses the reflection APIs to introspect the live process. It relies on the swift remote mirror library to remotely reconstruct data types.
### Building
swift-inspect can be built using [swift-package-manager](https://github.com/swiftlang/swift-package-manager).
#### Windows
In order to build on Windows, some additional parameters must be passed to the build tool to locate the necessary libraries.
~~~
swift build -Xcc -I%SDKROOT%\usr\include\swift\SwiftRemoteMirror -Xlinker %SDKROOT%\usr\lib\swift\windows\x86_64\swiftRemoteMirror.lib
~~~
#### Linux
In order to build on Linux, some additional parameters must be passed to the build tool to locate the necessary includes and libraries.
~~~
swift build -Xswiftc -I$(git rev-parse --show-toplevel)/include/swift/SwiftRemoteMirror -Xlinker -lswiftRemoteMirror
~~~
#### Android
To cross-compile swift-inspect for Android on Windows, some additional parameters must be passed to the build tool to locate the toolchain and necessary libraries.
~~~cmd
set ANDROID_ARCH=aarch64
set ANDROID_API_LEVEL=29
set ANDROID_CLANG_VERSION=17.0.2
set ANDROID_NDK_ROOT=C:\Android\android-sdk\ndk\26.3.11579264
set SDKROOT_ANDROID=%LocalAppData%\Programs\Swift\Platforms\0.0.0\Android.platform\Developer\SDKs\Android.sdk
swift build --triple %ANDROID_ARCH%-unknown-linux-android%ANDROID_API_LEVEL% ^
--sdk %ANDROID_NDK_ROOT%\toolchains\llvm\prebuilt\windows-x86_64\sysroot ^
-Xswiftc -sdk -Xswiftc %SDKROOT_ANDROID% ^
-Xswiftc -sysroot -Xswiftc %ANDROID_NDK_ROOT%\toolchains\llvm\prebuilt\windows-x86_64\sysroot ^
-Xswiftc -I -Xswiftc %SDKROOT_ANDROID%\usr\include ^
-Xswiftc -Xclang-linker -Xswiftc -resource-dir -Xswiftc -Xclang-linker -Xswiftc %ANDROID_NDK_ROOT%\toolchains\llvm\prebuilt\windows-x86_64\lib\clang\%ANDROID_CLANG_VERSION% ^
-Xlinker -L%ANDROID_NDK_ROOT%\toolchains\llvm\prebuilt\windows-x86_64\lib\clang\%ANDROID_CLANG_VERSION%\lib\linux\%ANDROID_ARCH% ^
-Xcc -I%SDKROOT_ANDROID%\usr\include\swift\SwiftRemoteMirror ^
-Xlinker %SDKROOT_ANDROID%\usr\lib\swift\android\%ANDROID_ARCH%\libswiftRemoteMirror.so
~~~
#### CMake
In order to build on Windows with CMake, some additional parameters must be passed to the build tool to locate the necessary Swift modules.
~~~
cmake -B out -G Ninja -S . -D CMAKE_Swift_FLAGS="-Xcc -I%SDKROOT%\usr\include\swift\SwiftRemoteMirror"
~~~
In order to build on Linux with CMake, some additional parameters must be passed to the build tool to locate the necessary Swift modules.
~~~
cmake -B out -G Ninja -S . -D CMAKE_Swift_FLAGS="-Xcc -I$(git rev-parse --show-toplevel)/include/swift/SwiftRemoteMirror"
~~~
In order to build for Android with CMake on Windows, some additiona parameters must be passed to the build tool to locate the necessary Swift modules.
~~~cmd
set ANDROID_ARCH=aarch64
set ANDROID_API_LEVEL=29
set ANDROID_CLANG_VERSION=17.0.2
set ANDROID_NDK_ROOT=C:\Android\android-sdk\ndk\26.3.11579264
set ANDROID_ARCH_ABI=arm64-v8a
set SDKROOT_ANDROID=%LocalAppData%\Programs\Swift\Platforms\0.0.0\Android.platform\Developer\SDKs\Android.sdk
cmake -B build -S . -G Ninja ^
-D CMAKE_BUILD_WITH_INSTALL_RPATH=YES ^
-D CMAKE_SYSTEM_NAME=Android ^
-D CMAKE_ANDROID_ARCH_ABI=%ANDROID_ARCH_ABI% ^
-D CMAKE_SYSTEM_VERSION=%ANDROID_API_LEVEL% ^
-D CMAKE_Swift_COMPILER_TARGET=%ANDROID_ARCH%-unknown-linux-android%ANDROID_API_LEVEL% ^
-D CMAKE_Swift_FLAGS="-sdk %SDKROOT_ANDROID% -L%ANDROID_NDK_ROOT%\toolchains\llvm\prebuilt\windows-x86_64\lib\clang\%ANDROID_CLANG_VERSION%\lib\linux\%ANDROID_ARCH% -Xclang-linker -resource-dir -Xclang-linker %ANDROID_NDK_ROOT%\toolchains\llvm\prebuilt\windows-x86_64\lib\clang\%ANDROID_CLANG_VERSION% -Xcc -I%SDKROOT_ANDROID%\usr\include -I%SDKROOT_ANDROID%\usr\include\swift\SwiftRemoteMirror" ^
cmake --build build
~~~
Building with CMake can use a local copy of [swift-argument-parser](https://github.com/apple/swift-argument-parser) built with CMake.
The `ArgumentParser_DIR=` definition must refer to the `cmake/modules` sub-directory of the swift-argument-parser build output directory.
~~~cmd
cmake -b out -G Ninja -S . -D ArgumentParser_DIR=S:\swift-argument-parser\build\cmake\modules
~~~
### Using
The following inspection operations are available currently.
##### All Platforms
dump-cache-nodes <name-or-pid>
: Print the metadata cache nodes.
dump-conformance-cache <name-or-pid>
: Print the content of the protocol conformance cache.
dump-generic-metadata <name-or-pid> [--backtrace] [--backtrace-long]
: Print generic metadata allocations.
dump-raw-metadata <name-or-pid> [--backtrace] [--backtrace-long]
: Print metadata allocations.
#### Darwin and Windows Only
dump-arrays <name-or-pid>
: Print information about array objects in the target
##### Darwin Only
dump-concurrency <name-or-pid>
: Print information about tasks, actors, and threads under Concurrency.