如何调试CodeIgniter应用程序?

3

我按照教程学习如何使用Code Igniter构建PHP/MySQL应用程序,但是完成后应用程序没有错误信息而无法运行。我使用的是TextMate而不是完整的IDE。

大多数使用Code Igniter的开发人员如何调试他们的应用程序?在框架中是否有将错误和堆栈跟踪冒泡到浏览器会话中的功能?

我现在想解决的具体问题似乎与数据库有关。我配置了我的数据库,设置了autoload.php,并创建了一个控制器和模型来处理表数据以及一个视图来呈现它。从我的accounts_model.php文件中:

 public function getData()  
 {
     //Query the data table for every record and row
     $query = $this->db->get('accounts');

     if ($query->num_rows() > 0)
     {
         show_error('Database is empty!');
     }
     else
     {
         return $query->result();
     }
 }

当我运行应用程序时,我看到“遇到错误\n数据库为空!”。由于我知道数据库不为空且配置正确,我需要框架提供一些提示,告诉我它是否连接到了数据库,或者查询为空的原因是什么。
7个回答

5
一个好的实践是将关键代码放入try/catch块中,以便可以处理异常,并记录错误的堆栈跟踪信息。在我的最近的经验中,我使用了 CodeIgniter 提供的 show_error() 函数来调试和捕获代码中的错误。以下是一个示例:
public function getData()  
 {
     //Query the data table for every record and row
     try{
        $query = $this->db->get('accounts');

        if ($query->num_rows() > 0)
        {
            show_error('Database is empty!');
        }
       else
       {
           return $query->result();
       }
     } catch(Exception $e){
        log_message('debug',$e->getMessage()); // use codeigniters built in logging library
        show_error($e->getMessage()); // or echo $e->getMessage()
      }
 }

PHP异常类提供了各种方法来帮助调试您的错误。http://www.php.net/manual/en/class.exception.php


4

1
更新(两年后):PHP Unit 与 Selenium http://seleniumhq.org(功能测试)非常兼容。 - Wouter Dorgelo
似乎链接已失效:http://www.lastcraft.com/first_test_tutorial.php - bg17aw

3
如果您还没有看过称为Firebug的火狐浏览器的惊人Web开发扩展程序,那么您应该去看一下!
Firebug有一个名为FirePHP的扩展程序,可以帮助您调试PHP应用程序。有人还制作了一个适用于CodeIgniter的插件FireIgnition
它使您能够记录变量等内容,从而更容易地查看页面执行时发生的情况。

3
我发现当我需要在屏幕上查看变量、对象、数组或资源时,dbug非常有帮助:
example nested arrays with mixed keys 此文介绍如何将它集成到CodeIgniter中,详见这里

1
你使用了 if ($query->num_rows() > 0)。如果返回的行数大于0,这将会打印一个错误信息。


好的,radda radda!谢谢!我从教程中复制了那段代码,却忽略了那个细节。这让我解决了一个错误,但又遇到了另一个。我猜想大多数人很快就会转向使用完整的IDE,以便查看堆栈跟踪、逐步执行代码等功能。 - user56512
我不使用任何允许这些功能的集成开发环境(至少对于 PHP 来说是这样)。:-P - gen_Eric
1
已经解决了下一个错误,但还是谢谢关心。以我目前的经验水平,我无法想象只使用TextMate开发大型应用程序。我熟悉FlexUnit,因此有一些单元测试经验;因此,我选择了Enrico Pallazzo的建议。多年前,我设置了Eclipse和PDT并测试了Xdebug。与当时熟悉的Visual Studio等工具相比,这一切都很繁琐。我希望在深入PHP开发时能找到一些好的实践和工具。 - user56512

1

我使用VS.PHP,这是一个Visual Studio的插件,用于我的PHP工作。非常好用。语法高亮,自动完成,在同一会话中调试PHP和JavaScript等功能一应俱全。


-1

只是好奇:

$query->num_rows() > 0

如果它成功了,那就意味着有一些结果...
我会做这样的事情...
    function get_data()
    {


    $results = $this->db->get("tble");

    if($results->num_rows()>0)
    {

    return $results->result_array();

    }
    else
    {
    return array();

    }

}

在控制器中

if(empty( $this->model->get_data() ))
{

//do something with data
}
else
{

//no data
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接