【发布时间】:2011-06-15 08:35:40
【问题描述】:
在我的代码中,我有一些运行时断言宏(我们称之为 runtime_assert)。 这应该在多线程应用程序中。
当条件传递评估为 false 时,runtime_assert 通过转储堆栈跟踪终止程序,然后调用 _exit()。
您可能知道,转储堆栈跟踪不是一项简单的任务 (How to get a stack trace for C++ using gcc with line number information?)。
这个想法是通过调用system()来使用进程的pid来调用gdb。
- 一般来说这是个好主意吗?
或者最好使用仅流程工具来获取回溯? (例如 gcc
backtrace()/backtrace_symbols()) - 当调用 ptrace() 时,它会以某种方式影响其他线程吗?
- 如果系统资源不足(例如内存/磁盘空间),gdb fork 可能会失败吗?
- 如何只打印当前线程的堆栈跟踪? (我可以从 gcc backtrace() 获取当前方法的地址)
【问题讨论】:
标签: debugging gcc gdb stack-trace