问题标签 [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.
perl - 为什么我应该在 Perl 中使用 Carp 而不是警告?
人们不断给我举鲤鱼的例子而不是警告。为什么?是什么让鲤鱼比警告更好?
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 进程,然后写入它的标准输入 (已被重定向到管道)命令“回溯”后跟“退出”。然后它从结果中读取并以它喜欢的方式解析它。这几乎正是我需要做的。
perl - 如何在 Perl 应用程序中用 'confess' 替换所有 'die'?
我正在一个大型 Perl 应用程序中工作,并且希望每次调用 'die' 时都获得堆栈跟踪。我知道Carp 模块,但我不希望用 'confess' 搜索/替换 'die' 的每个实例。此外,我想要 Perl 模块或 Perl 解释器本身中的错误的完整堆栈跟踪,显然我不能将它们更改为使用 Carp。
那么,有没有办法让我在运行时修改“die”函数,使其表现得像“confess”?或者,是否有一个 Perl 解释器设置会从“死”中抛出完整的堆栈跟踪?
php - 使用 Carp 查找/替换
我使用 carp free 3.6.4 将一些 wordpress rss 提要的内容显示到网页上,但总是存在编码错误(每当博客用户使用弯引号时,我都会收到菱形问题(U+DDDF),而且毕竟问号后跟空格)。我进入 carp.php 寻找输出,所以我可以做一个 str_replace('U+DDDF','',$carpoutput) 但是当我这样做时,我无法改变任何东西。在几乎所有情况下,钻石都会替换我想要的东西,但完全无关紧要,所以我认为只需用 '' 替换它们就可以了。
他们的文档对我来说真的很难通过,有使用它经验的人知道如何完成吗?提前致谢。
perl - Carp::carp 在 Perl 中做了什么?
谁能carp
用示例 Perl 代码向我解释一下子程序?
perl - 为什么不证明接受 -MCarp=verbose?
我运行了这个测试脚本:
使用命令行prove -MCarp=verbose -v foo.pl
,并得到以下错误:
如果我使用它运行它perl -MCarp=verbose foo.pl
没有问题。是什么导致prove
拒绝冗长的鲤鱼?croak
当我的测试没有全局替换croak
to时,如何从我的测试中获得完整的调用堆栈confess
?
perl - Carp/Croak、Cluck/Confess 和详细选项之间有什么区别?
我没有太多使用鲤鱼,因为我通常自己滚动。但是,本着与核心模块保持一致的精神,我现在正在使用它。然而,它似乎比警告/死亡好不了多少。
此外,咯咯/坦白/冗长甚至可以做什么?我已经运行了这个简短的脚本来了解输出的样子(因为 Carp 文档不这样做)。它在任何运行中看起来都完全相同(除了随机字符串)。
更新:用包名更新了脚本,它确实有所作为。但是,Carp 在日志信息方面似乎仍然非常基础,并且不支持 Web 输出。我想我会看看其他的,比如 CGI::Carp、Log::Output 和 Log::Log4Perl。
perl - 从 Moose BUILD 方法中呱呱叫
BUILD
如果方法失败,我希望我的班级爆炸。但是,如果我croak
用来处理错误,则会从Class/MOP/Method.pm
而不是调用者的代码中报告错误。(也就是说,实例化对象的调用者。) IOW,croak
在调用树上没有足够远。
看哪:
实例化Test
结果:
Carp.pm
应该注意调用的包变量@CARP_NOT
来知道要避免哪些包,但它似乎只注意列表中的一项。例如,如果我将此添加到我的Test.pm
:
那么结果是:
所以我也应该将它添加到数组中,对吗?
那么结果还是:
Moose::Object
似乎不受影响。
一段时间以来,我一直在努力解决这个问题,但似乎无法弄清楚是什么搞砸了。
谢谢。
perl - perl Carp 模块中的无限循环
我们有一些代码可以捕获异常,记录消息,然后调用Carp::longmess
以获取堆栈跟踪。
因此,我们正在做的简化视图是:
logwrite函数本质上是:
但在我看到的日志中:
来自模块的一系列警告会Carp/Heavy.pm
无限地重复一遍又一遍,炸毁日志。所以我们最终将其杀死。这些警告看起来像是由对 的调用触发的Carp::longmess
。这里的另一个有趣的事情是$@
变量似乎只是at
。它是at
由模具添加的,但没有实际的错误消息或行号。
有没有人见过这个或者知道这个Carp
包裹是怎么回事?这种情况很少见,但在过去一个月左右发生了几次,我们每天都有数百个这样的工作在运行。