我有一个大型程序,用C#编写并在使用Mono的Linux系统上运行,偶尔会崩溃并导致mono.bin
进程转储核心.
我运行gdb
了一些核心转储文件,但它不是很有用,因为回溯没有C#函数的名称.根据这个讨论,我发现:
它不会起作用.构造托管堆栈跟踪所需的信息包含在运行时数据结构中,并且仅在程序运行时可用.您可以AOT您的应用程序,然后您将有更多可用的堆栈跟踪.
所以我做了.我AOT编译了所有的C#DLL和EXE文件.使用--aot=write-symbols
选项.对于我的程序的测试版本,故意崩溃,所以我可以检查这是否使回溯更有用.到目前为止,它还没有.主线程的回溯看起来像:
#0 0xb7fc8402 in __kernel_vsyscall ()
#1 0x00556df0 in raise () from /lib/libc.so.6
#2 0x00558701 in abort () from /lib/libc.so.6
#3 0x080e59b5 in ?? ()
Run Code Online (Sandbox Code Playgroud)
另一个主题有:
#0 0xb7fc8402 in __kernel_vsyscall ()
#1 0x005f6753 in poll () from /lib/libc.so.6
#2 0xb6f735a7 in Mono_Unix_UnixSignal_WaitAny ()
from /opt/novell/mono/lib/libMonoPosixHelper.so
#3 0xb5416578 in ?? ()
Run Code Online (Sandbox Code Playgroud)
和其他线程似乎已经空闲状态(nanosleep
,pthread_cond_timedwait
,pthread_cond_wait
,sem_timedwait
,或sem_wait
).但所有回溯的共同点是它们以令人讨厌的方式结束in ?? ()
,并且从不列出"我的"代码中的任何函数名称.
我认为这与gdb
它启动时打印的一些消息有关; 例如,
Reading symbols from /xyz/mono/log4net.dll.so...(no debugging symbols found)...done.
Loaded symbols for /xyz/mono/log4net.dll.so
Reading symbols from /xyz/mono/Contoso.Util.dll.so...(no debugging symbols found)...done.
Loaded symbols for /xyz/mono/Contoso.Util.dll.so
Reading symbols from /xyz/mono/Contoso.Printing.dll.so...(no debugging symbols found)...done.
Loaded symbols for /xyz/mono/Contoso.Printing.dll.so
Reading symbols from /xyz/mono/Contoso.LegacyDataConverter.dll.so...(no debugging symbols found)...done.
Loaded symbols for /xyz/mono/Contoso.LegacyDataConverter.dll.so
Run Code Online (Sandbox Code Playgroud)
为什么所有*.dll.so
文件都"找不到调试符号"?DLL本身是否需要以"调试"模式或其他方式构建?
更一般地说,有没有办法从Mono核心转储中获取托管堆栈跟踪?(不使用mono_pmip
,因为只有在进程运行时才可用.)
我对单声道一无所知。但是从提供的堆栈跟踪来看......它显示无法获取单声道运行时的符号。这是使用 gdb 进行调试的链接。你需要带有符号的 mono-runtime,即so
带有符号的库...所以你需要安装mono-runtime-dbg ...你可以使用 apt-get、yum、wget 等工具来安装它。
我已经安装了 unbuntu..它显示以下输出....
$ apt-cache search mono-runtime-dbg
mono-runtime-dbg - Mono runtime, debugging symbols
Then
$ apt-get install mono-runtime-dbg
Run Code Online (Sandbox Code Playgroud)
希望您觉得它有帮助...
归档时间: |
|
查看次数: |
1275 次 |
最近记录: |