- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
可能不太可能,但我想知道以前是否有人见过这样的错误,因为我无法在生产环境之外重现它。本质上的情况是这样的:
My::Budget::Module
的模块(为简单起见重命名),它负责更新应用程序中给定对象的“预算”My::Budget::Module
使用了一个名为 My::Bulk::Update::Module
的 Moo
对象它执行以下操作:
My::Bulk::Update::Module
将执行更新并将已更新的行标记为“陈旧”,这样它们就不会被缓存错误似乎总是发生在添加要更新的行之后但实际应用更新的代码返回之前的某处。
如果您查看我在下面包含的堆栈跟踪,您可以看到错误采用以下形式
Attempt to bless into a reference at...
发生这种情况的点是 Moo/Object.pm
的构造函数,它是 Moo
的 Version 2.003002
来自 cpan
(参见 here)。
Attempt to bless into a reference at /path/to/module/from/cpan/Moo/Object.pm line 25 at /path/to/module/from/cpan/Moo/Object.pm line 25.
Moo::Object::new(My::Bulk::Update::Module=HASH(0xf784b50)) called at (eval 1808) line 28
MongoDB::Collection::new(My::Bulk::Update::Module=HASH(0xf784b50)) called at /path/to/my/bulk/update/module line XXXX
My::Bulk::Update::Module::apply_bulk_update(My::Bulk::Update::Module=HASH(0xf784b50)) called at /path/to/my/budget/module line XXXX
My::Budget::Module::update_budget(My::Budget::Module=HASH(0xf699a38)) called at /path/to/my/budget/module line XXXX
通过堆栈跟踪向后移动导致 MongoDB::Collection
& 这是事情开始变得非常奇怪的地方。
MongoDB::Collection
也是一个 cpan
模块,但此时出现的模块各不相同,我在这里看不到模式,除了它总是一个Moo
对象。此外,我不确定为什么要实例化此模块,因为在提到的行中没有调用 MongoDB::Collection::new
。
此外,从堆栈跟踪来看,MongoDB::Collection
和 Moo::Object
被实例化,第一个参数是 My::Bulk::更新::模块=HASH(0xf784b50)
。考虑到应用程序逻辑,我认为 MongoDB::Collection
不应在此处实例化,也不应将 My::Bulk::Update::Module
传递给 MongoDB: :Collection
完全没有。
除了它是一个 Moo
对象之外,My::Bulk::Update::Module
不扩展任何其他模块并且被设计成一个独立的“实用程序”模块。它在整个应用程序中仅在一个地方使用。
有没有人以前见过类似的东西?
编辑: 添加更多代码 - apply_bulk_update
根本没有做太多事情。这里没有对 MongoDB::Collection
的调用,MongoDB::Collection
只是“碰巧”成为这个特定示例中堆栈跟踪中包含的模块。这并不总是 MongoDB::Collection
- 我还看到了 MongoDB::Timestamp
、MongoDB::Cursor
、Search: :Elasticsearch::Serializer::JSON
, Search::Elasticsearch::Logger::LogAny
等等
sub apply_bulk_update
{
my $self = shift;
my ($db) = @_; # wrapper around DBI module
my $query = $self->_generate_query(); # string UPDATE table SET...
my $params = $self->_params; # arrayref
return undef unless $params && scalar @$params;
$db->do($query, undef, @$params);
}
代码有时会在调用 apply_bulk_update
时立即终止,有时会在调用 _generate_query
时终止,有时会在最后一行执行查询后...
最佳答案
以防万一有人感兴趣...
在进一步调试之后,错误被追踪到 My::Bulk::Update::Module::apply_bulk_update
或 My::Bulk::Update: :Module::_generate_query
被调用,但记录这些子例程中的代码确定它们没有按预期执行。
为了确定发生了什么,B::Deparse
用于重建这些子程序主体的源代码(或者至少是位于这些子程序所在内存地址的源代码)指点)
在使用这个库之后,例如
B::Deparse->new->coderef2text(\&My::Bulk::Update::_generate_query)
当 My::Bulk::Update::_generate_query
指向包含完全不同的内容(即 MongoDB::Collection::新的
等)。
这个问题似乎已经通过 Sub::Defer
模块(它是 Moo
的依赖项)中的以下提交在上游解决了。
https://github.com/moose/Sub-Quote/commit/4a38f034366e79b76d29fec903d8e8d02ee01896
如果您阅读提交摘要,您可以看到所做的更改:
Prevent defer_info and undefer_sub from operating on expired subs. Validate that the arguments to defer_info and undefer_sub refer to actual live subs. Use the weak refs we are storing to the deferred and undeferred subs to make sure the original subs are still alive, and we aren't returning data related to a reused memory address. Also make sure we don't expire data related to unnamed subs. Since the user can capture the undeferred sub via undefer_sub, we can't track the expiry without using a fieldhash. For now, avoid introducing that complexity, since the amount we leak should not be that great.
升级 Sub::Defer
的版本似乎已经解决了这个问题。
关于mongodb - 神秘的 Moo (Perl) 错误 "Attempt to bless into a reference at...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49727740/
我正在尝试更新我的 jtable(更改值并按 Enter 键),但出现错误。由于大小原因,错误未完整。我认为其余部分只是 c3p0 池连接工具生成的不相关信息。 假设 起初,我认为这可能是 c3p0
每当我有两个水平并排的元素并指定了右和/或左填充和/或边距时,元素之间通常会在我指定的上方和上方有空格。我希望有人能告诉我如何消除该空间(没有像负边距这样的笨拙东西)。 请注意:我并不是在寻找替代的多
String[] parts = msg.split(" +\n?"); String room = parts[0]; System.out.println(msg); Sy
我知道“一定有什么东西被改变了”,但我的代码似乎在一夜之间无缘无故地崩溃了。 我的服务器目录结构是这样的: / /scripts /audit /other_things 我在“scripts”文件夹
我正在尝试了解 GCM 的工作原理。为此,我复制/粘贴 http://developer.android.com/ 的代码在“实现 GCM 客户端”部分中提出。 从服务器发送消息是可行的,但是当我的客
在生成随机整数时,我发现了一些有趣的事情(至少对我而言),我无法向自己解释,所以我想我会把它贴在这里。 我的需求很简单:我要生成随机积分 (Int32) ID 并旨在最大程度地减少冲突。生成时间不是问
在这里https://stackoverflow.com/a/19915925/4673197我了解到我可以通过设置 IFS 将字符串拆分为数组。 在这里https://stackoverflow.c
我现在正在为我的 CS 测试学习,并尝试编写代码,以明文形式给出整个 IMDB 数据库,找到电影中共同点最多的 Actor 。我已经差不多完成了,只是不断遇到一个奇怪的 KeyError。这是我的代码
在 Android 平台上开发了几个月之后,我仍然有一个悬而未决的问题。很久以前,我注意到我有一个 Activity 不符合应用程序主题的其余部分。这意味着默认情况下,Activity 的字体颜色是白
本周,我注意到我的团队 Azure 门户上有一个持续的网络作业。 团队中没有人表示他们已经部署了它,或者熟悉它。我找到了这个博客: https://azure.microsoft.com/en-ca/
所以我正在制作一个小型闲置游戏,我的部分努力是格式化所有数字,以便它们之间有逗号(出于美观目的)。我成功地让我的货币 Energy 带有这些逗号,但我很难添加其他变量。我用了num.toLocaleS
我遇到了一个我以前从未见过的奇怪问题,我认为它一定是一些我在代码中没有看到的简单问题。 我有一个项目,其中定义了 2 个 Windows 服务。一个我称为 DataSyncService,另一个称为
我有这个jsfiddle一次有效。 function toggle_off(itemID){ alert(itemID+'->'+document.getElementById(itemID).g
更新:已解决,我是白痴,谢谢大家! Okay little bit weird.. I just created a layout file for list items, I can see it
问题:这段代码究竟在做什么? 另外:“w”的使用方式是否是某种现有算法?我试图弄清楚函数的意图,或者至少描述它产生的数字种类。 上下文:我正在查看 Martin O'Leary 的“Fantasy M
你能帮帮我吗?我正在将自己传递给它自己的纯虚函数。 n->dataCallback(handler, n, hangup); 其中 n 是我的类指针,dataCallback 是它自己的(纯)虚函数(
我知道这里有数百万篇关于这个异常(exception)的帖子,但我不明白这里的这个。我有一个极端简单的示例管道服务: [ServiceContract] public interface ISRARi
此代码有效,但它如何不实际调用任何列出的方法。它有效,但它的工作原理和原因似乎几乎是神奇的。我实际上从未调用过 Equals、GetHashCode 或 Compare,但代码有效。我也从不在实现两个
警告: Element 'TextStyle' from SDK library 'ui.dart' is implicitly hidden by 'text_style.dart'. 代码摘录:
我有一个似乎无法解开的谜。我有这个非常简单的单元测试,它使用了一个非常简单的自定义属性。该属性仅添加到甚至未实例化的 1 个类。我计算属性被构建的次数。由于类 MyDummyClass 上的属性,我希
我是一名优秀的程序员,十分优秀!