标签: debug-backtrace

来自PHP中已注册的关闭函数的debug_backtrace()

在修补这个问题的答案的同时,我发现当从内部调用时,debug_backtrace()不会超出注册的函数register_shutdown_function().

这是中提到此评论register_shutdown_function()在PHP文档,指出:

您可以从关闭函数内部调用debug_backtrace或debug_print_backtrace,以跟踪致命错误发生的位置.不幸的是,这些功能在关机功能中不起作用.

更详细地解释一下,对这个答案状态的评论:

不行.堆栈取消后会发生关闭功能.没有要转储的堆栈信息.

有没有办法绕过这个,迫使PHP保持堆栈跟踪直到进程完全终止,或者我们应该接受它作为给定由于PHP内部?

php stack-trace debug-backtrace shutdown-hook

23
推荐指数
4
解决办法
8113
查看次数

自定义控制台日志功能,一个console.log包装器

function log( msgOrObj ){
    if(dev_mode){
        console.log({
            'message': msgOrObj,
            'caller': arguments.callee.caller.toString()
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,我试图编写一个简单的自定义控制台日志功能(如上所述).但是我很难找到调用者来自哪个文件和行.我能看到的最多就是调用它的函数.

有没有人做过类似的事情?或者这甚至可能吗?

第70行的somescript.js中使用的示例:

log('some very important message!')
Run Code Online (Sandbox Code Playgroud)

javascript debug-backtrace

15
推荐指数
2
解决办法
9540
查看次数

GDB回溯了子进程

我有一个应用程序,它会分叉子进程.

子进程做了一些工作,在中间某处它给出了Segmentation错误.我使用GDB来调试这个,我用过:

set follow-fork-mode child
Run Code Online (Sandbox Code Playgroud)

我还为孩子中的一个函数设置了一个断点.但GDB并没有在我的断点暂停.

父进程也处理seg-fault,所以我不得不ctrl-c退出.然后,当我backtrace用来打印堆栈时,我得到的就是

没有堆栈

为什么没有设置断点,为什么我没有得到堆栈?

c gdb fork debug-backtrace

7
推荐指数
1
解决办法
3649
查看次数

在控制台中使用的有用的Xcode DEBUG命令

我一直想知道但是在Xcode中没有找到任何有用的命令列表.

我知道的一个,我使用的很多是输入命令的Backtrace bt,在遇到未捕获的异常之后的应用程序崩溃之后,它有时会给出问题所在的int.

你能分享更多有用的命令吗?它们可以让我们与调试器和应用程序本身进行交互吗?

谢谢

debugging xcode debug-backtrace ios

7
推荐指数
1
解决办法
6699
查看次数

GDB bt错误:“没有足够的寄存器或内存可用于进一步展开”

由于以下原因,来自核心文件的回溯信息剪切了有用的信息:

Backtrace已停止:没有足够的寄存器或内存可用于进一步展开。

为什么会出现此消息,我可以对此做些什么?

c++ gdb backtrace debug-backtrace

6
推荐指数
1
解决办法
2965
查看次数

分析由于库有错误而发生的崩溃的回溯

在我的应用程序中,我有设置信号处理程序来捕获Segfaults,并打印bactraces.进程启动时,我的应用程序会加载一些插件库.

如果我的应用程序崩溃了一个段错误,由于主可执行二进制文件中的错误,我可以用以下内容分析回溯:

addr2line -Cif -e ./myapplication 0x4...
Run Code Online (Sandbox Code Playgroud)

它准确地显示了函数和source_file:line_no

但是,如何分析是否由于插件中的错误而发生崩溃,如下面的回溯?

/opt/myapplication(_Z7sigsegvv+0x15)[0x504245]
/lib64/libpthread.so.0[0x3f1c40f500]
/opt/myapplication/modules/myplugin.so(_ZN11ICAPSection7processEP12CONNECTION_TP7Filebufi+0x6af)[0x7f5588fe4bbf]
/opt/myapplication/modules/myplugin.so(_Z11myplugin_reqmodP12CONNECTION_TP7Filebuf+0x68)[0x7f5588fe51e8]
/opt/myapplication(_ZN10Processors7ExecuteEiP12CONNECTION_TP7Filebuf+0x5b)[0x4e584b]
/opt/myapplication(_Z15process_requestP12CONNECTION_TP7Filebuf+0x462)[0x4efa92]
/opt/myapplication(_Z14handle_requestP12CONNECTION_T+0x1c6d)[0x4d4ded]
/opt/myapplication(_Z13process_entryP12CONNECTION_T+0x240)[0x4d79c0]
/lib64/libpthread.so.0[0x3f1c407851]
/lib64/libc.so.6(clone+0x6d)[0x3f1bce890d]
Run Code Online (Sandbox Code Playgroud)

我的应用程序和插件库都使用gcc编译并且未被删除.我的应用程序在执行时,使用dlopen加载plugin.so不幸的是,崩溃发生在我无法在gdb下运行应用程序的站点上.

谷歌疯狂地搜索答案,但所有讨论回溯和addr2line的网站排除了可能需要分析错误插件的情况.我希望一些善良的黑客知道这个困境的解决方案,并且可以分享一些见解.对于其他程序员来说,这将是非常宝贵的.

提前谢谢.

c c++ backtrace debug-backtrace addr2line

6
推荐指数
2
解决办法
2548
查看次数

由register_tick_function()调用的PHP debug_backtrace()不会返回完整堆栈

我想用来register_tick_function()挂钩以下调用并打印他们的堆栈跟踪debug_backtrace().

如果我运行以下代码.

<?php

function dump() {
  // Replace this with var_dump(debug_backtrace()); to print the entire trace.
  foreach (debug_backtrace() as $trace)
    echo("Function ${trace['function']}() has been called" . PHP_EOL);
}

declare(ticks = 1);
register_tick_function('dump');

print("");
array_search('green', Array());
Run Code Online (Sandbox Code Playgroud)

它只打印dump()功能.

Function dump() has been called
Function dump() has been called
Function dump() has been called
Run Code Online (Sandbox Code Playgroud)

为什么我没有看到print()array_search()跟踪数据?就像堆栈在调用之前已经重置一样dump().我也很确定它在过去是否正常工作.

php debug-backtrace register-tick-function

6
推荐指数
1
解决办法
463
查看次数

如何解释回溯地址以便使用GDB进行调试

我使用backtrace()和backtrace_symbols()来输出SIGSEGV和其他信号的回溯,格式如下:

0: [0xb750818]
1: /opt/server/libQtScript.so.4(+0x6f42a) [0xb782c42a]
2: /opt/server/libQtScript.so.4(+0x7bffc) [0xb7838ffc]
3: /opt/server/libQtScript.so.4(+0x86946) [0xb7843946]
4: /opt/server/libQtScript.so.4(+0x7c4bc) [0xb78394bc]
5: /opt/server/libQtScript.so.4(+0x86946) [0xb7843946]
6: /opt/server/libQtScript.so.4(+0x9603e) [0xb785303e]
7: /opt/server/libQtScript.so.4(_ZN12QScriptValue4callERKS_RK5QListIS_E+0x2e7) [0xb7891647]
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,帧#7对我来说很好,尽管帧1-6给了我一些"+ x"地址.

如何在"+ 0x6f42a"和GDB中的其他地址反汇编中得到确切的行?什么帧#0,没有描述模块,意味着什么?

gdb backtrace debug-backtrace

5
推荐指数
1
解决办法
5385
查看次数

有没有办法在 PHP 中进行“向前跟踪”?

我熟悉debug_backtracePHP 中的函数,并且真的觉得它很有用。但是,我有一个特定的、非常混乱的情况,我需要能够做相反的事情 - 在某处粘贴一个函数调用,并让它给我一个在该点之后调用的每个函数的列表,直到页面完全加载。

我们确实安装了 XDebug,对于大多数项目我都使用它。然而,这是一个非常混乱的代码库,其中有很多 ajax 和 php 代码实际上是作为字符串创建并呈现的(我没有编写这段代码!)而且我们都没有成功地让调试器工作。

php debugging debug-backtrace

5
推荐指数
1
解决办法
591
查看次数

在调试模式下,记录的堆栈帧不支持控制台

bt崩溃后,我无法在调试模式下使用命令回溯。我已经搜索了,但是没有得到解决方案。我已经尝试过[NSThread callStackSymbols],但是它在控制台中给出了相同的消息:

记录的堆栈帧不支持控制台

我怎样才能做到这一点?

stack-trace debug-backtrace ios xcode7.3

5
推荐指数
2
解决办法
2362
查看次数