😽

[Swift] コードでブレークする

2025/03/21に公開

Swiftでは、コードにブレークポイントのような中断を挿入することが可能です。この機能はデバッグビルドでのみ有効で、シグナル SIGTRAPを発生させてデバッガに中断を通知します。以下にそのサンプルコードを示します。

/**
 Raises a debugger signal in Debug Build
 */
@inline(__always)
public func debugBreakpoint() {
  #if DEBUG
  raise(SIGTRAP)
  #endif
}

この機能は、カスタムのアサート関数を作成する際に特に便利です。アサート関数は、特定の条件が満たされていない場合(すなわち、アサートの条件がfalseの場合)にプログラムを中断するためのものです。

次のコードは、カスタムアサート関数の一例を示しています:

/**
 Custom assert function for Debug Build
 */
@inline(__always)
public func customAssert(_ condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = String(), file: StaticString = #file, line: UInt = #line) {
  #if DEBUG
  if !condition() {
    print("Assertion failed at \(file):\(line): \(message())")
    debugBreakpoint()
  }
  #else
  assert(condition(), message(), file: file, line: line)
  #endif
}

この関数では、デバッグビルド時にアサートの条件がfalseである場合にdebugBreakpoint()関数を呼び出してプログラムを中断します。リリースビルド時には、通常のassert関数を使用しています。

このようにカスタムアサートを使用することで、アサートに引っかかった際に、そのまま処理を続行した場合どうなるのかを視覚的に確認することが可能になります。これはデバッグ時に特に便利な機能であり、エラーの原因を特定しやすくする一助となります。

Discussion