日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Linux如何啟用Debug模式進(jìn)行調(diào)試?(linux怎么用debug模式)

在Linux系統(tǒng)開發(fā)的過(guò)程中,難免會(huì)遇到一些問(wèn)題,如應(yīng)用程序的崩潰、內(nèi)核崩潰等等。這時(shí)候,開啟Debug模式可以幫助我們定位問(wèn)題。本篇文章將會(huì)介紹如何在Linux下啟用Debug模式進(jìn)行調(diào)試。

成都創(chuàng)新互聯(lián)是專業(yè)的湟源網(wǎng)站建設(shè)公司,湟源接單;提供成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行湟源網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

一、為什么需要Debug模式?

我們都知道,在大型的軟件開發(fā)項(xiàng)目中,為了提高開發(fā)效率和編寫質(zhì)量,一般都會(huì)采用模塊化開發(fā)。但是,這樣做也會(huì)帶來(lái)一些問(wèn)題。例如,一個(gè)模塊的代碼里出現(xiàn)了問(wèn)題,我們并不知道問(wèn)題的具置和原因,這時(shí)候就需要Debug模式進(jìn)行調(diào)試。Debug模式可以讓我們看到每一個(gè)變量、函數(shù)和程序執(zhí)行流程,從而能夠準(zhǔn)確找到問(wèn)題。

二、Linux下的Debug模式

Linux和其他操作系統(tǒng)一樣,內(nèi)部都包含了一些調(diào)試工具。與Windows下的Visual Studio不同,Linux下的Debug工具分散在各種軟件包里,有些工具需要自行編譯安裝。在使用Linux進(jìn)行開發(fā)時(shí),我們需要了解以下幾方面的知識(shí):

1.開啟Debug信息

將Debug信息包含在可執(zhí)行文件中,可以查看每個(gè)函數(shù)的調(diào)用情況,同時(shí)提供了一些有助于定位問(wèn)題的信息。在編譯時(shí)開啟Debug選項(xiàng),即使用gcc或者其他的編譯器,在命令行中添加“-g”參數(shù)。例如:

$ gcc -g myapp.c -o myapp

這樣就可以將Debug信息包含在可執(zhí)行文件myapp中了。

2.調(diào)試器

Linux下有很多調(diào)試器可供選擇,例如gdb、kdb、strace、ltrace等等。其中最常用的是gdb調(diào)試器。我們可以在開發(fā)過(guò)程中,利用gdb調(diào)試器來(lái)監(jiān)視進(jìn)程的運(yùn)行情況,并在程序發(fā)生錯(cuò)誤時(shí)進(jìn)行定位。例如:

$ gdb myapp

在進(jìn)入gdb后,我們可以使用一系列命令嘗試查找問(wèn)題。

3.內(nèi)核調(diào)試

內(nèi)核調(diào)試通常是在出現(xiàn)內(nèi)核崩潰或掛起時(shí)進(jìn)行的??梢允褂脙?nèi)核的kdb或kgdb工具進(jìn)行調(diào)試。若我們想在內(nèi)核調(diào)試中使用gdb調(diào)試器,就需要使用kgdb。底下將以kgdb為例,介紹Linux內(nèi)核的調(diào)試過(guò)程:

(1)安裝kgdb插件

$ sudo apt-get install linux-image-$(uname -r)-dbg

(2)將內(nèi)核信息打印到控制臺(tái)

使用echo命令將一個(gè)變量的值輸出到系統(tǒng)日志中,這樣在調(diào)試時(shí),可以看到這條語(yǔ)句被執(zhí)行后變量的取值。

$ echo 1 > /proc/sys/kernel/printk

(3)準(zhǔn)備好調(diào)試環(huán)境

重啟系統(tǒng)時(shí),在grub初始界面按下“e”鍵,進(jìn)入編輯模式,在啟動(dòng)默認(rèn)的kernel時(shí),加上“kgdbwt kgdboc=ttyS0,115200”,保存后啟動(dòng)。這時(shí)候,在設(shè)備管理器中可以看到一個(gè)ttyS0的串口,即可在連接該串口時(shí)使用gdb進(jìn)行調(diào)試。

三、針對(duì)不同的問(wèn)題使用不同的調(diào)試工具

