问题标签 [debug-backtrace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
445 浏览

php - debug_backtrace() 触发内存允许问题

我正在调试一个 Joomla 网站。出于学习目的,我只想查看哪个文件调用/请求了模块的modulename .php 文件,因此我将 modulename .php 文件放在print_r(debug_backtrace())第一行,但触发了错误:

允许的内存大小 134217728 字节用尽(尝试分配 98570240 字节)

我被困在这里。有人可以简要解释一下为什么debug_backtrace()在这种情况下会失败吗?

0 投票
2 回答
1635 浏览

php - php中的回溯是什么意思 为什么我们在php中使用debug_backtrace()和debug_print_backtrace()函数?

我是 php 新手并从php.net学习它,目前我正在阅读有关使用debug_backtrace()进行调试的信息。

谁能告诉我回溯是什么意思以及为什么我们在 php 中使用debug_backtrace()debug_print_backtrace()函数?

0 投票
1 回答
554 浏览

php - 如何跟踪对输出缓冲区的调用

所以场景是我有一个使用输出缓冲的应用程序,除了预期的结果之外,该应用程序还返回了一些额外的数据。我可以操纵将预期结果添加到输出缓冲区的点,以确认在应用程序的这一点上,发送到输出缓冲区的数据是正确的,因此意外的额外数据必须来自另一个来源。

我怀疑这个问题是一个不在 PHP 脚本标签内的杂散字符,但我没有运气弄清楚哪些(如果有)文件是罪魁祸首。据我所知,可能包含一些文件实际上正在echo对额外数据进行显式处理。

所以我希望捕获写入输出缓冲区的任何文件的文件名和行号,但这证明比我预期的要困难得多。我知道首字母在哪里ob_start,所以我一直在尝试使用自定义output_callback. 以下是我已经尝试过的一些事情:

这将返回定义函数的文件名和行号,而不是调用它的位置(正如预期的那样,我猜,但开始不好)。

这会引发有关销毁 lambda 函数的错误。

这有好坏参半的结果。我承认我不完全确定为什么。但在大多数情况下,var_dump解析为一个空字符串(什么都没有),但在一种情况下,它似乎生成了一些跟踪数组,但没有任何反映 ob_start 调用来源的东西(换句话说,无论它输出什么,实际调用的源文件echo不是跟踪的一部分)。

请记住,根据上述内容,我一直在进行一些非常基本的测试,只是为了弄清楚output_callback当我准备将其放入故障排除上下文时自定义函数会是什么样子。所以这个问题不是特定于应用程序的,我只是想找到一种通用的方法来拦截输出函​​数(echo、print 等)并获取有关输出调用起源的信息。

0 投票
1 回答
730 浏览

php - register_tick_function() 调用的 PHP debug_backtrace() 不返回完整堆栈

我想用来register_tick_function()挂钩以下调用并使用debug_backtrace().

如果我运行以下代码。

它只打印dump()函数。

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

0 投票
1 回答
76 浏览

php - 你能在 PHP 中解决超出范围的后期静态绑定吗?

我终于发现自己在学习范围和上下文,以及它们之间的区别,但现在我遇到了问题。

我在子类继承的父类中有一个静态方法。当我从孩子调用该方法时,我希望能够在父母中告诉哪个孩子调用了它。

后期静态绑定,对吧?凉爽的。像这样:

在输出中,我看到:

万岁,正是我所希望的!但是...现在假设我从该父静态方法中调用了一个函数。我可以用它debug_backtrace来找出调用了静态方法,但不幸的是我看到的是声明类,而不是作用域。

这将打印输出:

我希望能够在其中创建一个ReflectionMethod对象GoToTheFair()并调用其他方法,但我需要确保我使用的是正确的范围,应该Sonny,而不是Daddy.

有没有办法在不作为static::class参数传递的情况下做到这一点GoToTheFair()


编辑:我不想使用参数方法的原因是该GoToTheFair()函数是我正在编码的库和类Daddy,并且Sonny是用户的。我不希望他们有选择自己范围的自由。

0 投票
1 回答
289 浏览

php - 为什么方法中的 var_dump(debug_backtrace()) 会触发对象的 __debugInfo()?

有人可以解释一下为什么在以下情况下:

当我创建一个类型的对象B并调用时methodA()

__debugInfo()也被执行:

我没有转储对象,我转储了调试回溯......

我在文档中遗漏了什么吗?http://php.net/manual/en/language.oop5.magic.php#object.debuginfo

谢谢!

0 投票
1 回答
693 浏览

c++ - 如何通过 glibc/malloc 回溯调试崩溃的 Linux 程序(无可用内核)?

我有一个在远程服务器上运行的 C++ 应用程序。我最近介绍了很多新代码。害怕崩溃,我已经设置ulimit -c unlimited了一段时间,然后我遇到了一个崩溃,一个 coredump 帮助我调试了一个问题。出于商业原因,正在运行的二进制文件没有调试符号,但我的 PC 上确实有 with-symbols 二进制文件,因此调试很容易。

今天更新的服务再次崩溃,不幸的是这次它没有产生核心转储(旧core文件仍然存在,未触及,我想这可能是某种预期的行为)。这次崩溃发生在 realloc() 内部,所以它向我展示了这个到 stdout 的堆栈跟踪:

如上所述,核心文件与之前的崩溃没有变化,因此无法使用。

我想知道是否可以使用此堆栈跟踪来手动找出哪个函数触发了破坏一切的 realloc()。我尝试addr2line使用提到的地址,但我觉得它把我带到了错误的地方,因为它们完全不相关。可能我应该以某种我不理解并且在谷歌搜索后无法找到的方式使用内存映射。是否有使用此类堆栈跟踪的指南?

0 投票
0 回答
58 浏览

c# - 使用反射/堆栈跟踪(或其他)获取属性名称?

即如果你使用它,它可以触发Object reference not set to an instance of an object

但是,使用 StackTrace 我们可以获得发生此错误的方法的名称。

但是,我们如何获取触发错误的属性名称呢?在其他语言中,例如php,有办法找到(使用debug_backtrace)上次发生的方法。

有没有类似的,所以它可以发现上次调用了ie set_ZZZ()(autosetter)方法,或者它可以直接说ZZZ属性导致问题?

0 投票
0 回答
27 浏览

php - debug_backtrace() 缺少类名的后期绑定

假设这种情况:

B类扩展A类,A类中定义了一个方法“myMethod”。

在里面myMethod我需要知道方法名

使用

__METHOD__ 总是返回引用 A 的“className::”部分A::myMethod

我的解决方案是:

static::class."::".__FUNCTION__

以这种方式将类引用返回到当前工作类

B::methodName

这项工作就像一个魅力。但是如果我在 debug_backtrace() 中需要它怎么办?

在 debug_backtrace 中 [class] 总是指 A 类(根据提供的示例)

如何在 debug_backtrace 中获得正确的绑定?

0 投票
0 回答
84 浏览

php - PHP 中的 __destruct 和 debug_backtrace()

我不明白为什么

out- 和 incommenting 这一行会改变 echo 输出的顺序。当构造函数之前执行 debug_backtrace() 时,为什么 unset() 不调用析构函数?