如何在 C++ 中实现堆栈跟踪 (从投掷地点到接住地点)?
我们可以用一种欺骗性的方式来显示异常的整个堆栈跟踪(函数+行),就像在 Java 和 C# 中一样,在 C++ 中吗?
我们可以用宏来做一些事情来为 Windows 和类似 Linux 的平台实现这一点吗?
Is the trickery way that we can show the entire stack trace (function+line) for an exception, much like in Java and C#, in C++?
Can we do something with macros to accomplish that for windows and linux-like platforms?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您在使用 glibc 的平台上运行,则可以使用 backtrace() 函数。 这是 C 函数,但它们也适用于 C++ 回溯。 这当然是不可移植的,但我怀疑您是否会找到一个无需在每个函数中添加额外代码的可移植解决方案;-)
http://www.gnu.org/software/libc/manual/html_node/Backtraces.html
If you are running on a platform which uses glibc, you can use the backtrace() functions. This are C functions, but they do work for c++ back traces too. This is of course not portable, but I doubt you will find a portable solution without additional code in every function ;-)
http://www.gnu.org/software/libc/manual/html_node/Backtraces.html
并非没有特定于平台的知识或在每个函数中添加代码。
Not without either platform specific knowledge or addition of code in each function.
在 Windows 上,可以使用 Windows DbgHelp API 来完成,但要使其完全正确,需要大量的实验和调整。 请参阅 http://msdn.microsoft.com/en- us/library/ms679267(VS.85).aspx 首先。 我不知道如何在其他平台上实现它。
On Windows it can be done using the Windows DbgHelp API, but to get it exactly right requires lots of experimenting and twiddling. See http://msdn.microsoft.com/en-us/library/ms679267(VS.85).aspx for a start. I have no idea how to implement it for other platforms.
从 C++23 开始,可以使用 std::stacktrace。 在此之前,请使用简单且可移植的 cpptrace 。
As of C++23
std::stacktrace
can be used. Prior to that use cpptrace which is simple and portable.