动机我正在努力提高对SIGBUSerrorinXwayland的理解。自2018年2月20日左右以来,FedoraLinux的一些用户已经看到了这一点,这些用户使用Xwayland1.19.6-5.fc27.x86_64和Linux内核4.15.3-300.fc27.x86-64。可悲的是我没有kernel"segfault"logmessage(或SIGBUS的等效项)。Xwayland有一些毫无意义的代码,可以捕获致命信号。但是我可以通过调试coredump看到siginfo,这似乎差不多。定义我了解当虚拟内存的页面在RAM中不可用并且必须从磁盘读取时会发生“主要页面错误”。我想我
几天来,我一直在处理我的应用程序在嵌入式ArmLinux平台上运行的问题。不幸的是,该平台阻止我使用任何常用的有用工具来查找确切的问题。在运行Linux的PC上运行相同的代码时,我没有得到这样的错误。在下面的示例中,我可以通过取消对字符串、列表或vector行的注释来可靠地重现问题。留下他们的评论会导致应用程序运行完成。我预计有什么东西正在破坏堆,但我看不到什么?该程序将运行几秒钟,然后出现段错误。代码是使用arm-linux交叉编译器编译的:arm-linux-g++-Wall-otestfault.cpp-ldl-lpthreadarm-linux-striptest非常感谢任何想
几天来,我一直在处理我的应用程序在嵌入式ArmLinux平台上运行的问题。不幸的是,该平台阻止我使用任何常用的有用工具来查找确切的问题。在运行Linux的PC上运行相同的代码时,我没有得到这样的错误。在下面的示例中,我可以通过取消对字符串、列表或vector行的注释来可靠地重现问题。留下他们的评论会导致应用程序运行完成。我预计有什么东西正在破坏堆,但我看不到什么?该程序将运行几秒钟,然后出现段错误。代码是使用arm-linux交叉编译器编译的:arm-linux-g++-Wall-otestfault.cpp-ldl-lpthreadarm-linux-striptest非常感谢任何想
我想知道是否有一种方法可以在Linux中对每个页面进行写保护进程的地址空间(从进程本身的内部,通过mprotect())。所谓“每一页”,我的意思是可能被普通程序写入的进程的地址空间在用户模式下运行的程序——所以,程序文本,常量,全局变量和堆——但我对常量很满意,全局变量和堆。我不想对堆栈进行写保护——那似乎是个坏主意。一个问题是不知道从哪里开始写保护内存。查看/proc/pid/maps,它显示了内存的各个部分在用于给定的pid时,它们似乎总是以地址开头0x08048000,带有程序文本。(在Linux中,据我所知,进程的内存与程序文本一起布置在底部,然后是上面的常量,然后是全局变量
我想知道是否有一种方法可以在Linux中对每个页面进行写保护进程的地址空间(从进程本身的内部,通过mprotect())。所谓“每一页”,我的意思是可能被普通程序写入的进程的地址空间在用户模式下运行的程序——所以,程序文本,常量,全局变量和堆——但我对常量很满意,全局变量和堆。我不想对堆栈进行写保护——那似乎是个坏主意。一个问题是不知道从哪里开始写保护内存。查看/proc/pid/maps,它显示了内存的各个部分在用于给定的pid时,它们似乎总是以地址开头0x08048000,带有程序文本。(在Linux中,据我所知,进程的内存与程序文本一起布置在底部,然后是上面的常量,然后是全局变量
我正在为Linux上的(pthread)多线程C++程序进行调试。当线程数较小时,如1、2、3,效果很好。当线程数增加时,我收到SIGSEGV(段错误,UNIX信号11)。但是,当我将线程数增加到4以上时,错误有时会出现有时会消失。我用了valgrind,我得到了==29655==进程以信号11(SIGSEGV)的默认操作终止==29655==访问不在地址0xFFFFFFFFFFFFFFFF8的映射区域内==29655==在0x3AEB69CA3E:std::string::assign(std::stringconst&)(在/usr/lib64/libstdc++.so.6.0.8
我正在为Linux上的(pthread)多线程C++程序进行调试。当线程数较小时,如1、2、3,效果很好。当线程数增加时,我收到SIGSEGV(段错误,UNIX信号11)。但是,当我将线程数增加到4以上时,错误有时会出现有时会消失。我用了valgrind,我得到了==29655==进程以信号11(SIGSEGV)的默认操作终止==29655==访问不在地址0xFFFFFFFFFFFFFFFF8的映射区域内==29655==在0x3AEB69CA3E:std::string::assign(std::stringconst&)(在/usr/lib64/libstdc++.so.6.0.8
错误现象:ffmpeg读取视频流时,直接报错返回“Segmentationfault(coredumped)”;排查中发现是avformat_open_input函数错误,返回的是-1330794744,而不是代表正确的0。这个问题困扰了我很久,网上也搜了很久,但解决办法中都没提及ffmpeg的版本,在试错很多次后,发现了问题的所在,是代码与ffmpeg的版本有些不兼容的问题,那就直接切入主题。这次我试了ffmpeg的两个大版本:(一定对照自己的版本来看)ffmpeg-n4.4-latest-linux64-gpl-shared-4.4.tar.xz(这是github上别人编译好的)(在ubu
错误现象:ffmpeg读取视频流时,直接报错返回“Segmentationfault(coredumped)”;排查中发现是avformat_open_input函数错误,返回的是-1330794744,而不是代表正确的0。这个问题困扰了我很久,网上也搜了很久,但解决办法中都没提及ffmpeg的版本,在试错很多次后,发现了问题的所在,是代码与ffmpeg的版本有些不兼容的问题,那就直接切入主题。这次我试了ffmpeg的两个大版本:(一定对照自己的版本来看)ffmpeg-n4.4-latest-linux64-gpl-shared-4.4.tar.xz(这是github上别人编译好的)(在ubu
我正在测试旨在检测子进程何时发生段错误的代码。想象一下,当这段代码并不总是出现段错误时我感到很惊讶:#includeintmain(){char*p=(char*)(unsignedlong)0;putchar(*p);return0;}我在DebianLinux2.6.26内核下运行;我的shell是来自Debianksh包的AT&Tksh93,版本M93s+2008-01-31。有时这个程序会出现段错误,但在其他情况下,它只会以非零退出状态静默终止,但没有任何消息。我的信号检测程序报告如下:segfaultterminatedbysignal11:Segmentationfault