目前我們介紹了gdb、kdb、strace、ltrace等調(diào)試工具,這些工具各自有其優(yōu)缺點(diǎn),使用場(chǎng)景也不同。下面分別介紹它們的使用場(chǎng)景:

1.gdb

gdb是最常用的調(diào)試器,其主要優(yōu)點(diǎn)是強(qiáng)大和高效,它可以針對(duì)不同的問(wèn)題,在調(diào)試時(shí)提供不同的工具。例如,針對(duì)崩潰問(wèn)題,可以使用Core文件調(diào)試;針對(duì)CPU過(guò)高問(wèn)題,可以使用Profiling調(diào)試;針對(duì)內(nèi)存泄漏問(wèn)題,可以使用Valgrind調(diào)試等。gdb還提供了許多非常有用的命令,例如“bt”查看調(diào)用棧、“watch”監(jiān)視變量值等等。

2.kdb

kdb是Linux內(nèi)核的調(diào)試工具,它內(nèi)嵌在內(nèi)核中,可以在內(nèi)核崩潰或掛起時(shí)使用。kdb的優(yōu)點(diǎn)在于它可以直接操作內(nèi)核,可以更加方便快捷地定位問(wèn)題。同時(shí),使用kdb時(shí),只需要通過(guò)常規(guī)串口進(jìn)行操作,與使用gdb時(shí),需要連接調(diào)試卡相比,操作簡(jiǎn)單方便。

3.strace

strace是一種跟蹤應(yīng)用程序的系統(tǒng)調(diào)用的工具。它可以顯示應(yīng)用程序運(yùn)行時(shí)和系統(tǒng)交互的細(xì)節(jié)。strace的主要優(yōu)點(diǎn)在于它可以跟蹤應(yīng)用程序在運(yùn)行時(shí)發(fā)生的事件,例如文件I/O,進(jìn)程創(chuàng)建,網(wǎng)絡(luò)操作等等。使用strace可以幫助我們找到應(yīng)用程序在運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤。

4.ltrace

ltrace也是一種跟蹤應(yīng)用程序的工具,但是不同于strace,ltrace的主要目標(biāo)是跟蹤應(yīng)用程序使用的庫(kù)函數(shù)。與strace相比,ltrace輸出的信息更為具體,可以讓我們更輕松地找到問(wèn)題。

四、

本文介紹了Linux下的Debug模式,以及如何啟用Debug模式進(jìn)行調(diào)試。在實(shí)際開發(fā)中,我們需要針對(duì)不同的問(wèn)題,使用不同的Debug工具。通過(guò)深入學(xué)習(xí)和了解這些工具的使用,可以幫助我們更快速、更準(zhǔn)確地找到問(wèn)題,提高代碼質(zhì)量和開發(fā)效率。

相關(guān)問(wèn)題拓展閱讀:

  • 如何在Android 或Linux 下,做Suspend /Resume 的Debug
  • 嵌入式linux怎么檢內(nèi)存泄漏雨
  • 如何打開linux下apache tomcat 的debug端口 (轉(zhuǎn))

如何在Android 或Linux 下,做Suspend /Resume 的Debug

在Linux或Android下,做power management 的調(diào)適時(shí),常遇到?jīng)]有足夠的information,可以做為debug時(shí)的依據(jù)和參考

我們整理了幾個(gè)常用的參數(shù)或Command,可供設(shè)計(jì)者,得到足夠的Informaiton 做Suspend / Resume的function Debug。

加boot 參數(shù) no_console_suspend

基本上我們常常使用console做為suspend function的debug的Information source,但原始的source code在suspend過(guò)程中,會(huì)將console關(guān)掉。所以我們擾鋒看到一定程度後就再也看不到message了。

但是我們并不知道在Suspend的過(guò)程中老李配,系統(tǒng)到底發(fā)生了什麼事,可能造成無(wú)法suspend。

為此,我們就會(huì)在kernel 啟動(dòng)參數(shù)中加上no_console_suspend這個(gè)參數(shù)。在AM/DM37x APM中是修改boot.scr檔案參數(shù)

#!/bin/sh

cat boot.cmd

if fatload mmcuImage

then

