最新python学习-代码调试器pdb的使用教程_python pdb(2),2024年最新阿里P7大牛亲自讲解

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

布局

在这里插入图片描述
左侧一列为调试工具栏、调试工具栏右侧是帧、再右侧是变量显示区域、上侧是程序控制栏。默认是Debugger标签页,点击Console标签页可以查看程序的输出。
在这里插入图片描述

调试工具栏 Debug Bar

按钮提示和快捷键描述
重新启动重新运行 Ctrl+F5单击此按钮可停止当前应用程序并再次运行它。
恢复继续程序 F9当应用程序暂停时,单击此按钮可继续程序的执行,即运行到下一个断点。
暂停暂停程序 Ctrl+Pause单击此按钮可暂停程序执行。
停止 Ctrl+F2单击此按钮可通过标准脚本在外部终止当前进程。shutdown
查看断点查看断点 Ctrl+Shift+F8单击此按钮可打开“断点”对话框,您可以在其中配置断点行为。
静音断点禁用断点使用此按钮可以切换断点状态。在“调试”工具窗口的工具栏中按下应用调试器静音断点该按钮时,项目中的所有断点都将禁用,图标将变为灰色:静音断点。可以暂时将项目中的所有断点静音以执行程序,而无需在断点处停止。
显示选项菜单设置单击此按钮可打开包含以下选项的菜单:* 内联显示值:选择此选项可启用内联调试功能,该功能允许在编辑器中查看变量用法旁边的变量值。
  • 按字母顺序对值进行排序:选择此选项可按字母顺序对“变量”窗格中的值进行排序。
  • 会话完成时取消静音断点:选择此选项可在调试会话完成后重新启用所有禁用的断点。
  • 显示返回值:选择此选项可在步进时显示当前帧中已执行函数的返回值。
  • 简化变量视图:选择此选项可将以下名称包含在“特殊变量”组中:
    • 所有具有 DUNDER 名称的变量。
    • 和 的所有实例。function``classobj``module
    • 所有 IPython 内部变量,如果已启动带有 IPython 的调试控制台。
  • 变量加载策略。您可以选择以下策略之一:
    • 同步:如果选择此检查命令,则显示的消息为 ,之后调试器将显示变量的值。Collecting data
    • 异步:如果选择此检查命令,则单独(异步)加载调试器中的变量。在这种情况下,如果加载变量需要很长时间,调试器会显示消息,如果变量太慢,则只有在调试器之后才会显示其值或消息。请注意建议切换到按需模式的警告消息。...Loading Value``Loading timed out
    • 按需:如果选择此检查命令,调试器将显示消息。单击它以启用加载。Show Value请注意,加载策略中的任何更改在重新运行调试过程后生效。
      |
      | App general pin tab | Pin Tab | Click this button to pin or unpin the current tab. You may need to pin a tab to prevent it from closing automatically when the maximum number of tabs is reached in this window. |

单击3次恢复按钮,可以看到ul变量是url_list中的第一个。
在这里插入图片描述
单击查看断点按钮可以查看所有断点。可以通过Enabled复选框来禁用/启用某一个断点。
在这里插入图片描述
单击静音断点禁用所有断点。
在这里插入图片描述
单击恢复继续执行程序,Console标签页可以看到结果。
在这里插入图片描述
单击设置按钮,可以看到有几个选项。
在这里插入图片描述

  • 内联显示变量值
  • 会话结束时取消禁止断点
  • 显示返回值
  • 简化的变量视图
  • 异步加载值

程序控制工具栏

按钮提示和快捷键描述
显示执行点显示执行点 Alt+F10单击此按钮可在编辑器中突出显示当前执行点,并在“帧”窗格中显示相应的堆栈帧。
步过跨过 F8单击此按钮可执行程序,直到当前方法或文件中的下一行,跳过当前执行点引用的方法(如果有)。如果当前行是方法中的最后一行,则执行步骤将紧跟在此方法之后执行的行。
步入步入 F7单击此按钮可让调试器单步执行在当前执行点调用的方法。
强行步入强行步入 Alt+Shift+F7单击此按钮可使调试器单步执行当前执行点中调用的方法,即使要跳过此方法也是如此。
单步执行我的代码单步执行代码 Alt+Shift+F7单击此按钮可跳过单步执行库源代码,并专注于您自己的代码。
步出 Shift+F8单击此按钮可使调试器从当前方法中单步执行,转到紧随其后的行。
运行到光标运行到光标 Alt+F9单击此按钮可恢复程序执行并暂停,直到执行点到达编辑器中当前光标位置的行。不需要断点。实际上,插入符号处为当前行设置了一个临时断点,一旦程序执行暂停,该断点就会被删除。因此,如果插入符号位于已执行的行,则程序将恢复以进一步执行,因为无法回滚到以前的断点。当您已深入单步执行方法序列并需要一次单步执行多个方法时,此操作特别有用。如果为在将您带到指定行之前应执行的行设置了断点,则调试器将在遇到的第一个断点处暂停。

