linux GDB除錯時的臨時變數,臨時指標
今天除錯遇到了個很麻煩的事情,為了復現一個棧完全被踩成0x01010101010101010101的問題較勁了好幾天
期間需要多次call 函式來模擬程序裡的函式呼叫
但是坑爹的是,這個read_xxx(int, int, int*) 有個坑爹的指標
前2個入參好辦,直接傳個數進去就解決了,或者用set $i=0 來弄個臨時變數也行
但是這個指標就麻煩了,沒有上下呼叫棧,上哪弄個有效的指標給你啊
嗯, 全域性變數,我也是這麼幹的
不過很不幸,全域性變數通常都是蠻重要的,這麼幹的結果就是復現出來的問題是亂七八糟的,絕對的自己坑自己
尤其是這個指標還是個INOUT引數,指不定在哪步就被改了,坑的我一愣一愣的
後來終於找到了個比較好的解決辦法
精華啊
這麼牛逼的辦法當然不是我想出來的,其實很簡單,但當時就是沒轉過來,遺憾啊
read_xxx(0, 0,(int *)&g_err_str)
其實要的就是個有效的地址嘛,型別不對沒關係啊,只要buffer夠長什麼都好說
找個全域性的buffer,把地址強轉下了傳進去就好了,這種事情buffer來幹是最好的了
相關推薦
linux GDB除錯時的臨時變數,臨時指標
今天除錯遇到了個很麻煩的事情,為了復現一個棧完全被踩成0x01010101010101010101的問題較勁了好幾天 期間需要多次call 函式來模擬程序裡的函式呼叫 但是坑爹的是,這個read_xxx(int, int, int*) 有個坑爹的指標 前2個入參好辦,直接傳
linux gdb 除錯 coredump core 檔案,函式名稱是 問號
google key: gdb問號 我的程式crash,有了coredump檔案,在Linux PC上用arm-linux-gdb debug it. The result is: #0 0x4022b178 in ?? () (gdb) bt #0
gdb除錯時區域性變數不可檢視問題
除錯程式時,在gdb內p var,會提示 No symbol "var" in current context. 即使沒有使用任何編譯優化選項,仍然不能檢視,放狗搜了一下,可能是這些變數被優化到暫存器中,gdb無法讀取。 解決方案: 在編譯是加入 ‘-gstabs+’ 選項
linux—系統延時定時任務和臨時檔案管理
####1.系統延時人物和定時任務#### 1.系統延時任務 [[email protected] ~]# at 14:48(時間) ##設定任務執行時間 at> rm -fr /mnt/* ##任務動作 at> ##用ctrl+D發起任務 [[email
不允許建立臨時變數,交換兩個數值
#include <stdio.h> #include<stdlib.h> void main() { int a = 1; int b = 2; printf("a=%d,b=%d\n", a, b); a = a + b; b = a - b; //
1.給定兩個整形變數的值,將兩個值的內容進行交換2.不允許建立臨時變數,交換兩個數的內容
1.給定兩個整形變數的值,將兩個值的內容進行交換 #include<stdio.h> int main() { int i = 0; int j = 0; int temp = 0; scanf("%d %d",&i,&j); tem
c語言----交換a,b的值(分別用臨時變數,加減法,異或實現)
1.藉助臨時變數 </pre><pre name="code" class="objc">#include <stdio.h> int main() { int a=0; int b=0; printf("please ent
c語言 不允許建立臨時變數,交換倆個數的內容(3種方法)
給定倆個變數的值,將倆個值的內容進行交換。 加入我們要把裝咖啡和牛奶的杯子交換一下,我們可能要用一個空的容器,將咖啡倒在新杯子裡,把牛奶倒在裝咖啡的杯子裡,再把咖啡倒在裝牛奶的杯子裡。 #include<stdio.h> int main() { int
gdb除錯時顯示陣列
可以用下面的方法來顯示陣列 p *[email protected] 其中p相當於print,array就是陣列首地址,也可以是陣列名,len是想要顯示的陣列的長度。 比如我有一個數組的定義 int a[] = {1, 2, 3, 4, 5}; &nb
Linux shell 指令碼新增環境變數,監控web 服務是否正常
例項1:寫shell指令碼定義函式設定環境變數路徑 prepend() { [ -d “$2” ] && eval $1="$2${$1:+’:’$$1}" && export $1 } 執行 prepend PATH /opt/myapp/bin 說明:
使用gdb除錯時出現:Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.212.el6.i686的解決辦法
今天在redhat6.3(32位)下使用gdb除錯程式的時候,出現一段警告,在此總結出解決辦法,方便後來的學者: 提示需要使用debuginfo安裝glibc-2.12-1.212.el6.i686,但是這裡有個問題:linux系統下有debuginfo嗎?
Linux gdb除錯程式
gdb 可執行檔案 進入gdb除錯環境,輸出介紹資訊 gdb -g 可執行檔案 進入除錯環境,可以不輸出介紹資訊 2、list命令 顯示除錯檔案程式碼(預設顯示10行,敲回車鍵繼續輸出10行...超出檔案總行數,會提示如:Line
Linux-gdb除錯
GDB是一個由GNU開源組織釋出的、UNIX/LINUX作業系統下的、基於命令列的、功能強大的程式除錯工具。他是學習指標、除錯程式非常有用的工具和方法 gdb的常見命令: 簡寫 全稱 備註
linux gdb 除錯多執行緒 多程序 顯示巨集
一、gdb除錯多執行緒gdb)info thread 檢視當前程序的執行緒。 gdb)thread <ID> 切換除錯的執行緒為指定ID的執行緒。 gdb)break file.c:100 thread all 在file.c檔案第100行處為所有經過這裡的執行緒
tomcat啟動閃退且不報錯,多tomcat啟動時環境變數,埠衝突解決方案
問題描述:(補充:閃退可以用記事本開啟startup.bat,新增 pause 這個單詞 在文字的最後一行,即可防止退出並檢視相關資訊) 出現閃退的時候,是使用solr時需要開另外一個tomcat,因此去啟動startup.bat,出現如下圖: 後來發現自己
linux gdb除錯
gdb除錯常用的命令: 1.顯示程式中的當前位置和表示如何到達當前位置的棧跟蹤:bt, where, info stack;這三個的功能都是一樣的,在程式崩潰之後使用該命令檢視堆疊的歷史記錄,很管用。 用法: bt n: 顯示程式棧頂的n幀資訊; bt -n:
arm-linux-gdb除錯工具的安裝與交叉編譯gdbserver
arm-linux-gdb除錯工具的安裝與交叉編譯gdbserver 分類:嵌入式 開發環境:LPC3250 開發板:安裝linux2.6.39; 交叉編譯工具:arm-none-linux-gnueabi-gcc pc的虛擬機器:Linux version 2.6.32.
gdb除錯時檢視記憶體
x/<n/f/u> <addr> n、f、u是可選的引數,<addr>表示一個記憶體地址 1) n 是一個正整數,表示顯示記憶體的長度,也就是說從當前地址向後顯示幾個地址的內容 2) f 表示顯示的格式 3) u 表示將多少個位元
Linux GDB除錯完全教程
本文將主要介紹linux下的強大除錯工具是怎麼完成這些工作的。 之所以要除錯程式,是因為程式的執行結果和預期結果不一致,或者程式出現執行時錯誤。 除錯的基本思想是: 分析現象 -> 假設錯誤原因 -> 產生新的現象去驗證假設 偵錯程式(如GDB)的
gdb 除錯時指定跳到第幾行
假設要從當前位置(main.c, ln 18)跳到 main.c, ln 21,忽略中間的 main.c, ln 19 ~ ln 20,可以這樣做:(jump 縮寫是 j) (gdb) b 21 (gdb) j 21 在 (gdb) c 之後,gdb 會跳過 ln 19