mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Most of the new inspection logic is in Remote Mirror. New code in swift-inspect calls the new Remote Mirror functions and formats the resulting information for display. Specific Remote Mirror changes: * Add a call to check if a given metadata is an actor. * Add calls to get information about actors and tasks. * Add a `readObj` call to MemoryReader that combines the read and the cast, greatly simplifying code chasing pointers in the remote process. * Add a generalized facility to the C shims that can allocate a temporary object that remains valid until at least the next call, which is used to return various temporary arrays from the new calls. Remove the existing `lastString` and `lastChunks` member variables in favor of this new facility. Swift-inspect changes: * Add a new dump-concurrency command. * Add a new `ConcurrencyDumper.swift` file with the implementation. The dumper needs to do some additional work with the results from Remote Mirror to build up the task tree and this keeps it all organized. * Extend `Inspector` to query the target's threads and fetch each thread's current task. Concurrency runtime changes: * Add `_swift_concurrency_debug` variables pointing to the various future adapters. Remote Mirror uses these to provide a better view of a tasks's resume pointer. rdar://85231338
51 lines
1.8 KiB
C++
51 lines
1.8 KiB
C++
//===--- Debug.h - Swift Concurrency debug helpers --------------*- C++ -*-===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Debugging and inspection support.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_CONCURRENCY_DEBUG_H
|
|
#define SWIFT_CONCURRENCY_DEBUG_H
|
|
|
|
#include "swift/Runtime/Config.h"
|
|
|
|
namespace swift {
|
|
|
|
// Dispatch knows about these symbol names. Don't change them without consulting
|
|
// dispatch.
|
|
|
|
/// The metadata pointer used for job objects.
|
|
SWIFT_EXPORT_FROM(swift_Concurrency)
|
|
const void *const _swift_concurrency_debug_jobMetadata;
|
|
|
|
/// The metadata pointer used for async task objects.
|
|
SWIFT_EXPORT_FROM(swift_Concurrency)
|
|
const void *const _swift_concurrency_debug_asyncTaskMetadata;
|
|
|
|
/// A fake metadata pointer placed at the start of async task slab allocations.
|
|
SWIFT_EXPORT_FROM(swift_Concurrency)
|
|
const void *const _swift_concurrency_debug_asyncTaskSlabMetadata;
|
|
|
|
SWIFT_EXPORT_FROM(swift_Concurrency)
|
|
const void *const _swift_concurrency_debug_non_future_adapter;
|
|
SWIFT_EXPORT_FROM(swift_Concurrency)
|
|
const void *const _swift_concurrency_debug_future_adapter;
|
|
SWIFT_EXPORT_FROM(swift_Concurrency)
|
|
const void *const _swift_concurrency_debug_task_wait_throwing_resume_adapter;
|
|
SWIFT_EXPORT_FROM(swift_Concurrency)
|
|
const void *const _swift_concurrency_debug_task_future_wait_resume_adapter;
|
|
|
|
} // namespace swift
|
|
|
|
#endif
|