如何在 C++ 中实现堆栈跟踪 (从投掷地点到接住地点)?

发布于 2024-08-01 20:16:47 字数 119 浏览 2 评论 0原文

我们可以用一种欺骗性的方式来显示异常的整个堆栈跟踪(函数+行),就像在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

与君绝 2024-08-08 20:16:47

如果您在使用 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

厌味 2024-08-08 20:16:47

并非没有特定于平台的知识或在每个函数中添加代码。

Not without either platform specific knowledge or addition of code in each function.

花期渐远 2024-08-08 20:16:47

在 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.

闻呓 2024-08-08 20:16:47

从 C++23 开始,可以使用 std::stacktrace。 在此之前,请使用简单且可移植的 cpptrace

As of C++23 std::stacktrace can be used. Prior to that use cpptrace which is simple and portable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文