国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux下ROS程序崩潰,程序段錯誤process has died [pid 20083, exit code -11, cmd /home GDB core dump 調(diào)試

這篇具有很好參考價值的文章主要介紹了Linux下ROS程序崩潰,程序段錯誤process has died [pid 20083, exit code -11, cmd /home GDB core dump 調(diào)試。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

? ? ? ?在Linux下可通過core文件來獲取當(dāng)程序異常退出(如異常信號SIGSEGV, SIGABRT等)時的堆棧信息。core dump叫做核心轉(zhuǎn)儲,當(dāng)程序運(yùn)行過程中發(fā)生異常的那一刻的一個內(nèi)存快照,操作系統(tǒng)在程序發(fā)生異常而異常在進(jìn)程內(nèi)部又沒有被捕獲的情況下,會把進(jìn)程此刻內(nèi)存、寄存器狀態(tài)、運(yùn)行堆棧等信息轉(zhuǎn)儲保存在一個core文件里,叫core dump。core文件是程序非法執(zhí)行后core dump后產(chǎn)生的文件,該文件是二進(jìn)制文件,可以使用gdb、elfdump、objdump打開分析里面的具體內(nèi)容。

產(chǎn)生core dump的可能原因:(1). 內(nèi)存訪問越界;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2). 多線程程序使用了線程不安全的函數(shù);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(3). 多線程讀寫的數(shù)據(jù)未加鎖保護(hù);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(4). 非法指針;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(5). 堆棧溢出。

Linux下ROS程序崩潰,程序段錯誤process has died [pid 20083, exit code -11, cmd /home GDB core dump 調(diào)試,GDB調(diào)試,linux,運(yùn)維,服務(wù)器,ubuntu

調(diào)試步驟:

1、查看core dump是否打開,如果返回0代表沒有打開,返回 unlimited 表示已經(jīng)打開

ulimit -c

2、如果沒有打開core dump

ulimit -c unlimited

執(zhí)行這行命令之后,只針對當(dāng)前終端有效。

如果想對所有終端都有效則在 .bashrc 末尾添加這行代碼,如下

Linux下ROS程序崩潰,程序段錯誤process has died [pid 20083, exit code -11, cmd /home GDB core dump 調(diào)試,GDB調(diào)試,linux,運(yùn)維,服務(wù)器,ubuntu

3、生成可執(zhí)行文件,要加-g選項,以獲取到具體的行號信息,否則沒有

g++ -g -o main main.c

4、執(zhí)行程序后生成core文件,core文件默認(rèn)放在可執(zhí)行文件相同目錄下,且文件名固定為core

./main

執(zhí)行以下命令,可以將文件名修改為core.pid等形式,pid為執(zhí)行當(dāng)前程序的進(jìn)程號,core_uses_pid中原始內(nèi)容為0:?

echo "1" > /proc/sys/kernel/core_uses_pid

引用1、引用2

5、使用gdb調(diào)試core

gdb main core

6、查看程序堆棧信息

bt

小測試:

#include "stdio.h"
 
int main(){
	int *b = 0;
	*b = 10;
	printf("******** b = %d ************ ",*b);
}

Linux下ROS程序崩潰,程序段錯誤process has died [pid 20083, exit code -11, cmd /home GDB core dump 調(diào)試,GDB調(diào)試,linux,運(yùn)維,服務(wù)器,ubuntu

Linux下ROS程序崩潰,程序段錯誤process has died [pid 20083, exit code -11, cmd /home GDB core dump 調(diào)試,GDB調(diào)試,linux,運(yùn)維,服務(wù)器,ubuntu

產(chǎn)生了core文件

Linux下ROS程序崩潰,程序段錯誤process has died [pid 20083, exit code -11, cmd /home GDB core dump 調(diào)試,GDB調(diào)試,linux,運(yùn)維,服務(wù)器,ubuntu

顯示程序出錯在第5行。?

參考

在ros下產(chǎn)生崩潰文件進(jìn)行分析的方法:?

1、查看core dump是否打開

2、然后直接roslaun 或者rosun運(yùn)行節(jié)點,然后產(chǎn)生崩潰文件。roslaunch時core dump文件生成的位置在$ROS_HOME下,如未配置默認(rèn)在~/.ros目錄下

? ? ? ? 注意:在編譯生成可執(zhí)行文件或者庫的時候,要開啟調(diào)試選項,否則不會有g(shù)db調(diào)試信息,無法查看源代碼和設(shè)置斷點等。

? ? ? ? 單個文件直接編譯:加上 -g 選項就行
g++ -g -o main main.c
? ? ? ? 工程編譯:?

????????????????命令行方式:

catkin_make -DCMAKE_BUILD_TYPE=Debug

? ? ? ? ? ? ? ? 修改CMakelist.txt文件:

SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

3、gdb查看core dump文件(-q:表示屏蔽GDB打印的免責(zé)聲明)

gdb main core -q

?參考文章來源地址http://www.zghlxwxcb.cn/news/detail-657453.html

到了這里,關(guān)于Linux下ROS程序崩潰,程序段錯誤process has died [pid 20083, exit code -11, cmd /home GDB core dump 調(diào)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包