标签: die

如何用die()包含文件; 功能?

带有die()的file1.php和file2.php; 功能.

include.php:

<? include 'file1.php';
include 'file2.php' ?>
Run Code Online (Sandbox Code Playgroud)

file1.php

<? echo 'included'; die(); ?>
Run Code Online (Sandbox Code Playgroud)

file2.php

<? echo 'not included'; die(); ?>
Run Code Online (Sandbox Code Playgroud)

如何用die()包含这两个文件; 功能?

php file function include die

8
推荐指数
2
解决办法
1万
查看次数

die()会执行ob_end_flush()吗?

我似乎无法在任何地方找到一个好的答案.如果我正在运行输出缓冲,并且a die()被触发,那么它ob_end_flush()也会启动吗?

php die output-buffering

8
推荐指数
1
解决办法
769
查看次数

Perl的Carp模块是否有C等价物?

在我用C完成的一些项目中,我喜欢使用以下类似于Perl的warn和die子例程的宏:

#include <stdio.h>
#include <stdlib.h>

#define warn(...) \
    fprintf(stderr, __VA_ARGS__); \
    fprintf(stderr, " at %s line %d\n", __FILE__, __LINE__)

#define die(...) \
    warn(__VA_ARGS__); \
    exit(0xFF)
Run Code Online (Sandbox Code Playgroud)

有没有像Perl的鲤鱼,呱呱,咯咯和鲤鱼的忏悔子程序那样存在的东西?我想从用户角度报告错误.

如果没有,我知道glibc中有backtrace()和backtrace_symbols()函数,它们与-rdynamic gcc选项一起可以为我提供函数名和代码地址的回溯.但我想要一些更好的东西; 可以访问调用堆栈中的文件,行和函数名称,如Perl的调用者子例程.我可以编写自己的libcarp用于我的c程序.

编辑:2009-10-19

我正在考虑在basename(argv [0])上创建使用gdb的东西,然后处理堆栈跟踪以生成我想要的不同类型的消息.它应该能够确定我是不是在可调试的可执行文件中,还是没有gdb的系统,在这种情况下,carp和cluck会变成警告并且Craok和confess将会死亡.

我之前从未使用过这样的gdb(我只在开始时使用我的程序运行它,而不是在它已经运行时).但我发现glib中的一些函数(g_on_error_stack_trace和stack_trace)看起来非常接近我想要做的事情:它使用参数basename(argv [0])和进程id分配gdb进程,然后写入其stdin(已被重定向到管道)命令"backtrace"后跟"退出".然后它从结果中读取并按照它喜欢的方式解析它.这几乎就是我需要做的.

c perl carp die backtrace

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

如何将die函数的输出重定向到Perl中的文件?

我想将die消息重定向到一个单独的文件,以便我可以稍后比较该文件以确定出错的地方.

但是这段代码给了我错误:

$ cat test.pl
use strict;
use warnings;

my $log = "msglog.log";
die $log "DEAD$!";

$ perl test.pl
Missing comma after first argument to die function at test.pl line 5, near ""DEAD$!";"
Execution of test.pl aborted due to compilation errors.
$ 
Run Code Online (Sandbox Code Playgroud)

我不想2>从来电者那里做一个.有没有办法从脚本中重定向它们?

perl die perl-io

7
推荐指数
3
解决办法
9843
查看次数

单个代码行中的header()+ die()的多个实例

我正在尝试操作PHP脚本,以便重定向到特定的URL,而不是给我一个MySQL错误.所以我离开了......

$qs = mysql_query("SELECT url FROM $table WHERE `id` = $gid;") or die('MySQL error: '.mysql_error());
Run Code Online (Sandbox Code Playgroud)

......对此:

$qs = mysql_query("SELECT url FROM $table WHERE `id` = $gid;") or header("Location: http://www.example.com");
Run Code Online (Sandbox Code Playgroud)

哪个有效,但有两件事与我有关.首先,它默认为302重定向,我更喜欢301重定向.其次,我担心通过从这一行删除die(),重定向后脚本没有正确退出.