echo ***** Kernel: /dev/mmcblk0p1/uImage *****

fi

echo ***** RootFS: /dev/mmcblk0p2 *****

# Pantherboard DVI output

#setenv bootargs ‘console=ttyO2,115200n8 androidboot.console=ttyO2 mem=512M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y omapdss.def_disp=dvi vram=32M omapfb.mode=dvi:1280x720MR-32 omapfb.vram=0:16M mpurate=1000’

# Pantherboard LCD output

setenv bootargs ‘console=ttyO2,115200n8 androidboot.console=ttyO2 mem=512M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y omapdss.def_disp=lcd omapfb.mode=lcd:800x480MR-32 vram=8M omapfb.vram=0:8M mpurate=1000’

將no_console_suspend加上去到boot 參數(shù)後就好了

setenv bootargs ‘console=ttyO2,115200n8 androidboot.console=ttyO2 mem=512M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y omapdss.def_disp=lcd omapfb.mode=lcd:800x480MR-32 vram=8M omapfb.vram=0:8M mpurate=1000 no_console_suspend’

如果是OMAP4 APM的話,請(qǐng)修改Kernel 參數(shù)的所在檔案即可(在U-boot Source code中)

這個(gè)是基本的參數(shù),所以在Android或Linux上都可以使用。 kernel把console suspend掉侍指以後, 不管里面出了什麼事情, 在Console上都看不到。 而使用這個(gè)參數(shù)後,大部分在suspend/resume時(shí)候的死機(jī)都可以通過(guò)Console看到kernel Panic的信息, 這樣我們才會(huì)知道是哪里出了問(wèn)題。 因?yàn)橛械臅r(shí)候resume出錯(cuò), 或者suspend到很後面出錯(cuò)的console不加這個(gè)參數(shù)都看不到。

但這個(gè)參數(shù)在TI OMAP3/OMAP4/AM37x/DM37x有可能造成有時(shí)Suspend 完當(dāng)?shù)艋蚴莚esume 失敗的問(wèn)題,假如已經(jīng)抓到問(wèn)題在那的時(shí)候,您就可以將這個(gè)參數(shù)Disable,不然很可能就會(huì)Debug不下去。

initcall_debug

這個(gè)同樣kernel參數(shù),使用的時(shí)機(jī)是,當(dāng)我們不知道是那個(gè)driver在suspend/resume過(guò)程中出錯(cuò)的時(shí)候,可以使用這個(gè)參數(shù)來(lái)找出問(wèn)題所在。在下完這個(gè)參數(shù)後,Kernel在suspend時(shí),會(huì)將每個(gè)driver或task的狀況report出來(lái)。我們可以藉由這些information,Check 在suspend時(shí),每個(gè)task和driver是否已經(jīng)完成進(jìn)suspend 的相關(guān)準(zhǔn)備工作…

打開這個(gè)參數(shù)的方法有二種

一種是在console下Command,啟動(dòng)這個(gè)function…

echo 1 > /sys/module/kernel/parameters/initcall_debug

echo 9 > /proc/sys/kernel/printk

其中上面的之一條命令是打開initcall_debug, 這個(gè)是所有的kernel都會(huì)有的。

而第二條命令是要提高kernel message 級(jí)別,因?yàn)閕nitcall的這些信息都是KERN_DEBUG級(jí)別的, 所以需要提高printk的級(jí)別才可以看到, 要不然suspend/resume的時(shí)候掛了,你就沒(méi)有機(jī)會(huì)看到這些信息了。

另一種啟動(dòng)方法是寫在kernel的啟動(dòng)參數(shù)下,就可以了。

setenv bootargs ‘console=ttyO2,115200n8 androidboot.console=ttyO2 mem=512M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y omapdss.def_disp=lcd omapfb.mode=lcd:800x480MR-32 vram=8M omapfb.vram=0:8M mpurate=1000 initcall_debug no_console_suspend’

同樣的,這個(gè)參數(shù)也有可能造成AM37x/DM37x/OMAP4 APM發(fā)生進(jìn)suspend當(dāng)?shù)舻膯?wèn)題。所以一旦知道問(wèn)題所在,麻煩請(qǐng)將這個(gè)參數(shù)Disable掉。

