2017-09-02 43 views
4

背景信息:我有一個函數直接和間接地通過其他函數調用自己,並且想要一個便宜的方法在程序用完調用堆棧時優雅地失敗。我可以手動計算通話次數,但我希望獲得更優雅,更可靠的方法。Rust是否暴露調用堆棧深度?

使用穩定的Rust可以確定當前的調用堆棧深度嗎?

我能找到的唯一選項是:

  1. 繼ASM堆棧,但它需要不穩定,不便於攜帶。
  2. 使用GNU libc擴展(回溯)。但是,回溯太浪費,也不是標準。

回答

2

stacker箱子似乎提供你所尋求的功能:

  • 一個功能,以保證可用的堆棧
  • 函數的數量來查詢剩餘堆的數量,你可以用它來在程序實際堆棧溢出之前保釋

該庫支持Linux,Windows和macOS目標。

+0

考慮到github上唯一的開放問題的嚴重性,我對箱子的健康有一些擔憂,但似乎確實提供了我需要的東西。希望這個功能被合併到像glibc這樣的stdlib中。 – Doe

+1

根據[這個評論由板條箱的主人和主要rustc的開發者之一](https://github.com/rust-lang/rfcs/issues/1488#issuecomment-179334635)這不會被移動到標準圖書館。然而,[這個問題](https://github.com/rust-lang/rust/issues/41884)表明這個箱子前途不錯。 – mcarton

+0

我當然希望如此給予這個問題對可靠的系統軟件有多重要。謝謝(你的)信息。 – Doe