程序调试

调试与改错:以下程序的功能是对任意输入的一个3位数

女生的网名这么多〃 提交于 2019-12-08 21:52:27
调试与改错:以下程序的功能是对任意输入的一个3位数,判断各个位数之和是否等于6,是则输出“满足条件”,否则输出“不满足条件”。程序中有两处错误,找出并改正。 #include "stdio.h" void main () { int x,c1,c2,c3,y; scanf(" %d ",&x); c1=x/100; c2=x/100%10; c3=x%10; y=c3+c2+c1; if(y=6) printf("满足条件\n"); else printf("不满足条件\n"); } ★★★目的: 1;注意语句体的{ },设想没有{ }情况完全变了。 2;注意=与==的区别,若下次再错,打PP了 #include<stdio.h> int main () { int x,y; printf("请输入一个三位数:\n"); scanf("%d",&x); y=x/100+x/10%10+x%100%10; if(y==6){ printf("满足条件\n"); }else{ printf("不满足条件\n"); } return 0; } 来源: https://my.oschina.net/u/4227963/blog/3138933

Windbg程序调试--转载

萝らか妹 提交于 2019-12-07 23:15:23
WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。 WinDbg是微软很重要的诊断调试工具: 可以查看源代码、设置断点、查看变量, 查看调用堆栈及内存情况。  调试应用程序(用户模式 user mode)  调试操作系统及驱劢程序(内核模式 kernel mode)  调试非托管程序(native program)  调试托管程序(managed program)  实时调试 (JIT: Just in time)  事后调试 (postmortem debugging) 使用WinDbg可以解决线上.NET应用程序的如下问题: ◆ 内存高 ◆ CPU高 ◆ 程序异常 ◆ 程序Hang死 在生产环境下进行故障诊断时,为了不终止正在运行的服务或应用程序,有两种方式可以对正在运行的服务或应用程序的进程进行分析和调试。 一、用WinDbg等调试器直接attach到需要调试的进程,调试完毕之后再detach即可。但是这种方式有个缺点就是执行debugger命令时必须先break这个进程,执行完debug命令之后又得赶紧F5让他继续运 行,因为被你break住的时候意味着整个进程也已经被你挂起。另外也经常会由于First Chance Excetpion而自动break

Duilib vs调试程序加载资源失败,但是单独执行exe可以成功

£可爱£侵袭症+ 提交于 2019-12-07 23:09:27
在Duilib程序中,在xml中如果有加载资源文件(比如png背景图片),如果调试程序是出现黑屏,加载资源失败,但是单独执行exe文件是可以的,这是很可能是因为资源文件的位置放的不对,你可能释放到xml相同的目录,但是程序实际上加载资源文件实在项目的当前目录,把资源文件放到项目的当前目录就是可以的,这样虽然是可以的,但是感觉不太符合要求,如果需要在指定的位置加载资源文件,可以使用以下代码来设置: LRESULT CSetup::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { g_PM = &m_PaintManager; LONG styleValue = ::GetWindowLong(*this, GWL_STYLE); styleValue &= ~WS_CAPTION; ::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN); m_PaintManager.Init(m_hWnd); CDialogBuilder builder; CDuiString str = CPaintManagerUI::GetInstancePath(); m_PaintManager

大神教你如何在 Linux 中启用 Shell 脚本的调试模式

人盡茶涼 提交于 2019-12-07 14:13:14
导读 脚本是存储在一个文件的一系列命令。在终端上输入一个个命令,按顺序执行的方法太弱了,使用脚本,系统中的用户可以在一个文件中存储所有命令,反复调用该文件多次重新执行命令。 在学习脚本或写脚本的初期阶段,我们通常从写小脚本或者几行命令的短脚本开始,调试这样的脚本时我们通常无非就是通过观察它们的输出来确保其正常工作。 然而,当我们开始写非常长或上千行命令的高级脚本,例如改变系统设置的脚本,在网络上执行关键备份 等等,我们会意识到仅仅看脚本输出是不足以在脚本中找到 Bug 的! 因此,在 Linux 系列中这篇介绍 Shell 脚本调试, 我们将看看如何启用 Shell 脚本调试,然后在之后的系列中解释不同的 Shell 脚本调试模式以及如何使用它们。 如何开始写一个脚本 一个脚本与其它文件的区别是它的首行,它包含 #!(She-Bang - 释伴:定义文件类型)和路径名(解释器路径),通知系统该文件是一个命令集合,将被指定程序(解释器)解释。 下面是不同类型脚本首行示例: #!/bin/sh [sh 脚本] #!/bin/bash [bash 脚本] #!/usr/bin/perl [perl 程序] #!/bin/awk -f [awk 脚本] 注意:如果脚本仅包含一组标准系统命令,没有任何内部 Shell 指令,首行或#!可以去掉。 如何在 Linux 操作系统执行 Shell