如果需要在特定行处使用某种临时断点,则使用此操作,其中程序执行不应中断。

|
| 计算表达式 | 计算表达式 Alt+F8 | 单击此按钮可 。计算表达式。 |

Pycharm版本不一样,按钮图标可能不同

单击显示执行点按钮可以看到帧显示main.py:9行,代码区域光标也显示在第9行

在这里插入图片描述
单击步入按钮,会进入调用的库的函数中。
在这里插入图片描述

单击单步执行我的代码按钮,会跳过导入的库,直接进入自己写的函数或者下一行
在这里插入图片描述

pdb

有的时候在无界面的服务器上或容器中调试,无法使用Pycharm就可以使用pdb了。
pdb有了两种使用方式,一种是添加断点后直接运行(侵入式)

import pdb
pdb.set_trace()

breakpoint()

以下示例使用代码如下
main.py

import asyncio
import pdb
from net_tools import get_resp

async def print\_resp(url):
    res = await get_resp(url)
    pdb.set_trace()
    print(res)

async def main():
    url_list = ["https://blog.csdn.net/lady\_killer9/article/details/128891256","https://blog.csdn.net/lady\_killer9/article/details/108763489"]
    for url in url_list:
       pdb.set_trace()
       await asyncio.create_task(print_resp(url))

if __name__ == '\_\_main\_\_':
    asyncio.run(main())

net_tools.py

import aiohttp

