最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pycharm debug調(diào)試教程

 更新時(shí)間:2024年11月06日 10:57:16   作者:魚(yú)兒也有煩惱  
Debug即程序調(diào)試,是發(fā)現(xiàn)和解決代碼錯(cuò)誤的過(guò)程,通過(guò)設(shè)置斷點(diǎn)和逐步執(zhí)行,可以監(jiān)控程序執(zhí)行過(guò)程和變量狀態(tài),幫助開(kāi)發(fā)者定位問(wèn)題,Debug工具還能評(píng)估表達(dá)式和監(jiān)視變量,極大地方便了程序調(diào)試,本文就來(lái)介紹一下

debug,就是對(duì)于結(jié)果不符合預(yù)期的程序,將程序執(zhí)行的過(guò)程放慢甚至中途暫停,通過(guò)逐步排查中間變量或者輸出以定位有故障的代碼段的過(guò)程。這個(gè)過(guò)程可以看作是逐步調(diào)試程序的方法。當(dāng)我們點(diǎn)擊“運(yùn)行”時(shí),程序并不是一下子全部執(zhí)行完畢,而是逐步執(zhí)行各個(gè)部分,每執(zhí)行完一部分就檢查結(jié)果是否符合預(yù)期。如果發(fā)現(xiàn)有問(wèn)題,就暫停執(zhí)行,逐行檢查并修正,直到該部分的代碼達(dá)到預(yù)期效果再繼續(xù)執(zhí)行下一部分。

breakpoint(斷點(diǎn)調(diào)試),就是在程序自動(dòng)運(yùn)行的過(guò)程中,我們?cè)诖a某一處打上了斷點(diǎn),當(dāng)程序跑到我們?cè)O(shè)置的斷點(diǎn)位置處使,則會(huì)中斷下來(lái),此時(shí)可以看到之前運(yùn)行過(guò)的所有程序變量。

1.如何給程序打斷點(diǎn)?

image-20240125205450436

2.如何開(kāi)啟Debug調(diào)試?

image-20240125204653648

3.Debug控制臺(tái)各按鈕功能

image-20240125222418661

  • step over(F8快捷鍵):在單步執(zhí)行時(shí),在函數(shù)內(nèi)遇到子函數(shù)時(shí)不會(huì)進(jìn)入子函數(shù)內(nèi)單步執(zhí)行,而是將子函數(shù)整個(gè)執(zhí)行完再停止,也就是把子函數(shù)整個(gè)作為一步。在不存在子函數(shù)的情況下是和step into效果一樣的。
  • step into(F7快捷鍵):在單步執(zhí)行時(shí),遇到子函數(shù)就進(jìn)入并且繼續(xù)單步執(zhí)行,有的會(huì)跳到源代碼里面去執(zhí)行。
  • step into my code(Alt+Shift+F7快捷鍵):在單步執(zhí)行時(shí),遇到子函數(shù)就進(jìn)入并且繼續(xù)單步執(zhí)行,不會(huì)進(jìn)入到源碼中
  • step out(Shift+F8快捷鍵):假如進(jìn)入了一個(gè)函數(shù)體中,看了兩行代碼,不想看了,跳出當(dāng)前函數(shù)體內(nèi),返回到調(diào)用此函數(shù)的地方。
  • Resume program(F9快捷鍵):恢復(fù)程序,直接運(yùn)行到下一斷點(diǎn)處。若無(wú)下一斷點(diǎn),則直接跑完程序。

一般操作步驟:設(shè)置好斷點(diǎn),debug運(yùn)行,然后 F8單步調(diào)試,遇到想進(jìn)入的函數(shù) F7 進(jìn)去,想出來(lái)在 Shift+F8,跳過(guò)不想看的地方,直接設(shè)置下一個(gè)斷點(diǎn),然后 F9 過(guò)去。

4.控制臺(tái)各變量類型的圖標(biāo)

每個(gè)變量左側(cè)的圖標(biāo)指示其類型。

image-20240422213330239

5.Debug調(diào)試示例1

  • 設(shè)置斷點(diǎn),debug運(yùn)行