suspend_test

這個(gè)方法可以用rtc這種軟件的方式來(lái)做循環(huán)的suspend/resume, 盡管對(duì)於Android這樣并不是很足夠, (還要再模擬一個(gè)POWER_KEY上去才夠), 但是對(duì)於測(cè)試Driver的穩(wěn)定性, 還是有一定用處的。不要認(rèn)為suspend了幾次可以,那麼就可以通過(guò)幾千次的測(cè)試。這個(gè)suspend是5秒鐘用RTC喚醒,然後回到Android後5秒鐘又會(huì)自動(dòng)睡下去,但是對(duì)於通用Linux,你可以寫個(gè)script來(lái)讓他起來(lái)一會(huì)再睡下去,或許這個(gè)工具比較有用rtcwakeup(google rtcwakeup)。

使用方法:

編譯一個(gè)有這個(gè)功能的kernel, make menuconfig 以後選上

CONFIG_PM_DEBUG=y

CONFIG_PM_TEST_SUSPEND=y

這兩個(gè)選項(xiàng),燒寫新的kernel,然後打開你需要測(cè)試的Device, 比如WIFI,3G

echo “core” > /sys/power/pm_test

echo “mem” > /sys/power/state

這樣, 它就會(huì)循環(huán)休眠和喚醒了。

wakelock

Android和Linux在Power Management相關(guān)的更大的就是wakelock機(jī)制的有無(wú)。Android有時(shí)候會(huì)碰到suspend進(jìn)不去,或者suspend到最後又莫名奇妙的wake up的問(wèn)題。這些都有可能是wakelock引起的,或者說(shuō)是wakelock的使用者引起的。怎麼fine tune呢,使用Console在Android 系統(tǒng)下設(shè)定:

echo 15 > /sys/module/wakelock/parameters/debug_mask

echo 15 > /sys/module/userwakelock/parameters/debug_mask

15是代表16進(jìn)制的F, 在wakelock里面就是把所有的debug信息打開, 起碼現(xiàn)在是這樣設(shè)定的。如果以後不夠用了,可能就會(huì)改成255.

這樣你能看到kernel和frameworks層對(duì)於wakelock的操作、申請(qǐng)及釋放。這樣看申請(qǐng)和釋放成對(duì)否就可以了。

注意: wakelock有一種是timeout的,就是說(shuō)多少毫秒以後,會(huì)自動(dòng)釋放,對(duì)於這些wakelock,申請(qǐng)和釋放可能是不成對(duì)的。

power.0

有時(shí)看到系統(tǒng)suspend到了最後, 然後遇到power.0後suspend失敗,然後整個(gè)系統(tǒng)又resume回來(lái)。這個(gè)是android專有的,因?yàn)閜ower.0是android注冊(cè)到suspend最後的一個(gè)行程, 它會(huì)在CPU進(jìn)入suspend之前檢查一下有沒(méi)有wakelock存在, 如果這時(shí)候還有沒(méi)有釋放的wakelock, 那麼它會(huì)return -EBUSY然後導(dǎo)致整個(gè)suspend失敗。 Check這個(gè)問(wèn)題的方法就是把上面wakelock的debug信息打開,然後看看是哪個(gè)去申請(qǐng)了wakelock,然後Release它。

這個(gè)錯(cuò)誤的錯(cuò)誤信息大概是這樣的:

pm_noirq_op(): platform_pm_suspend_noirq+0x0/0x38 returns -11

PM: Device power.0 failed to suspend late: error -11

earlysuspend

在android里面中另外一個(gè)和Power Management有相關(guān)的機(jī)制叫earlysuspend, 同樣可以打開debug message,用來(lái)做Android earlysuspend debug之用:

echo 15 > /sys/module/earlysuspend/parameters/debug_mask

來(lái)把相關(guān)的debug信息印出來(lái), 例如那個(gè)earlysuspend要被call之類的。

suspend/resume 時(shí)間 fine tune

有的時(shí)候你要調(diào)試suspend/resume的時(shí)間太慢的問(wèn)題。 一種方法是用initcall_debug, 然後把printk的時(shí)間戳打上, 然後看那個(gè)process最慢,再來(lái)Check原因是什麼

