簡體   English   中英

Visual Studio(或任何其他工具)可以將地址解釋為調用堆棧的開頭(boost上下文)嗎?

[英]Can Visual Studio (or any other tool) interpret an address as a beginning of a call stack (boost context)?

是否有可能告訴Visual Studio(或任何其他工具,甚至在任何其他主要操作系統上)將地址解釋為調用堆棧的開頭?


我想要實現的目標:我們有一個庫,它使用boostmake_fcontext / jump_fcontext並將這些上下文存儲到一個容器中,以暫停一些調用以便以后處理。

我的問題是 - 是否有可能以某種方式調試這些暫停的呼叫是什么? 我想,我可以告訴調試器/工具類似:“這是這個地址,雖然它並不明顯,它實際上指向一個調用堆棧,'解析'它並像標准調用堆棧一樣向我顯示”。

不知道它是否在理論上是可行的,因為我不知道boost::context的細節,但聽起來是可以實現的。

有沒有人試圖解決這個問題?

有幾種我能想到的方法,有各種不滿意的方式。

  • 您可以編寫自己的調試引擎以插入IDE,這將允許手動枚舉光纖。 (你可能不想這樣做。)

  • 您可以使用boost::context::fiber而不是fcontext_t 在Windows上,這些可以使用win32光纖實現,因此它們將自動顯示在IDE中,具有完整的堆棧/本地。 (您可能需要更改Boost配置才能使其正常工作,有關詳細信息,請參閱文檔。)

  • 您可以查看fcontext_t結構,獲取EIP和ESP,並將它們復制到您的寄存器中; 在這一點上,處理器將認為它正在以光纖的形式執行。 (這很可能不會很好。)

我個人會采用第二種方法。 fcontext_t有點太低級別無法直接使用,除非你有特殊的異國情調需求,你沒有提到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM