【问题标题】:Debugging in CodeIgniter (and MVC)在 CodeIgniter(和 MVC)中调试
【发布时间】:2012-11-13 19:37:33
【问题描述】:

我经常觉得需要转储变量以进行调试。在 CodeIgniter 中,我很难做到这一点,因为我不能简单地“回显”一个变量而不先将它传递给视图,我认为这很痛苦。我已经阅读了官方文档,虽然我找到了一个使用 log_message 函数的好解决方案,但无法使其工作,即使我成功地使“日志”文件夹可写并按照建议更改了“阈值”。有什么建议吗?

https://www.codeigniter.com/user_guide/general/errors.html

【问题讨论】:

  • 我知道这从来都不是一个好习惯,但我总是在加载视图之前只是 print_r() 或 echo 内容。它会出现在页面顶部的标题之前。同样,这是不好的做法,但取决于您需要做多少就足够了。此外,在您的 index.php 中,将 ini_set 设置为 ini_set(E_ALL)。
  • 如果您想实际进行调试,您不必总是先将变量/值回显/打印/转储到视图中。你可以在你的代码的任何地方做它,比如在你的控制器上,甚至是你的模型上。这取决于您的代码是如何工作的。
  • 它不像你可以从控制器方法 print_r。我已经用了 100 次了
  • 我目前正在处理同样的问题。我发现 CI 记录器系统会根据需要为您提供急需的信息。而要添加一些东西来调试、信息或错误,你可以简单地使用 print_r。
  • 您可以从控制器或模型中记录消息,而无需转到视图获取日志消息。

标签: php debugging codeigniter


【解决方案1】:

这不是一个好的做法,但您可以在执行的任何时候(从核心类、库、模型和控制器)向浏览器输出任何内容,只需在您想要输出信息的位置使用print_r()

当然,这有时不会显示,因为可能有重定向/路由/等将用户带到控制器执行的下一步,但如果你想抑制它(再次,仅用于调试目的),你可以使用:

print_r($string_or_variable_to_debug);
die();

die() 命令将停止所有执行,只留下您想要输出的信息。

使用log_message() 是更好的做法,但如果您说您已按照以下步骤操作,则很难理解为什么没有成功:

  1. 确保您的日志文件夹设置为可写
  2. $config['log_threshold'] 设置为 2、3 或 4
  3. 像这样使用函数:log_message('debug','Message you want to log');

如果您想使用print_r() 很好地格式化日志消息中的数组或对象,那么您需要将print_r() 的第二个参数设置为TRUE,如下所示:

log_message('debug',print_r($array_or_object,TRUE));

【讨论】:

  • 你可能想试试var_export。它打印的信息比print_r 更多。
  • 20 年仍然有用
【解决方案2】:

您需要在文件 config.php 中设置 $config['log_threshold'] 因为默认情况下它是 0(无日志)

  • 0 = 禁用日志记录,关闭错误日志记录
  • 1 = 错误消息(包括 PHP 错误)
  • 2 = 调试消息
  • 3 = 信息性消息
  • 4 = 所有消息

【讨论】:

  • 还要检查您的 index.php 文件并确保 error_reporting 设置为 E_ALL(或您需要的)。
  • log_treshold 设置为4 后,执行以下操作后没有任何反应:log_message('info',print_r($my_var, TRUE)) ?
  • 你有没有试过像这样使用 log_message('info', $my_var)?
  • 我相信我在使“应用程序/日志”文件夹可写时搞砸了,现在它工作正常。对不起,谢谢!
  • 没关系,不客气。我没有考虑这一点,因为您说您之前已经成功使其可写。不过很高兴看到你能解决你的问题。
【解决方案3】:

我认为您正在寻找的答案是: Codeigniter - Developer's Debug Helper

您可以将此文件添加到application/helper 文件夹。然后在application/config/autoload.php 中自动加载vayes_helper 以供通用使用。然后你只需要写:

vdebug($variable); // In Controllers, Models, Libraries, Helpers
<?=vdebug($variable)?> // In View files

【讨论】:

  • 这是一个非常好的帮手。谢谢你。它应该是 // 在查看文件中
  • 您想在活动记录中调试什么? @ankitsuthar
  • 是否可以为活动记录添加尝试、捕获和异常? @YahyaE
【解决方案4】:
log_message('debug',print_r($array_or_object_you_want_to_print,TRUE));

这会将您的数组很好地打印到 log 中。以下是输出示例:

[1] => Array
    (
        [uid] => 10049082
        [phone_id] => 2
        [friend_status] => 0
        [friend_event_hide_status] => 
    )

[2] => Array
    (
        [uid] => 10042768
        [phone_id] => 4
        [friend_status] => 3
    )

[3] => Array
    (
        [uid] => 10078255
        [phone_id] => 6
        [friend_status] => 2
    )

[4] => Array
    (
        [uid] => 10078255
        [phone_id] => -1
        [friend_status] => 1
        [name] => Rajesh 
    )

[5] => Array
    (
        [uid] => 10078255
        [phone_id] => -1
        [friend_status] => 1
        [name] => ritesh kumar
    )

[6] => Array
    (
        [uid] => 10078255
        [phone_id] => -1
        [friend_status] => 1
        [name] => Le
    )

【讨论】:

  • 我也是这样做的。
猜你喜欢
  • 2013-10-28
  • 2014-01-26
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 2020-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多