image-20240125223749180

  • 執(zhí)行一次step into(F7快捷鍵)

image-20240125224318463

  • 執(zhí)行一次step over(F8快捷鍵)

image-20240125224717885

再執(zhí)行一次step over(F8快捷鍵)

image-20240125225549669

再執(zhí)行一次step over(F8快捷鍵)

image-20240125225730230

再執(zhí)行一次step over(F8快捷鍵)

image-20240125230044575

再執(zhí)行一次step over(F8快捷鍵)

image-20240125230242135

  • 看夠了循環(huán),想直接看最終 result 加完的結(jié)果,直接在結(jié)果處打斷點(diǎn),執(zhí)行Resume program(F9快捷鍵)

image-20240125230910729

image-20240125231106798

  • 執(zhí)行一次step out(Shift+F8快捷鍵),跳出當(dāng)前函數(shù),返回到調(diào)用此函數(shù)的地方。

image-20240125231440455

  • 執(zhí)行一次step over(F8快捷鍵)

image-20240125231750486

  • 再執(zhí)行一次step over(F8快捷鍵)

image-20240125232103246

第一個(gè)示例就完成了?。?!

6.Debug調(diào)試示例2

運(yùn)行示例程序2,計(jì)算輸入的不同水果的平均數(shù)量。

image-20240125172210188

程序拋出一個(gè)異常,可以看到它的運(yùn)行窗口中的堆棧跟蹤(Traceback)??梢詥螕鬞raceback中的文件名和行號(hào)導(dǎo)航到編輯器。設(shè)置一個(gè)斷點(diǎn)開(kāi)始調(diào)查問(wèn)題吧!?。。▎螕粢O(shè)置斷點(diǎn)的溝槽gutter,或者將光標(biāo)插入該行并按Ctrl+F8

image-20240125172415646

開(kāi)始調(diào)試程序,點(diǎn)擊toolbar的小蟲(chóng)子圖標(biāo),或者按Shift+F9。

image-20240125172729129

想要檢查函數(shù)是否發(fā)生了異常,可以計(jì)算調(diào)用這個(gè)函數(shù)的表達(dá)式。復(fù)制選定的表達(dá)式并且將其粘貼到Debug窗口Evaluate expression處。

image-20240125173309536

按下Enter評(píng)估表達(dá)式。

image-20240125173511447

可以看出這個(gè)表達(dá)式會(huì)導(dǎo)致異常,將此表達(dá)式添加到Debugger watches中,使其在將來(lái)自動(dòng)計(jì)算。點(diǎn)擊Debug窗口的圖標(biāo)。

image-20240125174047111

為了找出導(dǎo)致這種異常的原因,單步執(zhí)行選中的代碼。(點(diǎn)擊Debug窗口的圖標(biāo),或者按F7

image-20240125174846612

注意到,有幾個(gè)嵌套調(diào)用,step into之后將他們都高亮了。按去選擇extract_number函數(shù),然后按Enter去單步執(zhí)行。

image-20240125175317401

讓我們來(lái)看看我們要傳遞給int的是什么。按Ctrl+Alt+F8為選中的參數(shù)調(diào)用快速求值表達(dá)式。

image-20240125175833977

這個(gè)函數(shù)的目的是提取數(shù)字,但是可以看到目前提取的是字符串apple,有一個(gè)數(shù)組索引的錯(cuò)誤,將索引值0修改為1。

image-20240125180350289

重新運(yùn)行我們的項(xiàng)目。

image-20240125180454756

檢查一下在修改后,調(diào)用extract_number是否還會(huì)拋出異常。單擊step over不進(jìn)入函數(shù)的單步執(zhí)行)或者按F8

image-20240125181618940

可以看到調(diào)用沒(méi)有拋出異常,按F9或者單擊resume program(恢復(fù)程序執(zhí)行,直到碰到下一個(gè)斷點(diǎn))。

image-20240125181913318