async def get_resp(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            print(response.status)
            return await response.text()

frame:帧,pdb状态下会使用->代表当前帧

> e:\workspace\python_workspace\debug_test\main.py(13)main()
-> await asyncio.create_task(print_resp(url))
(Pdb) 

查看源代码 l list

如果不带参数,则列出当前行周围的 11 行,或继续前一个列表。
如果用 . 作为参数,则列出当前行周围的 11 行。
如果带有一个参数,则列出那一行周围的 11 行。
如果带有两个参数,则列出所给的范围中的代码;
如果第二个参数小于第一个参数,则将其解释为列出行数的计数。

(Pdb) l
  8  	async def main():
  9  	    url_list = ["https://blog.csdn.net/lady\_killer9/article/details/128891256","https://blog.csdn.net/lady\_killer9/article/details/108763489"]
 10  	    for url in url_list:
 11  	       import pdb
 12  	       pdb.set_trace()
 13  ->	       await asyncio.create_task(print_resp(url))
 14  	
 15  	if __name__ == '\_\_main\_\_':
 16  	    asyncio.run(main())
[EOF]

查看当前函数源代码 ll longlist

(Pdb) ll
  8  	async def main():
  9  	    url_list = ["https://blog.csdn.net/lady\_killer9/article/details/128891256","https://blog.csdn.net/lady\_killer9/article/details/108763489"]
 10  	    for url in url_list:
 11  	       import pdb
 12  	       pdb.set_trace()
 13  ->	       await asyncio.create_task(print_resp(url))

打印变量 p

p后面加上变量名即可

(Pdb) p url_list
['https://blog.csdn.net/lady\_killer9/article/details/128891256', 'https://blog.csdn.net/lady\_killer9/article/details/108763489']

查看调用栈w where

(Pdb) w
  e:\workspace\python_workspace\debug_test\main.py(16)<module>()
-> asyncio.run(main())
  c:\users\dell\appdata\local\programs\python\python37\lib\asyncio\runners.py(43)run()
-> return loop.run_until_complete(main)
  c:\users\dell\appdata\local\programs\python\python37\lib\asyncio\base_events.py(574)run_until_complete()
-> self.run_forever()
  c:\users\dell\appdata\local\programs\python\python37\lib\asyncio\base_events.py(541)run_forever()
-> self._run_once()
  c:\users\dell\appdata\local\programs\python\python37\lib\asyncio\base_events.py(1786)_run_once()
-> handle._run()
  c:\users\dell\appdata\local\programs\python\python37\lib\asyncio\events.py(88)_run()
-> self._context.run(self._callback, *self._args)
> e:\workspace\python_workspace\debug_test\main.py(13)main()
-> await asyncio.create_task(print_resp(url))

可以看到调用栈,接下来运行

await asyncio.create_task(print_resp(url))

向上移动当前帧 u up

后面可加参数count,在堆栈回溯中,将当前帧向上移动 count 级

(Pdb) u
> c:\users\dell\appdata\local\programs\python\python37\lib\asyncio\events.py(88)_run()
-> self._context.run(self._callback, \*self._args)

向上移动当前帧 d down

后面可加参数count,在堆栈回溯中,将当前帧向下移动 count 级

(Pdb) d
> e:\workspace\python_workspace\debug_test\main.py(13)main()
-> await asyncio.create_task(print_resp(url))

运行当前行代码,在第一个可以停止的位置停下 s step

step在被调用的函数内部或在当前函数的下一行停下,所以可以用step进入函数

(Pdb) s
--Call--
> c:\users\dell\appdata\local\programs\python\python37\lib\asyncio\tasks.py(345)create_task()
-> def create\_task(coro):

继续运行,直到当前函数的下一行或当前函数返回为止 n next

next 和 step 之间的区别在于:step 进入被调用函数内部并停止,而 next (几乎)全速运行被调用函数,仅在当前函数的下一行停止。

(Pdb) n
> c:\users\dell\appdata\local\programs\python\python37\lib\asyncio\tasks.py(350)create_task()
-> loop = events.get_running_loop()

运行直到下一个断点 c continue

(Pdb) c
200
> e:\workspace\python_workspace\debug_test\main.py(8)print_resp()
-> print(res)

打印函数返回值 retval

(Pdb) retval
None

跳出循环(执行直到比当前行数大) unt until

(Pdb) u
> c:\users\dell\appdata\local\programs\python\python37\lib\asyncio\events.py(88)_run()
-> self._context.run(self._callback, *self._args)
(Pdb) u
> c:\users\dell\appdata\local\programs\python\python37\lib\asyncio\base_events.py(1786)_run_once()
-> handle._run()
(Pdb) u
> c:\users\dell\appdata\local\programs\python\python37\lib\asyncio\base_events.py(541)run_forever()
-> self._run_once()
(Pdb) c

接下来使用另外一种方式,去除断点后直接运行(非侵入式)

python3 -m pdb main.py



### 如何自学黑客&网络安全


#### 黑客零基础入门学习路线&规划


**初级黑客**  
 **1、网络安全理论知识(2天)**  
 ①了解行业相关背景,前景,确定发展方向。  
 ②学习网络安全相关法律法规。  
 ③网络安全运营的概念。  
 ④等保简介、等保规定、流程和规范。(非常重要)


**2、渗透测试基础(一周)**  
 ①渗透测试的流程、分类、标准  
 ②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking  
 ③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察  
 ④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等


**3、操作系统基础(一周)**  
 ①Windows系统常见功能和命令  
 ②Kali Linux系统常见功能和命令  
 ③操作系统安全(系统入侵排查/系统加固基础)


**4、计算机网络基础(一周)**  
 ①计算机网络基础、协议和架构  
 ②网络通信原理、OSI模型、数据转发流程  
 ③常见协议解析(HTTP、TCP/IP、ARP等)  
 ④网络攻击技术与网络安全防御技术  
 ⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现


**5、数据库基础操作(2天)**  
 ①数据库基础  
 ②SQL语言基础  
 ③数据库安全加固


**6、Web渗透(1周)**  
 ①HTML、CSS和JavaScript简介  
 ②OWASP Top10  
 ③Web漏洞扫描工具  
 ④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)  
 恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k


到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?


如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!


**7、脚本编程(初级/中级/高级)**  
 在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.


如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

**8、超级黑客**  
 这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。  
 ![img](https://img-blog.csdnimg.cn/img_convert/3fd39c2ba8ec22649979f245f4221608.webp?x-oss-process=image/format,png)


#### 网络安全工程师企业级学习路线


![img](https://img-blog.csdnimg.cn/img_convert/931ac5ac21a22d230645ccf767358997.webp?x-oss-process=image/format,png)  
 如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的


视频配套资料&国内外网安书籍、文档&工具


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

![img](https://img-blog.csdnimg.cn/img_convert/153b2778a3fe5198265bed9635d63469.webp?x-oss-process=image/format,png)  
 一些笔者自己买的、其他平台白嫖不到的视频教程。  
 ![img](https://img-blog.csdnimg.cn/img_convert/32eb4b22aa740233c5198d3c161b37e8.webp?x-oss-process=image/format,png)



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值