Avatar
omochimetaru 5/31/2018 2:38 PM
xcodeのschemeで、Run > Info のところで、Launch を Wait for executable to be launched にすることで、 swiftコマンドが起動する瞬間にデバッガをアタッチできるんですが
2:38 PM
swiftcコマンドに対して同じことをやろうとしても、Executableを指定するところで、 swiftcは実際にはシンボリックリンクなので、
2:39 PM
XcodeのExecutableを選択するダイアログが勝手に、リンク先のswiftの指定として解釈するっぽくて
2:39 PM
選択後にExecutableがswiftになってしまう。
2:39 PM
で、その状態だと、swiftcコマンドが叩かれてもデバッガアタッチされない
2:41 PM
あ、ちがう、かんちがいだ
2:42 PM
swiftcからの起動であってもswiftでwaitしておけばアタッチできた。
2:43 PM
自己解決しました・・
2:43 PM
いつのまにか /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc が混ざってて、自前版とごちゃごちゃになってた。
2:49 PM
swift-buildがswiftcを呼び出すところはSwiftのFoundationのProcess.popenで、
2:50 PM
この呼出にはデバッガがアタッチしないっぽい
2:50 PM
けどなんか起動したこと?は
2:50 PM
検出するみたいで、Xcodeはwaitからfinishに変わる。
2:52 PM
swift build からの一連の動作をデバッグしようとしてるんだけど難しいですね 今の所swiftのmain冒頭にargvのダンプを仕込んで、swiftpm経由で発火するときにstdoutに出させて、 呼び出しを洗い出したあと、手動で実行し直したりしています・・