又一次的跳到了我們?cè)O(shè)置的斷點(diǎn)的位置,但是我們不需要停在這里了,因?yàn)檫@個(gè)地方的異常已經(jīng)解決了。所以mute此處的斷點(diǎn),點(diǎn)擊Mute Breakpoint。

image-20240125194308414

最后,檢查一下find_average的結(jié)果,首先將光標(biāo)移動(dòng)到return語(yǔ)句前,按Alt+F9執(zhí)行程序到當(dāng)前光標(biāo)的那一行。

image-20240125195849980

Ctrl+Alt+F8為選中的參數(shù)調(diào)用快速求值表達(dá)式。結(jié)果正確,結(jié)束Debug調(diào)試。

image-20240125200934657

第二個(gè)示例就完成了?。?!

7.Debug調(diào)試示例3

設(shè)置斷點(diǎn),debug運(yùn)行。

image-20240126103754085

console窗口用于和程序交互或者是查看程序的打印。鍵盤(pán)輸入a的值。

image-20240126104028381

image-20240126104202355

現(xiàn)在想要進(jìn)入classify函數(shù)中,執(zhí)行一次step into(F7快捷鍵)或者step into my code(Alt+Shift+F7快捷鍵)

image-20240126104534315

想看一下函數(shù)內(nèi)部的細(xì)節(jié),執(zhí)行兩次step over(F8快捷鍵)

image-20240126104818651

想看一下incr_by_two()這個(gè)函數(shù),直接step into(F7快捷鍵)進(jìn)去。

image-20240126104939785

進(jìn)來(lái)又不想看這個(gè)函數(shù)了,直接step out(Shift+F8快捷鍵)跳出當(dāng)前函數(shù)體,返回到調(diào)用此函數(shù)的地方。

image-20240126105348501

想直接查看classify函數(shù)返回的結(jié)果,在打一個(gè)斷點(diǎn),然后Resume program(F9快捷鍵)直接運(yùn)行到斷點(diǎn)處。

image-20240126105702443

image-20240126105836628

不想一步一步執(zhí)行了,直接Resume program(F9快捷鍵)跑完剩余的代碼。

image-20240126110136414

第三個(gè)示例就完成了?。。?/p>

附錄

示例程序1

def sum_demo(x, y):
    for _ in range(2):
        x += 1
        y += 1
        result = x + y
    return result


if __name__ == '__main__':
    result = sum_demo(1, 1)
    print(result)

示例程序2

def find_average(value):
    check_input(value)
    result = 0
    for s in value:
        result += validate_number(extract_number(remove_quotes(s)))
    return result / len(value)


def prepare_values():
    return ["'apple 1'", "orange 2", "'tomato 3'"]


def extract_number(s):
    return int(s.split()[0])


def check_input(value):
    if (value is None) or (len(value) == 0):
        raise ValueError(value)


def remove_quotes(s):
    if len(s) > 1 and s[0] == "'" and s[-1] == "'":
        return s[1:-1]
    return s


def validate_number(number):
    if number < 0:
        raise ValueError(number)
    return number


average = find_average(prepare_values())
print("The average is ", average)

示例程序3

def incr_by_one(num):
    print('Increase by one.')
    return num + 1


def incr_by_two(num):
    print('Increase by two.')
    return num + 2


def classify(num):
    print('if num is odd, increase by one; if num is even, increase by two.')
    if num % 2 == 0:
        result = incr_by_two(num)
    else:
        result = incr_by_one(num)
    return result


if __name__ == '__main__':
    a = input('Please input an integer:')
    result = classify(int(a))
    print(result)

參考