现在,我已经在这里完成了一些功课,但是我无法弄清楚是否可以在这一行代码中将die()与header()的两个实例结合起来(即不改变这条特定行的内容) ).

php redirect header die

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

使用PHPUnit忽略exit()和die()

首先,标题会暗示这是这个这个的重复,但由于几个原因,这些答案对我不起作用,即使我最初的问题是相同的.我会解释原因.

我的问题是:我在我的代码中有几次我想发送标题和正文然后终止处理.与其他问题不同,我不能使用return或抛出异常(这些显然是为出于不同目的设计的不同函数而不是退出,这不是错误;它只是在某些特定情况下的早期运行时终止).

仍然,我想编写运行这些方法的单元测试,确保设置了适当的头文件(此处找到解决方案),输出主体是正确的($this->expectOutputString()在测试用例中使用-method 解决),然后继续测试.在这之间,exit意志会发生.

我已经@runInSeparateProcess在PHPUnit中尝试了-annotation,我也检查了test_helpers扩展,它有效,但我不想添加另一个扩展(建议测试也将在生产中运行)本机PHP代码打破了一切.必须有一种更简单的方法而不牺牲最佳实践.

有没有人有这个问题的好方法?

php phpunit exit die

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

PHP die()返回什么

在PHP中die(),当我们使用它时会给出任何回报吗?

php die

6
推荐指数
3
解决办法
3万
查看次数

在perl中使用错误但没有堆栈跟踪的正确方法是什么?

我正在编写一个perl脚本,在我正在检查用户在命令行上提供的选项的部分中,我想退出时出现错误,解释选项有什么问题.在这种情况下,不需要堆栈跟踪与此错误消息一起使用.那么,使用错误消息但没有堆栈跟踪或调试信息的最佳方法是什么?

我尝试过以下方法:

die "Invalid options";
Run Code Online (Sandbox Code Playgroud)

哪个产生

Invalid options at myscript.pl line 49.
Run Code Online (Sandbox Code Playgroud)

然后,我试过了

use Carp;
...
croak "Invalid options";
Run Code Online (Sandbox Code Playgroud)

哪个产生

Invalid options at myscript.pl line 47
    main::prepare_output_directory() called at myscript.pl line 546
Run Code Online (Sandbox Code Playgroud)

那我怎么能Invalid options和别人一起死?

奖金问题:为什么croak告诉我错误是在第47行,当实际呼叫croak是在第49行?

error-handling perl die

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

为什么在使用eval之前我需要本地化$ @?

我知道这$@是一个全局变量的事实,我仍然无法弄清楚为什么我需要在使用eval之前对其进行本地化:

例如:

eval { SOME_FUNC_THAT_MAY_DIE(); };
if ($@) {
  print "An error occured!\n";
}
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一可能的事情是,如果某个信号处理程序会die在我尝试阅读的同时调用,$@我在这里缺少什么?

perl eval exception die

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

如果每个人都使用的调试代码的机制覆盖了它,您如何捕获有缺陷的 sig die 处理程序?

假设您使用 cpan(或其他外部)模块,就像我们在这里虚构的那样 Stupid::CPAN::Module::OfSatan

package Stupid::CPAN::Module::OfSatan {
  BEGIN { $SIG{__DIE__} = sub { print STDERR "ERROR"; exit; }; }
}
Run Code Online (Sandbox Code Playgroud)

现在在你的代码中你有一些非常无辜的东西,

package main {
  eval { die 42 };
}
Run Code Online (Sandbox Code Playgroud)

这将触发您的错误信号处理程序。你会想知道那个有问题的信号处理程序是在哪里定义的,所以你会做一些合乎逻辑的事情,比如插入一个Carp::Always

package main {
  use Carp::Always;
  eval { die 42 };
}
Run Code Online (Sandbox Code Playgroud)

Carp::Always然后将覆盖有问题的信号处理程序,您的代码将神奇地工作。您如何调试引入错误信号处理程序的代码?

perl signals eval carp die

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