目錄
1 gdb斷點資訊收集自動化
2 objdump檢視過大可執行檔案上的指定函式彙編
3 定製 linux 協議棧引數(修改 /etc/sysctl.conf)
鑑於在故障現場使用gdb跟蹤,設定斷點,列印斷點處資訊存在一定的時間差,且有造成單板重啟或影響業務等問題,採用指令碼實現自動化操作。
指令碼實現:./auto_gdb.sh 」程序號「 」斷點「
舉例:[root@localhost auto_gdb]# ./auto_gdb.sh 3565 ros_comm_periodic_send
gdb start.
gdb end.
see theout_info.logunder the current path for results information
說明:程序號用ps -ef檢視、斷點資訊結果在當前路徑下的out_info.log檔案中
指令碼檔案:auto_gdb.sh
意見:新增風險提示
auto_gdb.sh:
#!/bin/bash
process_id=$1
breakpoint=$2
if [ "$process_id" = "" -o "$breakpoint" = "" ]; then
echo "usage:
auto_gdb.sh process_id break_point
example:
auto_gdb.sh 123456 test_func/test_file.c:100"
exit -1
fiecho "gdb start."
gdb=gdb
$gdb --quiet -nx -p $process_id <./out_info.log
b $breakpoint
continue
backtrace
info registers
eofecho "gdb end."
echo "see the out_info.log under the current path for results information"
使用objdump檢視指定函式的彙編**,鑑於bgw檔案過大,採用objdump -d bgw > temp.txt後,temp.txt的大小在230m左右,無法用文字開啟。
管道 + grep指令無法看全func的全部彙編。
指令碼實現:./objdump-function.sh 」可執行檔案「 「函式名」
舉例:[root@localhost auto_gdb]#./objdump-function.sh test*** func1
start-address: 0x0000000000df5a40, end-address: 0x0000000000df5ad0
bgw: file format elf64-x86-64
disassembly of section .text:
0000000000df5a40 <func1>:
df5a40: 55 push %rbp
.....
df5a61: e8 5a 28 00 00 callq df82c0
df5a66: 41 0f b7 d6 movzwl %r14w,%edx
.....
df5ac6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
df5acd: 00 00 00
指令碼檔案:objdump-function.sh
objdump-function.sh:
#!/bin/bash
exe=$1
func_name=$2
if [ -z "$exe" ]; then
echo "usage : $0 exe func_name"
exit
fi
startaddress=$(nm -n $exe | grep -w "$func_name" | awk '')
endaddress=$(nm -n $exe | grep -w -a1 "$func_name" | awk '')
if [ -z "$func_name" ]; then
echo "dump all func_name"
objdump -d $exe
else
echo "start-address: $startaddress, end-address: $endaddress"
objdump -d $exe --start-address=$startaddress --stop-address=$endaddress
fi
通過修改 sysctl.conf 可以做永久生效(網路服務重啟不丟失),通過指令sysctl -p /etc/sysctl.conf實現生效寫入檔案的協議棧引數即來看載入到對應的檔案節點。
通過通過 sysctl -w 指令或者 echo 直接將待修改值寫入檔案節點(網路系統服務重啟後引數丟失)
update_prot_stack_para_ex.sh**如下:
#!/bin/bash
#ps:重啟網路系統配置不會丟失
sysctl_cfg_file="/etc/sysctl.conf"
para_update_flag="####new modified protocol stack parameters####"
#tc8失敗用例列表,後續增加測試失敗在此處新增即可
tc8_cases=(
tc8_tcp_retransmission_to_09="net.ipv4.tcp_syn_retries = 9"
tc8_ipv4_addressing_01="net.ipv4.icmp_echo_ignore_broadcasts = 0"
)function prots_para_update_check()
#遍歷 tc8_cases 陣列
function prots_para_update_write();i++)) do
tc8_case=$( echo $ | cut -d '=' -f 2-)
echo $tc8_case >> $sysctl_cfg_file
done;
return 0
}function prots_para_update_enable()
function prots_para_recover_check()
function prots_para_update()
function prots_para_recover()
#指令碼從此處執行
case $1 in
"update")
prots_para_update
;; "recover")
prots_para_recover
;; *)
echo "please input cmd para: update or recover"
;;esac
通過 sysctl -w 指令或者 echo 直接將待修改值寫入檔案節點:
#!/bin/bash
#ps:重啟網路系統配置丟失
#sysctl指令
#tc8_tcp_retransmission_to_09
#sysctl -w net.ipv4.tcp_syn_retries=9
#tc8_ipv4_addressing_01
#sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=0
#echo指令
echo 9 > /proc/sys/net/ipv4/tcp_syn_retries
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
linux重啟tomcat的shell指令碼
基本思路 先檢查待重啟的tomcat的程序是否存在 存在則執行shutdown.然後再次檢查程序是否還存在,不存在則執行kill 然後刪除工作空間及10天前的日誌。最後執行啟動。bin sh tomname 1 ctompath opt tomcats echo restart tomcat sta...
linux下mysql冷備份shell指令碼
usr bin env bash 資料庫基礎資訊 db host 127.0.0.1 本機 db name 1 要備份的庫名 db user root 使用者名稱 db pass root 密碼 date date y m d h m s mysql path data mysql bak 備份路徑...
Linux Makefile與shell指令碼區別
在makefile可以呼叫shell指令碼,但是makefile和shell指令碼是不同的。本文試著歸納一下makefile和shell指令碼的不同。1 shell中所有引用以 打頭的變數其後要加 而在makefile中的變數是以 打頭的後加 例項如下 makefile path data subp...