实战容器编程好基友之visual studio code+docker篇(二):实时调试运行在docker中的node.js程序

假装没事ソ 提交于 2019-12-07 13:19:59
上篇文章中,我们介绍了怎么利用visual studio code在本地编译生成docker镜像,这篇文章我们会介绍怎么利用Visual studio code 实时调试运行在容器中的node.js程序。 这里我们还会利用之前的项目node-todo, 环境搭建请参考上篇文章中的准备工作部分。 其实细心的同学会发现,在我们上篇文章中,通过vscode快捷命令添加dockerfile的时候,除了会添加dockerfile,docker-compose file还会添加一个docker-compose.debug.yml,这个是vscode添加的专门用来调试的compose文件, 让我们打开这个文件,就会看到如下配置: version: '2' services: node-todo: image: node-todo:latest build: context: . dockerfile: dockerfile environment: NODE_ENV: development MONGODB: {connectiongstring} ports: - 8080 : 8080 - 5858 : 5858 volumes: - . :/usr/src/app command: node --debug=5858 server.js 这里,我们会看到它多开了一个端口号5858

LLDB 常用命令

女生的网名这么多〃 提交于 2019-12-07 08:32:01
LLDB 小结 简介 LLDB 是新一代高性能调试器,其是一组可重用组件的集合,这些组件大多是 LLVM 工程中的类库,如 Clang 表达式解析器或 LLVM 反汇编程序等。LLDB 是 Xcode 中默认的调试器,并且支持调试 C/C++ 程序,详情参考 官方文档 。 LLDB 命令 LLDB 的命令格式不同于 GDB 的命令格式的随意,而是统一为如下格式: <命令名称> <命令动作> [-可选项 [可选项的值]] [参数1 [参数2···]] 需要注意的是,不管是命令名称、命令动作、可选项还是参数,它们都是由空格分隔的,所以如果,参数本身包含由空格符号,那么,使用双引号来包裹参数,如果,参数中包含有反斜杠或双引号,那么使用反斜杠对它们进行转义。 多个可选项在命令行中的顺序并不是固定的,但是如果可选项后的参数是以 - 开始的,那么需要使用 -- 标记可选项的结束,如下面的命令: (lldb) process launch -- stop -at -entry -- -program_arg_1 value -program_arg_2 value //可选项顺序可以不固定 (lldb) breakpoint set -l 34 -f UIView + Theme . m (lldb) breakpoint set -f UIView + Theme . m -l 35 开启调试

XCode4.2免证书真机发布及调试

*爱你&永不变心* 提交于 2019-12-06 23:25:43
<div>以下内容转自java123.但是根据xcode4.2自己找到了 xcode4.2没 code signing的解决办法实现真机调试。</div> <div>-------------------------------------------------------------------------</div> 由于没有购买苹果的开发者证书,所以目前大多数开发环境都是使用以下的方式实现开发与真机测试(本文部分摘自网络) 使用环境:越狱过的iPhone 机器 Mac OS 10.6.8 xCode 4.0.1 及Xcod <div> <table> <tbody> <tr> <td> <div id="contentMidPicAD"></div> 由于没有购买苹果的开发者证书,所以目前大多数开发环境都是使用以下的方式实现开发与真机测试(本文部分摘自网络) 使用环境:越狱过的iPhone 机器 Mac OS 10.6.8 xCode 4.0.1 及Xcode4.0.2 操作步调过程: (一)制作证书 1、 打开 Finder->应用程序->实用工具 -> 钥匙串访问 2、单击:"钥匙串访问"选择 "证书" 再选择"创建证书"过程如下图: <img src="http://www.java123.net/uploads/allimg/111027/011R514Q-0

