问题标签 [carp]

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 投票
4 回答
9838 浏览

perl - 为什么我应该在 Perl 中使用 Carp 而不是警告?

人们不断给我举鲤鱼的例子而不是警告。为什么?是什么让鲤鱼比警告更好?

0 投票
4 回答
496 浏览

c - Perl 的 Carp 模块有对应的 C 语言吗?

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

是否存在像 Perl 的Carp中的 carp、croak、cluck 和 admission 子例程?我想从用户的角度报告错误。

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

编辑:2009-10-19

我正在考虑创建一些在 basename(argv[0]) 上可用时使用 gdb 的东西,然后处理堆栈跟踪以生成我想要的不同类型的消息。它应该能够确定我是否不在可调试的可执行文件中,或者没有 gdb 的系统,在这种情况下,carp 和 cluck 将成为警告,而 craok 和承认将成为死亡。

我以前从未像这样使用过 gdb(我只在我的程序开始时运行它,而不是在它已经运行时)。但是我在 glib 中发现了一些函数(g_on_error_stack_trace 和 stack_trace),它们看起来非常接近我想要做的:它使用参数 basename(argv[0]) 和进程 id 分叉一个 gdb 进程,然后写入它的标准输入 (已被重定向到管道)命令“回溯”后跟“退出”。然后它从结果中读取并以它喜欢的方式解析它。这几乎正​​是我需要做的。

0 投票
4 回答
3652 浏览

perl - 如何在 Perl 应用程序中用 'confess' 替换所有 'die'?

我正在一个大型 Perl 应用程序中工作,并且希望每次调用 'die' 时都获得堆栈跟踪。我知道Carp 模块,但我不希望用 'confess' 搜索/替换 'die' 的每个实例。此外,我想要 Perl 模块或 Perl 解释器本身中的错误的完整堆栈跟踪,显然我不能将它们更改为使用 Carp。

那么,有没有办法让我在运行时修改“die”函数,使其表现得像“confess”?或者,是否有一个 Perl 解释器设置会从“死”中抛出完整的堆栈跟踪?

0 投票
1 回答
49 浏览

php - 使用 Carp 查找/替换

我使用 carp free 3.6.4 将一些 wordpress rss 提要的内容显示到网页上,但总是存在编码错误(每当博客用户使用弯引号时,我都会收到菱形问题(U+DDDF),而且毕竟问号后跟空格)。我进入 carp.php 寻找输出,所以我可以做一个 str_replace('U+DDDF','',$carpoutput) 但是当我这样做时,我无法改变任何东西。在几乎所有情况下,钻石都会替换我想要的东西,但完全无关紧要,所以我认为只需用 '' 替换它们就可以了。

他们的文档对我来说真的很难通过,有使用它经验的人知道如何完成吗?提前致谢。

0 投票
2 回答
890 浏览

perl - Carp::carp 在 Perl 中做了什么?

谁能carp用示例 Perl 代码向我解释一下子程序?

0 投票
2 回答
569 浏览

perl - 如何在 Perl 中将一些特定的鲤鱼变成呱呱叫?

我试图捕捉鲤鱼警告:

使用eval {}但它不起作用,所以我查看了eval文档,发现eval它只捕获语法错误、运行时错误或执行的死亡语句。

我怎么能抓住鲤鱼警告?

0 投票
3 回答
422 浏览

perl - 为什么不证明接受 -MCarp=verbose?

我运行了这个测试脚本:

使用命令行prove -MCarp=verbose -v foo.pl,并得到以下错误:

如果我使用它运行它perl -MCarp=verbose foo.pl没有问题。是什么导致prove拒绝冗长的鲤鱼?croak当我的测试没有全局替换croakto时,如何从我的测试中获得完整的调用堆栈confess

0 投票
2 回答
29993 浏览

perl - Carp/Croak、Cluck/Confess 和详细选项之间有什么区别?

我没有太多使用鲤鱼,因为我通常自己滚动。但是,本着与核心模块保持一致的精神,我现在正在使用它。然而,它似乎比警告/死亡好不了多少。

此外,咯咯/坦白/冗长甚至可以做什么?我已经运行了这个简短的脚本来了解输出的样子(因为 Carp 文档不这样做)。它在任何运行中看起来都完全相同(除了随机字符串)。

更新:用包名更新了脚本,它确实有所作为。但是,Carp 在日志信息方面似乎仍然非常基础,并且不支持 Web 输出。我想我会看看其他的,比如 CGI::Carp、Log::Output 和 Log::Log4Perl。

0 投票
1 回答
618 浏览

perl - 从 Moose BUILD 方法中呱呱叫

BUILD如果方法失败,我希望我的班级爆炸。但是,如果我croak用来处理错误,则会从Class/MOP/Method.pm而不是调用者的代码中报告错误。(也就是说,实例化对象的调用者。) IOW,croak在调用树上没有足够远。

看哪:

实例化Test结果:

Carp.pm应该注意调用的包变量@CARP_NOT来知道要避免哪些包,但它似乎只注意列表中的一项。例如,如果我将此添加到我的Test.pm

那么结果是:

所以我也应该将它添加数组中,对吗?

那么结果还是:

Moose::Object似乎不受影响。

一段时间以来,我一直在努力解决这个问题,但似乎无法弄清楚是什么搞砸了。

谢谢。

0 投票
2 回答
466 浏览

perl - perl Carp 模块中的无限循环

我们有一些代码可以捕获异常,记录消息,然后调用Carp::longmess以获取堆栈跟踪。

因此,我们正在做的简化视图是:

logwrite函数本质上是:

但在我看到的日志中:

来自模块的一系列警告会Carp/Heavy.pm无限地重复一遍又一遍,炸毁日志。所以我们最终将其杀死。这些警告看起来像是由对 的调用触发的Carp::longmess。这里的另一个有趣的事情是$@变量似乎只是at。它是at由模具添加的,但没有实际的错误消息或行号。

有没有人见过这个或者知道这个Carp包裹是怎么回事?这种情况很少见,但在过去一个月左右发生了几次,我们每天都有数百个这样的工作在运行。