Closed19
ARM macでrust-gdbを動かす(詰んだので停止中)
-
失敗.x86_64
Docker imageを使うcargo build
やcargo run
はいけてそうだがptrace
がないと言われてgdb
は動かない. -
Dockerの二の舞になりそうでパスlima
- Rosetta2 (失敗)
- UTM
-
terminal.app
をx86_64
用とaarch64
用に複製した方が楽な気がするが,Ventura以降は不可能な模様. -
rust-gdb
を動かすためにgdb
が必要.brew install gdb
で入れる. -
rust-gdb
を動かすためにpython
も必要.現在aarch64用pythonを使ってしまっているので後で修正する
rustup-init
で書き換えられるfile(default path?)
$HOME/.profile
$HOME/.bash_profile
$HOME/.zshenv
Rosetta shellの起動
env /usr/bin/arch -x86_64 /bin/zsh
-
--login
でlogin shellにすると.zprofile
も読み込まれる
rust-gdb
を実行すると以下のerrorで動かない.適当にググるとptrace
関係っぽいことが書いてある.調査中.上記python設定の問題があるので要検証
(gdb) r
Starting program: /Users/ultimatile/programming/Rust/zero_rust/dbg_target/target/debug/dbg_target
Note: this version of macOS has System Integrity Protection.
Because `startup-with-shell' is enabled, gdb has worked around this by
caching a copy of your shell. The shell used by "run" is now:
/Users/ultimatile/Library/Caches/gdb/bin/zsh
Unable to find Mach task port for process-id 87475: (os/kern) failure (0x5).
Rust環境のinstall先を変更
export "CARGO_HOME=$HOME/x86_64/.cargo"
export "RUSTUP_HOME=$HOME/x86_64/.rustup"
x86_64
は別の名前にしても良い.
Python (Rye)のinstall先を変更
export RYE_HOME="$HOME/x86_64/.rye"
ryeのinstall
curl -sSf https://rye-up.com/get | bash
brew install rye
も使えるが,環境変数の設定や他の設定ができないっぽいので非推奨.(.rye
も作成されない?)
ここに解決法が書いてそう[要検証]
brewでgdb入れたときの出力よく見たら
gdb requires special privileges to access Mach ports.
You will need to codesign the binary. For instructions, see:
https://sourceware.org/gdb/wiki/PermissionsDarwin
とちゃんと書いてある...
gdb
のcode署名
wget https://raw.githubusercontent.com/conda-forge/gdb-feedstock/main/recipe/macos-codesign/macos-setup-codesign.sh
bash macos-setup-codesign.sh
security find-certificate -c gdb_codesign |grep System.keychain
security find-certificate -p -c gdb_codesign | openssl x509 -checkend 0
% security find-certificate -c gdb_codesign |grep System.keychain
keychain: "/Library/Keychains/System.keychain"
% security find-certificate -p -c gdb_codesign | openssl x509 -in /dev/stdin -checkend 0
Certificate will not expire
% security dump-trust-settings -d
Number of trusted certs = 1
Cert 0: gdb_codesign
Number of trust settings : 1
Trust Setting 0:
Policy OID : Code Signing
wget https://gist.githubusercontent.com/ultimatile/c2452c20c31e377b9df3ffed5ea3680a/raw/d43b7e6734232583e58a033e8139798748617c67/gdb-entitlement.xml
codesign --entitlements gdb-entitlement.xml -fs gdb_codesign $(which gdb)
% codesign -vv $(which gdb)
/usr/local/bin/gdb: valid on disk
/usr/local/bin/gdb: satisfies its Designated Requirement
% codesign -d --entitlements - $(which gdb)|grep -a com.apple.security.cs.debugger
Executable=/usr/local/Cellar/gdb/14.2/bin/gdb
[Key] com.apple.security.cs.debugger
-
openssl x509 -in /dev/stdin -checkend 0
がopenssl x509 -checkend 0
だとWarning: Reading certificate from stdin since no -in or -new option is given
というwarningが出る.結果は変わらないので気にしなくても良い. ↩︎
(gdb)r
すると
During startup program terminated with signal SIGTRAP, Trace/breakpoint trap.
と出て動かない
chmod 755 $(which gdb)
chgrp admin $(which gdb)
をすると上述のerrorは出ないが止まったままshellが帰ってこない
新しいshellを立ち上げるとまた出るので毎回やるか.zshrc
入れる必要がある?
Rosseta 2 でgdb
しようとするとintel macでは生じない別の問題があるっぽい?
関係なさそう
code署名を完了しても色々
warning: can't find symbol '_ZN108_$LT$nix..sys..socket..addr..sys_control..SysControlAddr$u20$as$u20$nix..sys..socket..addr..SockaddrLike$GT$8from_raw17h0b262d3dbad4b6cdE' in minsymtab
みたいなwarningが出て動かない
libか何かのpathが解決できていないっぽい?rust-gdb ./target/debug/deps/[program_name]-[randome_string]
でいけるみたいなやつが書いてあり,確かにWarningは消えるがhang upしてCtrl-CもCtrl-Dも受け付けなくなりkillするしかなくなる.
issueの最初に書いてある例でも動かないので別の問題?
このスクラップは3ヶ月前にクローズされました