我有类似下面的代码,它在Mono运行时本机代码中经常是SIGSEV:
XDocument doc = myHelperFunction(...);
if(doc == null)return;
var reportBlocks = doc.Descendants ("ReportBlocks");
if(reportBlocks.Count() == 0){
//log it
return;
}
int batchSize = (int)reportBlocks.Attributes("numCols").First();
我得到的信息是:
Native stacktrace:
/usr/bin/mono() [0x4b73d8]
/usr/bin/mono() [0x5073d8]
/usr/bin/mono() [0x4273d8]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x10340) [0x7fb8b876b340]
/usr/bin/mono() [0x5073d8]
/usr/bin/mono() [0x4273d8]
/usr/bin/mono() [0x5073d8]
/usr/bin/mono() [0x4273d8]
/usr/bin/mono() [0x5073d8]
/usr/bin/mono() [0x4273d8]
/usr/bin/mono() [0x5073d8]
/usr/bin/mono() [0x4273d8]
/usr/bin/mono() [0x5073d8]
[0x41f1a660]
Debug info from gdb:
Could not attach to process. ...
=================================
Got a SIGSEGV while exexuting native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================
(必须手工复制,所以0xNNN数字并不完全准确。)
我在以上所有方面都有断点。处理reportBlocks.Count()
部分时,它相当可靠地崩溃。有时它通过它很好,然后触发第二个数据查询。
这一切都来自MonoDevelop。如果我用ctrl-F5运行,而不是F5,它永远不会遇到问题。如果我删除所有断点并使用F5,它也永远不会遇到问题。
如果我在上面的函数中设置了几个连续的断点,我也可以让它发生。
所以我不认为这是一个特定的LINQ调用,或类似的东西。另一方面,堆栈跟踪始终相同。
这有点像潜在的计时问题(即另一个线程在调试器中暂停一个线程时继续运行),尤其是因为pthreads是堆栈跟踪中唯一有用的信息。但我无法发现任何事情,而且我没有进一步追踪它的想法。
如果它只是一个只在设置断点时才会发生的单声道运行时错误,我不想花更多的时间在这上面!
版本:
=== MonoDevelop ===
版本4.0.12 运行时:Mono 3.2.8(Debian 3.2.8 + dfsg-4ubuntu1)(64位)GTK 2.24.23 GTK#(2.12.0.0)
===建立信息===
Git修订版:建造日期:2014-01-08 14:59:33 + 0000
使用Linux,Mint 17。
System.Xml和System.Xml.Linq都是版本4.0.0.0(虽然在linq调用上设置断点时我似乎注意到它可能是巧合。)