5

分解 COM 对象以进行调试的正确方法是什么?我有一个返回多级对象的第 3 方函数。该文档不存在,因此我希望能够从对象中回显所有内容或在 Komodo IDE 中对其进行调试。

Komodo 只说 Object,没有别的。也许转换为数组?

我知道一些现有的选项,例如$com->Status,但有更多的变量返回,我想知道它们是什么。

4

3 回答 3

7

您可以使用com_print_typeinfo()代替 var_dump()。这应该适用于 COM、VARIANT 和 DOTNET 对象。输出类似于:

类 IFile { /* GUID={C7C3F5A4-88A3-11D0-ABCB-00A0C90FFFC0} */

// 一些 PHP-COM 内部的东西 ...

 /* 分配=1610612736 */
 函数查询接口(
  /* VT_PTR [26] [in] --> ? [29] */ &$riid,
  /* VT_PTR [26] [out] --> VT_PTR [26] */ &$ppvObj
  )
 {
 }
 /* 分配=1610612737 */
 /* VT_UI4 [19] */
 函数添加引用(
  )
 {
 }

// ...
 /* 分配=1610678275 */
 函数调用(
  /* VT_I4 [3] [in] */ $dispidMember,
  /* VT_PTR [26] [in] --> ? [29] */ &$riid,
  /* VT_UI4 [19] [in] */ $lcid,
  /* VT_UI2 [18] [in] */ $wFlags,
  /* VT_PTR [26] [in] --> ? [29] */ &$pdispparams,
  /* VT_PTR [26] [out] --> VT_VARIANT [12] */ &$pvarResult,
  /* VT_PTR [26] [out] --> ? [29] */ &$pexcepinfo,
  /* VT_PTR [26] [out] --> VT_UINT [23] */ &$puArgErr
  )
 {
 }

// COM 对象的属性和方法
// ...

 /* 分配=1001 */
 /* VT_BSTR [8] */
 /* 简称 */
 变种$短名称;

 /* 分配=1004 */
 /* VT_PTR [26] */
 /* 获取包含文件的驱动器 */
 变量$驱动器;

 /* 分配=1005 */
 /* VT_PTR [26] */
 /* 获取包含文件的文件夹 */
 var $父文件夹;


// ...

 /* 分配=1204 */
 函数移动(
  /* VT_BSTR [8] [in] */ $Destination
  )
 {
  /* 移动这个文件 */
 }
 /* 分配=1100 */
 /* VT_PTR [26] */
 函数 OpenAsTextStream(
  /* ? [29] [输入] */ $IOMode,
  /* ? [29] [输入] */ $格式
  )
 {
  /* 以 TextStream 形式打开文件 */
 }
}
于 2010-05-14T19:30:12.410 回答
0

It is weird that var_dump didn't work.

But you could try with other of php reflection tools.

Reflection Class:

<?php
Reflection::export(new ReflectionClass(get_class($data)));
?>

Or you could try with the get_class_methods:

<?php
  print_r(get_class_methods($data));
?>

or get_object_vars to see its fields:

<?php
  print_r(get_object_vars($data));
?>

Hope this helps.

于 2009-10-26T18:40:04.443 回答
0

本机var_dump()不会因 COM 对象而崩溃。

扩展xdebug,替换原生 var_debug() 函数并且不支持 COM 对象。

解决方案是通过将 xdebug.overload_var_dump=off 添加到 php.ini 来停用 xdebug 对函数 var_dump() 的覆盖。

xdebug 错误跟踪器中的相关错误

于 2014-12-17T11:19:07.987 回答