高并发性能调试经验分享

ε祈祈猫儿з 提交于 2019-12-06 22:06:10
引文 4月份的时候看到一道面试题,据说是腾讯校招面试官提的:在多线程和高并发环境下,如果有一个平均运行一百万次才出现一次的bug,你如何调试这个bug?知乎原贴地址如下: 腾讯实习生面试,这两道题目该怎么回答? - 编程 . 遗憾的是知乎很多答案在抨击这道题本身的正确性,虽然我不是这次的面试官,但我认为这是一道非常好的面试题。当然,只是道加分题,答不上,不扣分。答得不错,说明解决问题的思路和能力要超过应届生平均水平。 之所以写上面这段,是因为我觉得大部分后台服务端开发都有可能遇到这样的BUG,即使没有遇到,这样的题目也能够激发大家不断思考和总结。非常凑巧的是,我在4月份也遇到了一个类似的而且要更加严重的BUG,这是我自己挖的一个很深的坑,不填好,整个项目就无法上线。 现在已经过去了一个多月,趁着有时间,自己好好总结一下,希望里面提到的一些经验和工具能够带给大家一点帮助。 项目背景 我们针对nginx事件框架和openssl协议栈进行了一些深度改造,以提升nginx的HTTPS完全握手计算性能。 由于原生nginx使用本地CPU做RSA计算,ECDHE_RSA算法的单核处理能力只有400 qps左右。前期测试时的并发性能很低,就算开了24核,性能也无法超过1万。 核心功能在去年底就完成了开发,线下测试也没有发现问题。经过优化后的性能提升几倍,为了测试最大性能

python中错误、调试、单元测试、文档测试

狂风中的少年 提交于 2019-12-06 12:54:14
错误分为程序的错误和由用户错误的输入引起的错误,此外还有因为各种各样意外的情况导致的错误,比如在磁盘满的时候写入、从网络爬取东西的时候,网络断了。这类错误称为异常 错误处理    普通的错误处理机制就是在出错的时候返回一个错误代码,但是这样十分不方便,一是因为错误码是和正常结果一样的方式返回的,判断起来十分不方便,二是错误还需要一级一级的向上报,直到错误处理程序。 所以高级语言通常都内置了一套 try...except...finally... 的错误处理机制,Python也不例外。 try: A#如果A中的代码执行过程中出错,就会执行B中的代码 except ZeroDivisionError as e: B finally: C#C中的代码无论是否出错都会正常执行(可以不要这个)<br>。。。 如果错误有不同的类型,可以说使用多个except语句,每个语句处理一个类型的错误 另外,可以在except后面加一个else,如果没有出错,会执行else Python 的错误其实也是一个类,所有的异常类型都是从BaseException类派生的 except在捕获错误时,不但捕获该类型的错误,而且还会把子类一网打尽 try: foo() except ValueError as e: print('ValueError') except UnicodeError as e: print

INT 3 中断调试处理流程

大城市里の小女人 提交于 2019-12-06 12:37:26
Windows内核分析索引目录 :https://www.cnblogs.com/onetrainee/p/11675224.html INT 3 中断调试处理流程 一、调试器如何下INT 3 断点    1)首先,调试器使用 ReadProcessMemory,读取断点内存地址的字节。   2)之后,调试器再使用 WriteProcessMemory,将指定的内存地址指令写为0xCC。   3)之后,当程序执行到这里,遇到CC指令,会从IDT表中查03号段描述符,其会定向到Trap03函数。   4)经过一系列操作(下面会介绍),此时调试器就会接收到INT 3中断,程序暂停,用户可以用来进行一些处理。   5)恢复时,将1)读取的字节再重新写入到CC处,这样就可以保证程序的正常执行。 二、INT 3 异常指令如何派发到调试器    我们在 一、3) 中,其会经过 Trap03,因此INT3异常信息肯定是在这里发送的。   我们前面学过异常等派发,其检测到存在三环调试器时会发送到三环调试器,因此其派发也就是在这时进行的。   派发流程大体如下:    三、上面产生的两个疑问:     1)在 _kiDispatchException 中存在 dec eip,为什么调试器还需要修复 eip   注意:这个是Context.eip--,而三环与零环走的是 TrapFrame 结构