我有一個(gè)patch,專門用來(lái)調(diào)試這個(gè)問(wèn)題的,但是upstream不接受, 說(shuō)非要用這種折磨人的方法才行, 但是如果你想用可以下下來(lái)打上去用一下。

地址在這里:

用法是, 打上這個(gè)PATCH以後, 在KERNEL里面選擇上PM_DEBUG, SUSPEND_DEVICE_TIME_DEBUG 這兩個(gè)選項(xiàng)。

然後

echo

微秒

> /sys/power/device_suspend_time_threshold

比如

echo> /sys/power/device_suspend_time_threshold

注意這里是微秒哦。 。 。 它會(huì)把在suspend/resume的時(shí)候慢的那些driver打出來(lái),然後你去干掉它。 。

嵌入式linux怎么檢內(nèi)存泄漏雨

檢測(cè)內(nèi)存泄露主要有以下5種方法:

1、在需要內(nèi)存泄漏檢查的代碼的開始調(diào)用void mtrace(void) (該函數(shù)在頭文件mcheck.h中有聲明)。mtrace為malloc等函數(shù)安裝hook,用于記錄內(nèi)鄭返存分配信息.在需要內(nèi)存泄漏檢查的代碼的結(jié)束調(diào)用void muntrace(void)。

注意: 一般情況下不要調(diào)用muntrace, 而讓程序自高叢游然結(jié)束. 因?yàn)榭赡苡行┽尫艃?nèi)存代碼要到muntrace之后才運(yùn)行.

2、用debug模式編譯被檢查代碼(-g或-ggdb)。

3、設(shè)置環(huán)境變量MALLOC_TRACE為一文件名, 這一文件將存有內(nèi)存分配信戚銷息。

4、運(yùn)行被檢查程序, 直至結(jié)束或muntrace被調(diào)用。

5、用mtrace命令解析內(nèi)存分配Log文件($MALLOC_TRACE)

(mtrace foo $MALLOC_TRACE, where foo is the executible name)

如果有內(nèi)存泄漏,mtrace會(huì)輸出分配泄漏

內(nèi)存的代碼位置,以及分配數(shù)量。

如何打開linux下apache tomcat 的debug端口 (轉(zhuǎn))

修改apache tomcat的bin目錄下的文件catalina.sh在java_opts中增加:JAVA_OPTS=”$JAVA_OPTS -server -Xdebug -Xnoagent -Djavpiler=NONE -Xrunjdwp:transport=dt_socket,address=4050,server=y,suspend=n” 重新啟動(dòng)apache tomcat即可1、以下為apache學(xué)習(xí):apache啟動(dòng)時(shí)報(bào):Syntax error on line 90 Invalid command ‘Order’, perhaps mis-spelled or defined by a module not included in the server configuration,apache無(wú)法啟動(dòng)如何處理其原因是apache權(quán)限相關(guān)的module沒(méi)有加載,導(dǎo)致其不認(rèn)識(shí)Order這個(gè)命令,解決方案:在httpd.conf中添加LoadModule access_module /usr/alibaba/httpd/modules/mod_access.so2、這個(gè)錯(cuò)誤時(shí)由改棗于共享內(nèi)存被占用引起的,解決的方式是,先用ipcs命令獲取Shared Memory Segments的shmid,然后使用ipcrm -m $shmid 的方式升殲沒(méi)將共享內(nèi)存釋放3、如何查吵納看當(dāng)前應(yīng)用的apache端口號(hào)是否被占用netstat -nlp |grep 端口號(hào),可以查看當(dāng)前端口號(hào)是否被占用。

linux 怎么用debug模式的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 怎么用debug模式,Linux如何啟用Debug模式進(jìn)行調(diào)試?,如何在Android 或Linux 下,做Suspend /Resume 的Debug,嵌入式linux怎么檢內(nèi)存泄漏雨,如何打開linux下apache tomcat 的debug端口 (轉(zhuǎn))的信息別忘了在本站進(jìn)行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


網(wǎng)頁(yè)題目:Linux如何啟用Debug模式進(jìn)行調(diào)試?(linux怎么用debug模式)
路徑分享:http://www.5511xx.com/article/djdiisg.html