Guild icon
swift-developers-japan
開発環境, ライブラリ / lldb
Avatar
omochimetaru 8/21/2018 5:00 AM
lldbのチャンネルを作りました
Avatar
こんにちは。好きなlldbコマンドはexpressionです
Avatar
omochimetaru 8/21/2018 5:05 AM
Linuxの中でlldb-serverを立ち上げて、Macからlldbのリモートデバッグで接続したが
5:05 AM
(lldb) expr 1+1 Shared Swift state for Run could not be initialized. The REPL and expressions are unavailable.
5:05 AM
swift-lldb - This is the version of LLDB that supports the Swift programming language & REPL.
5:05 AM
このメッセージが出てexprが使えなかったのですが
5:05 AM
どうすればできるか、誰かわかりますか
5:06 AM
なお、同一Linuxホスト内で、同じlldb-serverにlldbで接続した場合は、
5:06 AM
exprlist も動きました
5:08 AM
接続元と先でソースの場所が違うのが原因かもしれないんですが、 settings set target.source-map <ターゲットパス> <ローカルパス> をやったら
5:08 AM
ソースは出るようになったけど、 expr はダメで。
5:11 AM
あ!
5:11 AM
できた!
5:12 AM
プロセスにattachするときにロードされるっぽいですね
5:12 AM
ソースマップの設定を先にやればいいのか。
Avatar
omochimetaru 8/21/2018 5:26 AM
後はlldbではなくXcodeから接続できれば最高なんですが、XcodeにそれらしきUIすら見つからないですね (edited)
Avatar
前に AppCode でも同様の機能を探しましたがありませんでした
Avatar
omochimetaru 8/24/2018 6:46 AM
AppCodeならありそうなのに!
Avatar
雑に機能要望出せば対応してくれるかもですね
6:52 AM
シュッと調べてみましたが、少なくともまだそれっぽい機能要望は出てなさそうです
Avatar
omochimetaru 8/24/2018 6:54 AM
とりあえずbugs.swiftにxcode要望も出しておくか・・・
Avatar
Xcode の要望は bugs.swift.org では受け付けてくれないと思います。 bugreport.apple.com でお願いします!
😀 1
Avatar
norio_nomura 8/24/2018 9:04 AM
Visual Studio Codeのlldbエクステンションでlldb-server上でプロセス起動/アタッチまではいけましたが、ブレークポイントが効きませんでした。
Avatar
omochimetaru 8/24/2018 9:05 AM
VSCodeすごい
9:06 AM
ブレークポイントダメなのか。
Avatar
norio_nomura 8/24/2018 9:11 AM
vscode-lldb - LLDB Front-End for Visual Studio Code
Avatar
#ios で話していた件、会社のMacだとちゃんと動いた。動かないわけではなく動かない状況があるということなのかな
Avatar
@noppe 同じProjectでしょうか? こちらでは、オフィスのiMacでも自分のMBPでも同様の現象が起きており。。
Avatar
同じプロジェクトです!
🤔 1
Avatar
僕もIRGenエラーで困ってます 問題ないプロジェクトもあるんですけどね
Avatar
🍤ACエビフライ🔌 10/12/2018 8:58 AM
lldbで変数のpoとかexprしようとすると error: <EXPR>:3:1: error: use of unresolved identifier 'hogehoge' とかなって苦しんでたんですが、Address Sanitizerをoffにするとなおることがわかりました
👀 3
8:59 AM
無駄に時間を溶かしてしまった...
Avatar
Swift Error Breakpoint使ってlldbでエラーの詳細を見られないかと試したけど、ダメぽい。 (edited)
10:30 AM
SILを見るとwillThrowにErrorを渡してる。 // main sil @main : $@convention(c) (Int32, UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>) -> Int32 { bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>): %2 = metatype $@thin MyError.Type // user: %4 // function_ref MyError.init() %3 = function_ref @main.MyError.init() -> main.MyError : $@convention(method) (@thin MyError.Type) -> @owned MyError // user: %4 %4 = apply %3(%2) : $@convention(method) (@thin MyError.Type) -> @owned MyError // user: %7 %5 = alloc_existential_box $Error, $MyError // users: %10, %8, %6 %6 = project_existential_box $MyError in %5 : $Error // user: %7 store %4 to %6 : $*MyError // id: %7 %8 = builtin "willThrow"(%5 : $Error) : $() br bb1 // id: %9 bb1: // Preds: bb0 %10 = builtin "errorInMain"(%5 : $Error) : $() unreachable // id: %11 } // end sil function 'main' (edited)
10:30 AM
けど、ブレークポイントで$arg2を見ても0になってる。 $ xcrun --toolchain org.swift.5020190117a swift swift_oss_helper command enabled. warning: (x86_64) /Library/Developer/Toolchains/swift-5.0-DEVELOPMENT-SNAPSHOT-2019-01-17-a.xctoolchain/System/Library/PrivateFrameworks/LLDB.framework/Resources/repl_swift empty dSYM file detected, dSYM was created with an executable with no debug info. Welcome to Apple Swift version 5.0-dev (LLVM a6b53a73a4, Clang 5fd77fa5bf, Swift 08e20c0d48). Type :help for assistance. 1> :br s -E swift Breakpoint 1: where = libswiftCore.dylib`swift_willThrow at ErrorObject.mm:569, address = 0x0000000101313d50 1> struct MyError: Error, CustomStringConvertible { 2. var description = "my error" 3. } 4. 5. throw MyError() Execution stopped at breakpoint. Enter LLDB commands to investigate (type help for assistance.) libswiftCore.dylib was compiled with optimization - stepping may behave oddly; variables may not be available. Process 68387 stopped * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 frame #0: 0x0000000101313d50 libswiftCore.dylib`swift_willThrow(unused=0x0000000000000000, error=<unavailable>) at ErrorObject.mm:569 [opt] 566 /// Breakpoint hook for debuggers. 567 SWIFT_CC(swift) void 568 swift::swift_willThrow(SWIFT_CONTEXT void *unused, -> 569 SWIFT_ERROR_RESULT SwiftError **error) { 570 // empty 571 } 572 Target 0: (repl_swift) stopped. (lldb) p $arg1 (unsigned long) $0 = 4296026880 (lldb) p $arg2 (unsigned long) $1 = 0 (lldb) (SILと同じソースで試したログと差し替え) (シンボル入りtoolchainで試したログと差し替え) (edited)
Avatar
ふむ
Avatar
willThrowの実装をみると中身が無いので、オプティマイザがパラメータを省略してしまっているのかも。 https://github.com/apple/swift/blob/master/stdlib/public/runtime/ErrorObjectNative.cpp#L111-L114
The Swift Programming Language. Contribute to apple/swift development by creating an account on GitHub.
10:33 AM
Symbol入りtoolchain使ってXcodeでデバッグしても、やはりNULLになってる。
10:37 AM
Errorを投げる場所のソースがあるならSwift Error Breakpointもいけるけど、ちゃんとcatchするのが無難ぽい。
Avatar
なるほど
Exported 42 message(s)
Timezone: UTC+0