覚書ブログ
覚えられないので書いておきます。
2024年5月6日月曜日
rustup updateした後にcargoを実行したらエラーになった
# 発生事象 1. rustup update stableを実行 1. cargoを実行 ```bash $ cargo error: the 'cargo' binary, normally provided by the 'cargo' component, is not applicable to the '1.72.0-aarch64-unknown-linux-gnu' toolchain ``` と実行したがエラーが発生した。 # 解決方法 googleで検索したら、AIが以下コマンド実行してみてと教えてくれたので、実行。 ```bash rustup component remove cargo rustup component add cargo ``` これで無事cargoが実行できた。 rustup updateだけだとバイナリの不整合が発生する模様なため、cargoの入れ替えも同時に実施したほうが良さそう。 # reference https://github.com/rust-lang/rustup/issues/2704#issuecomment-815062952
2024年5月5日日曜日
instrument_functionで関数トレースをしてみる
# モチベーション ちょっとした動作確認を行った場合、コールツリーなどをチェックしたいということがありました。 わざわざ、関数にDebug Printを入れ込むのも面倒だなと言うことなので、ちょっと調査しました。 # 実現方法 1 . コンパイルオプション ```-finstrument-functions``` を設定してコンパイル 2 . 関数のentry/exitで以下の関数が呼び出される ```c void __cyg_profile_func_enter(void *func_address, void *call_site) // func_addressが呼び出される関数アドレス、call_siteは呼び出しもとの関数アドレス void __cyg_profile_func_exit(void *func_address, void *call_site) ``` 3 . この関数の中で、アドレスから関数名に変換する仕組みを入れることにより、 コールツリーが確認できる。 ※cyg_profile_func_enter/exit自体はフック対象外とするため、 ```-finstrument-functions```の対象外とする必要がある。 実装したサンプルコードはこちら [サンプルコード](https://github.com/ponta027/c_lang_sandbox/tree/main/function_trace) ちなみにstatic関数のコールトレースはできない。 staticを空のマクロ定義にして、読み出せるようにするなどで実現できるが、関数名の衝突などがありそうなため、うまくできるかは微妙。 # 改善点 * 関数名までなので、引数も表示できるようにしたい。 * libdwarfを使うとできるよう。
新しい投稿
前の投稿
ホーム
登録:
投稿 (Atom)