我有一个带有分段错误的小,我想跟踪它(这是一个例子,为了测试目的手动添加了分段错误,在实际的项目中,我不知道剩下的分段错误)。我决定使用,这样我就可以创建微型文件,然后跟踪我的计算机上的问题。我在windows中成功地完成了这个示例项目。但是,我不能打开Linux中的dmp文件来调试它们。
我尝试过使用,正如在一节中解释的那样,在Linux上使用minidump-2核。但是,当我运行这个命令时,我会得到以下错误:This minidump was not generated by Linux or NaCl.显然是使用Ubuntu18.04的同一台计算机来运行生成dmp文件的代码并将其转换为一
最近,我尝试在我的Linux中安装CosmoMC,我遵循了一些教程,例如,但在安装完所有需要的软件后,我只需运行以下代码:
cd CosmoMC
make all
./cosmomc test.ini
但是出现了错误:"./cosmomc: Relink“/intel/compilers_and_libraries_2017.7.259/linux/compiler/lib/intel64_lin/libirc.so' with/lib/x86_64-linux-gnu/libc.so.6‘for IFUNC symbol’`memmove‘分段错误(核心转储)
下面的代码为我创建了一个分段错误--这是一个错误吗?如果是,在哪个组件中?
using DataFrames
function test()
Threads.@threads for i in 1:50
df = DataFrame()
df.foo = 1
end
end
test()
(需要启动朱莉娅并支持多线程以使其工作,如JULIA_NUM_THREADS=50; julia)
只有当迭代/线程的次数足够高(例如50次)时,它才会产生分段错误。对于较低的数量,它只是零星地/从不这样做。
我的环境:
julia> versioninf
在32位Linux(或windows等)中,用户进程不能访问内核地址空间。例如0xC0100000 ( 3:1拆分,如linux)或0x80E00000 (1:1拆分,如windows)。
我知道用户应用程序中的以下代码将引发分段错误。
int* a = 0xC0100000;
int b = *a;
然而,我不是100%确定真正的原因。我假设,如果我们尝试执行上面的代码,MMU将会抛出segfault,因为虚拟地址0xC0100000的相应页表条目具有管理器位标志。这是100%正确的吗?如果这是正确的,操作系统如何阻止进程通过TLB缓存访问内核虚拟地址?
我还认为,使用分段,可以实现相同的限