到此這篇關(guān)于Pycharm debug調(diào)試教程的文章就介紹到這了,更多相關(guān)Pycharm debug調(diào)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你掌握5個(gè)鮮為人知的Python內(nèi)置函數(shù)

    一文帶你掌握5個(gè)鮮為人知的Python內(nèi)置函數(shù)

    作為Python開(kāi)發(fā)者,我們經(jīng)常使用print()、len()、range()等常見(jiàn)內(nèi)置函數(shù),本文將分享5個(gè)你可能不太熟悉,但絕對(duì)值得掌握的內(nèi)置函數(shù),感興趣的小伙伴可以跟隨小編一起了解下
    2025-10-10
  • python時(shí)間序列按頻率生成日期的方法

    python時(shí)間序列按頻率生成日期的方法

    這篇文章主要介紹了python時(shí)間序列按頻率生成日期的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 通過(guò)實(shí)例解析Python return運(yùn)行原理

    通過(guò)實(shí)例解析Python return運(yùn)行原理

    這篇文章主要介紹了通過(guò)實(shí)例解析Python return運(yùn)行原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • python中Pluggy高級(jí)用法

    python中Pluggy高級(jí)用法

    本文主要介紹了Pluggy高級(jí)用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • Python約瑟夫生者死者小游戲?qū)嵗v解

    Python約瑟夫生者死者小游戲?qū)嵗v解

    在本篇文章里小編給大家分享的是一篇關(guān)于Python約瑟夫生者死者小游戲?qū)嵗v解內(nèi)容,有興趣的朋友們可以測(cè)試學(xué)習(xí)下。
    2021-01-01
  • Python Web服務(wù)器Tornado使用小結(jié)

    Python Web服務(wù)器Tornado使用小結(jié)

    最近在做一個(gè)網(wǎng)站的后端開(kāi)發(fā)。因?yàn)槌跗谥挥形乙粋€(gè)人做,所以技術(shù)選擇上很自由。在 web 服務(wù)器上我選擇了 Tornado。雖然曾經(jīng)也讀過(guò)它的源碼,并做過(guò)一些小的 demo,但畢竟這是第一次在工作中使用,難免又發(fā)現(xiàn)了一些值得分享的東西
    2014-05-05
  • Python制作動(dòng)態(tài)字符畫(huà)的源碼

    Python制作動(dòng)態(tài)字符畫(huà)的源碼

    python字符畫(huà)是一個(gè)簡(jiǎn)單有趣的圖畫(huà),它一般由程序制作而成,接下來(lái)通過(guò)本文給大家分享Python制作動(dòng)態(tài)字符畫(huà)的源碼,需要的朋友可以參考下
    2021-08-08
  • Pygame開(kāi)發(fā)游戲詳細(xì)流程記錄

    Pygame開(kāi)發(fā)游戲詳細(xì)流程記錄

    pygame是python常用的游戲模塊,不過(guò)很可惜,python并沒(méi)有自帶該模塊,我們只好自己安裝,這篇文章主要介紹了Pygame開(kāi)發(fā)游戲詳細(xì)流程的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-02-02
  • Django點(diǎn)贊的實(shí)現(xiàn)示例

    Django點(diǎn)贊的實(shí)現(xiàn)示例

    本文主要介紹了Django點(diǎn)贊的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Python中StringIO和BytesIO用法及區(qū)別

    Python中StringIO和BytesIO用法及區(qū)別

    我們平時(shí)處理的輸入輸出(I/O)大多數(shù)是針對(duì)文件或網(wǎng)絡(luò)數(shù)據(jù)的,但有時(shí)候,我們希望直接在內(nèi)存中進(jìn)行讀寫(xiě),而不必先把數(shù)據(jù)存到硬盤(pán)上, StringIO和BytesIO 就派上用場(chǎng),下面就來(lái)介紹一下兩者的用法和區(qū)別小結(jié)
    2025-08-08

最新評(píng)論

内丘县| 藁城市| 芦溪县| 南开区| 会宁县| 宽城| 五华县| 互助| 分宜县| 宝清县| 资中县| 镇江市| 安多县| 英吉沙县| 孝昌县| 龙川县| 厦门市| 共和县| 安塞县| 凤翔县| 新营市| 石嘴山市| 托里县| 惠水县| 洛川县| 全州县| 许昌县| 定陶县| 潜山县| 开原市| 定襄县| 葵青区| 台州市| 磐石市| 新营市| 贵溪市| 湖南省| 东乌珠穆沁旗| 西乌珠穆沁旗| 方山县| 赤水市|