Placeholder Image

字幕表 動画を再生する

  • DAN ARMENDARIZ: Hi.

    DANアルメンダリス:こんにちは。

  • I'm Dan Armendariz .

    私はダンアルメンダリスです。

  • Today we're going to be looking at debugging.

    今日はあることになるだろう デバッグを見て。

  • Not only are we going to talk about some techniques,

    だけでなく、我々がしようとしています いくつかのテクニックについて話します、

  • but also we're going to look at some of the features contained

    だけでなく、我々が見てするつもりです 特徴のいくつかを含有

  • within the CS50 IDE that allow you to easily debug a program.

    許可CS50のIDE内で あなたは簡単にプログラムをデバッグします。

  • >> Just one example of something that can go wrong,

    >> のほんの一例 間違って行くことができるもの、

  • and it's actually something that we've already seen before.

    それは実際に何か 我々は既に前に見たこと。

  • In this case, this is a C program that accepts an integer from the user,

    この場合、これは、Cプログラムであります すなわち、ユーザからの整数を受け付け

  • divides it by 2, and provides the output back to the user.

    2で除算し、提供 バックユーザに出力。

  • Now, from what we've seen earlier in lectures,

    今、私たちがしてきたことから、 以前の講義で見られ、

  • we know that this will actually cause specific types of division problems

    私たちは、これが実際に原因となりますことを知っています 分割問題の特定のタイプ

  • when we have odd numbers.

    私たちは、奇数を持っている場合。

  • Specifically, it will just throw away anything after the decimal point.

    具体的には、それだけで捨てるます 小数点以下のもの。

  • >> Now, we know that this happens to be the case.

    >> 今、私たちはこのことを知っています ケースであることを起こります。

  • And if we run it we can confirm our suspicions first by compiling

    そして、我々はそれを実行した場合、我々は確認することができます コンパイルによる最初の私たちの疑惑

  • and then by running and entering an odd number.

    して、実行して、と 奇数番号を入力します。

  • This is nothing new, but this is actually

    これは、新しいものではありません これは実際には

  • an example of a bug that can exist within a larger program that

    バグの例することができます より大きなプログラム内に存在すること

  • becomes harder to track down.

    追跡が困難になります。

  • Even though we know what the issue is, the true crux of the matter

    私たちはどのような問題を知っているにもかかわらず 、問題の真の核心であります

  • might be trying to identify specifically where the error occurs,

    識別しようとしている可能性があります 具体的にどこでエラーが発生し、

  • identifying what that problem is, and then fixing it.

    何その問題を特定します であり、そしてそれを固定します。

  • So I provide this as an example of what might be something

    だから私は、例としてこれを提供 何かが何であるかの

  • that we already know but can be buried within other elements of the code.

    我々はすでに知っているが、埋め込むことができること コー​​ドの他の要素の中。

  • >> So opening this other source code file as an example,

    >> したがって、この他のソースを開きます 例として、コードファイル、

  • this division problem is now part of a larger program.

    この部門の問題は今あります 大きなプログラムの一部。

  • Still might be a little bit contrived and we

    まだ少しあるかもしれません ビット不自然と我々

  • might be able to easily identify it, especially

    簡単にすることができるかもしれません 特に、それを識別

  • since we were just discussing this, but we

    私達はちょうどだったので、 我々はこれを議論するが、

  • can figure out that this problem can exist on a larger scale.

    この問題ことを把握することができます より大きな規模で存在することができます。

  • If I compile this and now run it, enter an odd number,

    私は今、これをコンパイルした場合 それを実行し、奇数番号を入力し、

  • we can see that we don't get precisely the output that we may have expected.

    我々は正確に取得しないことがわかります 我々が期待している可能性があり、出力。

  • In this particular case, we might say that we

    この特定の場合において、 我々は、我々が言うかもしれません

  • want to count all the numbers from 1 up to some specific number.

    すべての数字をカウントします 1からいくつかの特定の数まで。

  • And we can see that we have a variety of issues

    そして、我々は、我々を見ることができます さまざまな問題を持っています

  • here if we're putting simply 0 and 1 when we provide an input of 5.

    ここでは、単に0とを入れている場合 1私たちは5の入力を提供します。

  • >> So we already know that there's a problem here.

    >> だから我々はすでに知っていること ここでの問題があります。

  • But we may not know precisely where this issue actually exists.

    しかし、我々は正確には知らないかもしれません この問題は、実際に存在する場合。

  • Now, one of the ways that we can try to fix this

    さて、次のいずれかの方法こと 我々はこの問題を解決しようとすることができます

  • is something that we've already been introduced to,

    私たちがきたものです 既にするために導入され、

  • we can just use it on a larger scale.

    私たちは大規模にそれを使用することができます。

  • On line 14 we have this printf function which

    14行目では、我々はこれを持っています printf関数します

  • allows us to print out the state of various pieces of information.

    私たちは状態をプリントアウトすることができます 各種情報の。

  • And this is something that you should leverage within your program

    そして、これは何かであることを プログラム内で利用してください

  • to try to figure out exactly what's happening in various lines of code.

    です正確に何を把握しようとします コー​​ドの様々なラインで起こっ。

  • >> So even if this is not the final output that we actually

    >> これはない場合であっても 最終的な出力実際に我々

  • want to produce out of this program, we still

    外に演出したいです このプログラム、まだ我々

  • might have some debug statements where we

    いくつかのデバッグを持っている可能性があります ステートメントたち

  • can try to figure out precisely what is happening inside of our code.

    正確に何を把握しようとすることができます 我々のコードの内部で起こっています。

  • So in this case I will printf with a debug tag.

    したがって、この場合、私はなります デバッグタグが付けられたのprintf。

  • In this case this is just a debug string that I'm

    この場合、これはただです 私は、デバッグ文字列

  • outputting so that it becomes very clear in the output of my code

    それは非常になるように出力します 私のコードの出力で明らかに

  • what it is that I want to show.

    何それは私が表示したいということです。

  • And output here, the number that we have computed.

    そして、ここで出力、数 我々が計算されていること。

  • >> In this case, I might want to know precisely what is happening

    >> この場合、私がしたいことがあります 正確に何が起こっているか知っています

  • before and after some specific computation

    前と後のいくつかの 具体的な計算

  • so I might use a printf before and after that line of code.

    私は前のprintfを使用する場合があります そのコード行の後。

  • In this case I could even make it a little bit more clear

    この場合、私も作ることができます それもう少し明確に

  • by saying debug before and debug after so

    前にデバッグを言って デバッグ後にそう

  • that I don't confuse myself with multiple lines that look identical.

    私は自分自身を混同しないこと 同じに見える複数の行。

  • Now, if we recompile this and run it, enter a number like 5 again,

    今、私たちは、このファイル名を指定して実行を再コンパイルする場合 それは、再び5のように番号を入力し、

  • we can see that we have now output before and after

    我々は持っていることがわかります 今の前と後の出力

  • and find that we have not done a clear division or a clear having

    私たちは行っていないことがわかります 明確な部門または有する透明

  • of the number that we actually want to do.

    私たちの数の 実際にやってみたいです。

  • >> Now, in this case, this is not really a clear output.

    >> 今、この場合、これは 本当にクリア出力。

  • It's not really a clear outcome that we want out of this particular program.

    それは本当に明確な結果ではないこと 我々は、この特定のプログラムの外にしたいです。

  • And this is, again, a little bit contrived.

    そして、これは、再び、あります 少し不自然。

  • But perhaps one of the things that we could

    しかし、おそらく1 物事我々はできます

  • do if the specification said that we want to divide this by 2

    仕様が言った場合の対処 我々は2で、これを分割したいこと

  • and add 1-- so in other words, we want to round up--

    およびその他でそう1--追加 言葉は、私たちはup--丸めます

  • then we might know that we could do that particular thing in this case.

    その後、我々は我々が行うことができることを知っているかもしれません この場合、その特定の事。

  • >> Now, here we know that we will be able to add 1 to our halved number.

    >> さて、ここで我々はなりますことを知っています 私たちの半分の数に1を追加すること。

  • Let's recompile this and confirm that this

    それでは、これを再コンパイルしてみましょう このことを確認します

  • is behaving the way that we want to.

    我々が望むように動作しています。

  • We can see that now before having we have the number 5,

    私たちは今、前にそれを見ることができます 私たちは数5を持っていました、

  • after having we have the number 3.

    した後、我々は数3を持っています。

  • Which, according to our specification, is what we wanted to do.

    どの、私たちの仕様に応じて、 私たちがやりたいことです。

  • But if we look at the output here we can see

    しかし、私たちが見ている場合 出力は、ここでは見ることができます

  • that we might have another bug altogether, which is

    我々は別のものを持っている可能性があること で完全にバグ、

  • that we are starting our count from 0.

    我々は0から我々のカウントを開始していること。

  • Now again, this is something that we have seen in the past

    今再び、これは何かであります 我々は、過去に見てきたこと

  • and we can fix quite readily.

    我々は非常に容易に修正することができます。

  • But in this case we also had the benefit of using the printf statement directly

    しかし、この場合、我々はまた、利益を有していました 直接printf文を使用します

  • inside of the for loop to know precisely where that error was occurring.

    以下のためのループの内側に正確に知っています どこでそのエラーが発生しました。

  • >> So printf statements are very useful in helping

    >> だからのprintf文は、 うえで非常に有用

  • you determine where precisely in your source code

    あなたは場所を決定 正確にソースコードに

  • a specific error is occurring.

    具体的なエラーが発生しています。

  • And it's also important to realize that as we're writing code,

    そして、それは実現することも重要です 私たちはコードを書いているように、その、

  • we might have assumptions about the state of a program

    我々は仮定を持っている可能性があります プログラムの状態について

  • or we might have assumptions about what part of the program

    または私達は仮定を持っている可能性があります プログラムのどの部分について

  • is actually correct or incorrect.

    実際に正しいか間違っています。

  • When later on as we build on that program

    ときに、後に、私たちのように そのプログラムの上に構築

  • and make it part of a complex and larger program,

    その一部にします 複雑で大きなプログラム、

  • that we realize that some aspect of that is actually buggy.

    我々はそのいくつかの側面を実現すること そのことを実際にバグがあります。

  • >> Using printf can really help narrow down and identify

    >> printf関数を使用すると、実際に助けることができます 絞り込むと識別

  • the regions of a program that may not be behaving exactly the way that we

    プログラムの地域ということではないかもしれません まさに我々の方法を振る舞うこと

  • expect based on our assumptions.

    私たちの仮定に基づいて期待しています。

  • But there's other tools available as well

    しかし、他のあります 同様に使用可能なツール

  • that allow us to try to figure out where an error is occurring.

    それは、私たちが理解しようとすることができます エラーが発生している場所を。

  • And also, specifically, what things are happening inside of the program.

    そしてまた、具体的には、どのようなもの プログラムの内部で起こっています。

  • So using printf is very useful when we want

    だからprintf関数を使用することは非常にあり 便利なときに私たちが望みます

  • to identify specific areas of a program that have some bug.

    の特定の領域を識別するために いくつかのバグを持っているプログラム。

  • But also becomes tedious after a while.

    しかし、またしばらくすると大変な作業となります。

  • In this case, this is a relatively simple program

    この場合、これは 比較的簡単なプログラム

  • with just one or two variables and it becomes very easy for us

    ただ一つまたは二つの変数を持ちます そして、それは私たちのために非常に容易になります

  • to print out the value of those variables

    値をプリントアウトします これらの変数の

  • in the context of the larger program.

    より大きなプログラムのコンテキストインチ

  • >> But we might have a different program that has many variables

    >> しかし、我々は異なるがあるかもしれません 多くの変数を持つプログラム

  • and it may not be quite so easy to use printf

    そしてそれは非常にではないかもしれません printfのを非常に使いやすいです

  • to try to evaluate what is happening to each one of those variables

    何が起こっているかを評価しようとします これらの変数のそれぞれに

  • as the program is executing.

    プログラムとして実行されています。

  • There's a program that exists called a debugger program.

    存在するプログラムがあります デバッガプログラムと呼ばれます。

  • In this case, the one that we will use is the gnu debugger, or GDB,

    この場合、一つは、我々は、意志 使用は、GDB GNUデバッガですか、

  • that allows us to inspect the internal workings of a program in a much more

    それは、私たちが内部を検査することができます はるか内のプログラムの仕組み

  • detailed way.

    詳細な方法。

  • We can actually execute GDB from the command line

    私たちは、実際に実行することができます コマンドラインからGDB

  • here by simply typing GDB and the command that we want to debug.

    ここで、単にGDBと入力して、 我々はデバッグしたいコマンド。

  • In this case, count.

    この場合、カウント。

  • >> Now this case we can see that it brings us to a prompt that says GDB

    >> 今、この場合、私たちはそのことを見ることができます GDBを言うプロンプトに私たちをもたらします

  • and we can actually execute commands to GDB to actually begin execution

    私たちは、実際にコマンドを実行することができます GDBに実際に実行を開始します

  • of the program, stop it at certain points, evaluate the variables,

    プログラムの、一定で停止 ポイント、変数を評価し、

  • and inspect the variables that exist in the program state

    その変数を検査 プログラム状態で存在します

  • at that particular moment, and so on and so forth.

    その特定の瞬間に、 などなど。

  • It provides a lot of power to us.

    それは、私たちに多くの電力を提供します。

  • >> But it just so happens that the CS50 IDE also

    >> しかし、それはちょうどそう起こります また、CS50 IDEは、

  • provides a GUI, or a user interface, for GDB

    GUIを提供、または GDBのためのユーザインタフェース、

  • that allows us to do this without needing the command line

    それは、私たちがこれを行うことができます コマンドラインを必要とせず

  • interface whatsoever.

    一切のインタフェース。

  • Or at all, even.

    またはまったく、でも。

  • The way that I can access that is by using the Debug button

    私はそれにアクセスすることができる方法 デバッグボタンを使用することです

  • at the very top above the CS50 IDE.

    CS50 IDE上の最上部に。

  • Now, in the past, what we have seen is that we use the command

    今、過去には、我々は何を持っています 見我々はコマンドを使用することです

  • line to compile and then run a program.

    コンパイルして、プログラムを実行するためのライン。

  • The Debug button does both of those steps,

    [デバッグ]ボタンはありません これらのステップの両方、

  • but it also will bring up the Debugger tab on the far right

    それはまた、起動されます 右端の[Debugger]タブ

  • that allows us to inspect a variety properties of the program

    それは、私たちが検査することができます プログラムの様々な特性

  • as it is executing.

    それが実行されます。

  • >> If I click Debug, in this case, it will bring up

    >> 私はこの中で、デバッグをクリックすると、 場合、それが起動します

  • a new tab in the console window at the very bottom.

    コンソールで新しいタブ 一番下にあるウィンドウ。

  • And you can see that this tab has some information at the very top

    そして、あなたは、このタブが持っていることがわかります 一番上にいくつかの情報

  • and we can largely ignore this.

    私たちは、主にこれを無視することができます。

  • But one of the things that we want to notice

    しかし、物事の一つ 私たちは気づくしたいこと

  • is that it outputs the same thing that we

    それを出力することです その私たちは同じこと

  • would get if we tried to run make on the C program in the terminal window.

    私たちがmakeを実行しようとした場合になるだろう ターミナルウィンドウで、Cプログラム。

  • Here we can see it's running Clang and it has a variety of flags

    ここでは、それがクランを実行している見ることができます そして、それはフラグの様々なています

  • and it is compiling our count.c file which was the selected tab at the time

    そして、それは私たちのcount.cファイルをコンパイルしています その時点で選択されたタブでした

  • that I hit Debug.

    私はデバッグを打つこと。

  • >> So this is very useful because now, using this Debug button,

    >> だから、これは非常に便利です 今、このデバッグ]ボタンを使用して、

  • we can see simultaneously compile and then execute the program

    私たちはコンパイルを同時に見ることができます して、プログラムを実行します

  • that we actually want to run.

    私たちは、実際に実行すること。

  • One of the flags that is important in this case we've actually

    重要であるフラグの一つ このケースでは、我々は実際にはしました

  • been using for the longest time but also just did some hand waving at,

    最も長い間使用してきたが また、単に、いくつかの手が手を振っしました

  • which is this one right here.

    これは右ここで、この1です。

  • In clang it says -ggdb3.

    クラングでは-ggdb3氏は述べています。

  • In this case, what we are telling Clang, our compiler,

    この場合、私たちは何をしています クラン言って、私たちのコンパイラ、

  • is that we want to compile our program but also provide

    私たちがコンパイルしたいということです 私たちのプログラムも提供

  • what are called symbol information so that the compiler actually

    どのようなシンボル情報と呼ばれています そのように、実際にコンパイラ

  • has access to a lot of the underlying information contained

    多くのアクセスを持っています 基本となる情報が含まれています

  • within the program.

    プログラム内。

  • Most specifically, the number of functions that I have,

    最も具体的に、数 私が持っている機能の、

  • the names of those functions, the variables, the types

    これらの関数の名前は、 変数、タイプ

  • that those variables are, and a variety of other things that help the debugger

    これらの変数は、と多様であることを デバッガを助ける他のものの

  • perform its operation.

    その操作を実行します。

  • Now, there's something else that's important to mention

    今、何か他のものがあります それは言及することが重要です

  • when we're discussing running a program in this way.

    我々はランニングを議論しているとき このようにプログラム。

  • Notice that it has actually brought up a new tab in our console

    それが実際に持っていることに注意してください 私たちのコンソールで新しいタブを育てました

  • along the bottom.

    下部に沿って。

  • We no longer have to interact directly with the terminal window,

    私たちはもはや対話する必要はありません 直接ターミナルウィンドウで、

  • but this new tab is actually terminal window,

    しかし、この新しいタブがあります 実際にターミナルウィンドウ、

  • it just is specific to the running program that we have created.

    それだけで、実行中に固有のものです 私たちが作成したプログラム。

  • >> Notice that at the bottom, in combination

    >> でそれに注意してください 組み合わせの一番下の、

  • with some output by Clang, the compiler, and GDB, which we can largely ignore,

    クラン、コンパイラによっていくつかの出力と、 私たちは主に無視することができますし、GDB、

  • it actually shows the output of our program at the very bottom.

    実際の出力を示します 一番下に私たちのプログラム。

  • Now, it's important to realize that this one window actually

    今、それが実現することが重要です その実際にこの一つの窓

  • will show you the output from your program

    あなたが表示されます あなたのプログラムからの出力

  • but also can accept input for that program as well.

    しかし、入力を受け入れることができます 同様にそのプログラムの。

  • So notice that it says, please enter a number, which

    だから、言うことがわかり、 番号を入力してくださいします

  • is the same output that we had had in the terminal window before

    私達が持っていた同じ出力があります ターミナルウィンドウの前に持っていました

  • but is now shown in this new tab.

    しかし今、この新しいタブに表示されます。

  • I can input a number and it will actually

    私は、入力数をすることができます そして、それは実際になります

  • function as we expect showing us our debug output, the output that

    機能私たちは私たちを示す期待どおり 私たちのデバッグ出力、出力

  • might be buggy-- as we've seen before-- and at the very bottom

    我々が見てきたようbuggy--されるかもしれません before--と一番下に

  • it actually has some additional output from GDB just saying

    それは実際にいくつかの追加を持ちます GDBからの出力は、単に言って

  • that this program has completed.

    このプログラムが完了したこと。

  • >> Now, as you saw in this particular run through, it wasn't particularly useful.

    >> さて、あなたは、この特定の実行で見たように 通じ、それは特に有用ではありませんでした。

  • Because even though we had the debugger menu come up,

    私達が持っていたにもかかわらず、そのため デバッガのメニューが出てきます、

  • this was still a running program.

    これはまだ実行中のプログラムでした。

  • At no point did actually pause execution for us

    どの時点においても、実際にやりました 私たちのために実行を一時停止

  • to be able to inspect all of the variables contained within.

    の全てを検査することができるようにします 変数は内に含まれます。

  • There's something else that we have to do in order

    何か他のものがあります 私たちは順番に行う必要があること

  • to get GDB to recognize that we want to pause execution of the program

    私たちが望むことを認識することがGDBを取得します プログラムの実行を一時停止します

  • and not just allow it to proceed normally as we would in any other case.

    そしてちょうどそれを進行させません 通常、我々は、他の場合と同じように。

  • >> In order to pause execution at some specific line,

    >> 実行を一時停止するために、 いくつかの特定の行で、

  • we need to create what's called a breakpoint.

    私たちは何を作成する必要があります ブレークポイントと呼ばれます。

  • And a breakpoint is very easily created in the CS50 IDE by taking your mouse

    そして、ブレークポイントは、非常に簡単に作成されます あなたのマウスを取ることによってCS50 IDEで

  • and clicking directly to the left of some specific line number.

    そして左に直接クリック いくつかの特定の行番号の。

  • Once I do that, a red dot appears which indicates that that line is now

    私はそれを行うならば、赤い点が表示されます その行が現在であることを示しています

  • a breakpoint, and the next time that I run GDB,

    ブレークポイント、および 私は、GDBの次回実行時、

  • it will stop execution at that breakpoint

    それは実行を停止します そのブレークポイントで

  • when it reaches that line of code.

    それは、コードのその行に到達したとき。

  • >> Now, this is an important thing to realize.

    >> さて、これは重要です 実現するもの。

  • That it's not necessarily the case that every line of code

    それは必ずしもないことを ケースのコードのすべての行

  • is actually accessible.

    実際にアクセス可能です。

  • If I were to create a function up here, for example,

    私が作成した場合 ここまでの機能、例えば、

  • void f, and just do a print line here, hello world,

    Fを無効にし、ちょうど印刷を行います ここではライン、Hello Worldの、

  • if I never call this function, it will be the case that if I set a breakpoint

    私はこの関数を呼び出すことはありませんならば、それはなります 私はブレークポイントを設定した場合、ケースになります

  • here the function will never be called and therefore

    ここでの機能は決して したがってと呼ばれること

  • this particular breakpoint will never actually pause

    この特定のブレークポイント 実際に一時停止することはありません

  • execution of the program.

    プログラムの実行。

  • >> So let's say that I correctly create a breakpoint on some line of code

    >> それでは、私が正しく作成することとしましょう コー​​ドのいくつかの行にブレークポイント

  • that will actually be executed.

    それが実際に実行されます。

  • Now, in this case, this is the first line in the main function

    今、この場合、これは main関数の最初の行

  • so it will certainly be the case that as soon as I begin execution

    それは確かにケースになります すぐに私が実行を開始すると

  • the very first line will be reached, GDB will pause execution,

    非常に最初の行は次のようになります 到達、GDBは実行を一時停止し、

  • and then I will be able to interact with the debugger.

    そして私のことができるようになります デバッガと対話します。

  • You can set multiple lines as breakpoints if you would like.

    あなたは、複数行を設定することができます ブレークポイントをご希望の場合。

  • We can also create a line up here in this segment of code

    また、ラインアップを作成することができます ここでは、コードのこのセグメントで

  • that will never be reached.

    それに達することはありません。

  • And we can also set one further below.

    そして、我々はまた、以下のいずれかを設定することができます。

  • The reason that we would want to do this we'll

    理由私たちは希望 我々はよこれをしたいです

  • go into a little bit more detail in just a moment.

    より少しに行きます 一瞬のディテール。

  • So for now, let me just disable these additional breakpoints

    だから今のところ、私はちょうど無効にしましょう これらの追加のブレークポイント

  • so that we can look at what happens when I have

    私たちが見ることができるように 私が持っているときに何が起こります

  • one single breakpoint in my program.

    私のプログラムで一つのブレークポイントを設定します。

  • I have made some changes to this program so I need to save it.

    私はこれにいくつかの変更を行いました プログラムは、私はそれを保存する必要があります。

  • I will click Debug so that I can begin the compilation and then

    私は私ができるように、[デバッグ]をクリックします コンパイルを開始し、その後、

  • execution of the debugger.

    デバッガの実行。

  • We will see that after moments the line that we selected as the breakpoint

    我々は瞬間の後にそれを表示されます 我々はブレークポイントとして選択された行

  • is highlighted in yellow.

    黄色で強調表示されます。

  • We can also notice that in the upper right in the Debug panel

    また、中にいることに気づくことができます デバッグパネルの右上

  • that the Pause icon has turned into a little Play icon.

    一時停止のアイコンが変わったこと 少しプレイアイコンに。

  • This means that we have paused execution in this particular case,

    これは、我々が一時停止したことを意味します この特定の場合に実行、

  • and hitting the Play button will allow us to resume execution

    そして、再生ボタンをします打ちます 私たちが実行を再開することができます

  • at that specific point.

    その特定の時点で。

  • >> Notice that there's a couple of other buttons available in this Debug panel

    >> 他のカップルがあることに注意してください このデバッグパネルで使用可能なボタン

  • as well.

    同様に。

  • Step Over, which allows me to execute that one line of code

    に私を可能にする、ステップオーバー コー​​ドの1行を実行

  • and step over to that line to the next one.

    そしてそれにステップオーバー 次のいずれかの行。

  • Which in this case would mean that the printf statement is executed

    それを意味する。この場合、どの printf文が実行され

  • and it will then pause execution on line 13 like so.

    それは、その後一時停止します そうのようなライン13上での実行。

  • And there's also a Step Into function which

    そして、ステップもあります 関数にします

  • is useful if I have created other functions elsewhere in the source code

    私は他を作成している場合に便利です ソースコード内の他の場所の関数

  • and I want to step into those functions rather than

    私はにステップにしたいです これらの関数ではなく、

  • execute that function as a whole.

    全体としてその機能を実行します。

  • But we'll look more at this Step Into function in just a moment.

    しかし、我々は、このステップでより多くのを見てみましょう 一瞬で関数に。

  • Now, notice some other things that actually exist within this Debug panel.

    さて、いくつかの他の事に気づくこと 実際にこのデバッグパネル内に存在します。

  • We have this panel called the Call Stack which shows us where exactly we are.

    私たちは、コール・スタックと呼ば​​れるこのパネルを持っています これは我々がどこにあるか正確に私たちを示しています。

  • In this case, we are inside of the main function, our script is called count.c,

    ここでは、メインの内側にあります 機能は、私たちのスクリプトがcount.cと呼ばれ、

  • and we happen to be on line 13 column one.

    私たちはあることが起こります 行13列1に。

  • Which is precisely what the highlighted region of the source code

    どちらが正確に何であります ソースコードのハイライト領域

  • indicates as well.

    同様に示しています。

  • >> Now notice that this also shows under the Local Variables section

    >> 今これがまた表示されていることに気付きます ローカル変数セクションの下

  • all of the variables that exists within this function.

    その変数のすべて この関数内に存在します。

  • It's important to note that all of the variables

    それは注意することが重要です 変数のすべてのこと

  • will appear in this Local Variable section within a function

    このローカルに表示されます 関数内の変数のセクション

  • even before they are defined.

    それらが定義されていても前に。

  • We can see here that we have a variable called num that has a default

    我々は持っていることをここで見ることができます デフォルト値を持つ変数と呼ばれるNUM

  • value of 0 and it is of type int.

    0の値は、それがint型です。

  • Now before we actually initialize all of these variables,

    今、私たちが実際に初期化する前に これらの変数の全て、

  • we're not necessarily guaranteed to see a value of 0.

    私たちは必ずしもじゃありません 0の値を参照することが保証。

  • And depending on other executions that you've performed

    そして、他に依存 あなたが実行した実行

  • and the state of your memory when you actually run this program,

    そしてあなたの記憶時の状態 あなたが実際にこのプログラムを実行し、

  • you might find that you don't see values of 0

    あなたがいることを見つけるかもしれません 0の値が表示されません

  • and instead some other crazy numbers.

    その代わりに他のいくつかのクレイジーな数字。

  • But don't worry about that.

    しかし、心配しないでください。

  • It's not going to be relevant until you actually initialize the value.

    それはまで関連することはないだろう あなたが実際に値を初期化します。

  • >> Now, in this case, we can see that I have performed some outputs

    >> さて、このケースでは、我々が見ることができます 私はいくつかの出力を実行したこと

  • and I'm right now paused execution.

    私は今の実行を一時停止しています。

  • But in this case, what I really want to do

    しかし、この場合には、どのような 私は本当にやりたいです

  • is to now step over this line of code so that I can actually

    今、この行をステップオーバーすることです コー​​ドのように、私は実際にできること

  • query the user for that int that we want to use in our program.

    そのint型のためにユーザに問い合わせること 我々は我々のプログラムで使用します。

  • Now, in this case, when I hit Step Over, notice

    今、この場合には、時 私は、予告、ステップオーバーヒット

  • that the Pause-- rather the Resume button has changed to this Pause button

    むしろPause--再開こと ボタンを押すと、この一時停止ボタンに変更されました

  • because this code is actually executing.

    このコードが実際に実行されているので。

  • What is happening right now is that it is

    何が起こっている 今それがあるということです

  • waiting for us to input some information as we can see by our output text

    入力に私たちのためにいくつかの情報を待っています 私たちは、出力テキストで見ることができるように

  • at the very bottom.

    一番下にあります。

  • >> So right now this is not actually paused even though it sort of appears

    >> だから、今、これは実際にはありません それは一種の表示されていても、一時停止

  • to be because nothing is happening.

    何が起こっていないためであると。

  • But it just so happens that in my specific case, on line 13,

    しかし、それはちょうどので、その中でも起こり 私の特定の場合、13行目、

  • I'm waiting for user input and so GDB is not

    私は、ユーザーを待っています 入力ので、GDBではありません

  • able to inspect a program as it is running.

    検査することができます プログラムは、それが実行されています。

  • Now, the next time that I enter some input--

    さて、次回はその 私はいくつかを入力input--

  • so I'll enter the number 5 as we've seen in the past,

    私は数5を入力します 我々が過去に見てきたように、

  • hit Return-- we notice that, immediately, GDB pauses

    我々はそれに気づくReturn--ヒット、 すぐに、GDBは一時​​停止します

  • and again highlights the next line.

    そして再び次の行を強調表示します。

  • >> But notice that now, as a result of our inputting a value,

    >> しかしとして、今ことに気づきます 私たちが値を入力した結果、

  • we have updated that value inside of our local variables, which

    我々は内部のその値を更新しました これは私たちのローカル変数の

  • is very useful to know precisely what that number was in memory.

    正確に知っていることは非常に便利です その数は、メモリに何でした。

  • Now, I can allow this program to continue

    今、私はこれを許可することができます 継続するためのプログラム

  • playing until the end of its execution by hitting Resume.

    その終了時まで遊んで 再開を押すことで実行。

  • We can see that, very quickly, just does program finish executing

    私たちは、非常に迅速に、それを見ることができます 単に実行中のプログラムの仕上げを行います

  • with the same output that we had before.

    我々は以前と同じ出力を持ちます。

  • The debugger closes and now this program has stopped completely.

    デバッガが閉じ、今、この プログラムは完全に停止しました。

  • >> I show that only for the purposes of seeing what

    >> 私だけのためにあることを示します 何を見ての目的

  • happens when we actually hit Resume.

    私たちが実際に再開を打ったときに発生します。

  • But we actually are going to want to go back into this program

    しかし、我々は実際に行っています このプログラムに戻りたいです

  • so that we can try to debug precisely what is happening.

    我々は、デバッグしようとすることができるように 正確に何が起こっているのか。

  • Now that I'm using the debugger I may not need these debug printf statements.

    今私は私がよいデバッガを使用していること これらのデバッグのprintf文を必要としません。

  • So I could remove them as I will do now.

    私は今行いますように、私はそれらを削除することができます。

  • Just to go back to our simpler code that we had a moment ago.

    ただ、私たちは単純に戻ります 私たちは一瞬前に持っていたコード。

  • >> Now, when I save the program and execute it,

    >> 今、私は保存するとき プログラムし、それを実行し、

  • it will again go to that initial breakpoint that I had on line 11

    それは、再びその初期に移動します 私は11行目に与えたブレークポイント

  • and I will be able to inspect my variables as I want to do.

    私は検査することができるようになります 私の変数は私がやりたいよう。

  • It just so happens that this part isn't very interesting.

    それはちょうどので、このことが起こります 一部は非常に興味深いものではありません。

  • And I know with that I'm going to print out this statement--

    そして、私はそのつもりだと知っています このstatement--を印刷します

  • please enter a number-- and then I know that I'm

    number--を入力してください そして私は私がことを知っています

  • going to ask the user for that integer, so perhaps I

    ユーザーに尋ねるつもり その整数なので、多分私

  • actually want to move my breakpoint a little bit further down.

    実際に私のブレークポイントを移動します さらに下に少し。

  • You can remove breakpoints by clicking, again, directly

    あなたは、ブレークポイントを削除することができます 直接、もう一度、クリックして

  • to the left of that line number.

    その行番号の左に。

  • That red dot will disappear indicating that that breakpoint is now gone.

    あの赤いドットが示す表示されなくなります そのブレークポイントは現在なくなっていること。

  • >> Now, in this case, execution has been paused

    >> 今、この場合、 実行が一時停止されました

  • and so it's not actually going to resume in that particular instance.

    そしてそれは実際に起こっていません その特定のインスタンスで再開。

  • But I can set a breakpoint a little bit later.

    しかし、私はブレークポイントを設定することができます 少し後で。

  • And when I now resume my code, it will resume

    そして、私は今、再開したとき 私のコード、それが再開されます

  • until the point of that breakpoint.

    そのブレークポイントの時点まで。

  • Again, I hit Resume.

    繰り返しますが、私は再開を打ちます。

  • Doesn't seem like anything is happening but that's

    何のように見えるしていません ある出来事が、それはです

  • because my code is waiting for input.

    私のコードは、入力を待っているので。

  • I will enter a number 5, hit Enter, and now the next breakpoint will be hit.

    私は、数5を入力しEnterキーを押すと、なります 今、次のブレークポイントがヒットします。

  • >> Now in this case, this is the line of code that before we knew

    >> 今、この場合、これは 私たちは知っていた前に、そのコードの行

  • happened to be buggy.

    バギーであることが起こりました。

  • So let's evaluate what happens at this particular point in time.

    それでは、何が起こるかを評価しましょう 時間内に、この特定の時点で。

  • When a line is highlighted, this line has not yet been executed.

    ラインが​​強調表示された場合、この 行がまだ実行されていません。

  • So in this case, we can see that I have a number which--

    したがって、この場合には、我々が見ることができます 私は数を持っていることをwhich--

  • I have an integer with-- called num that has a value 5

    私は整数を持っていますwith-- 値を持っていると呼ばれるNUM 5

  • and I'm going to be performing some math on that number.

    私は実行するつもりです その番号にいくつかの数学。

  • If I step over that, we can notice that the value for num

    私はそれをステップオーバーした場合、我々はできます numのその値に気付きます

  • has changed in accordance with the arithmetic that we've actually done.

    に応じて変更されています 私たちが実際にやった算術。

  • And now that we are inside of this for loop,

    そして今、我々はしていること このforループの内側に、

  • or now that the for loop itself is highlighted,

    または今そのループのための 自身が強調表示され、

  • we see that we have a new variable called i that

    我々は新しいを持っていることを確認 変数iと呼ばれること

  • is going to be used in that for loop.

    ループのためにその中で使用されようとしています。

  • >> Now, remember before that I mentioned that sometimes you're

    >> さて、その私が前に覚えています 時には、あなたがしていることに言及

  • going to see some kind of crazy numbers until-- as default before that number

    狂気の数字のいくつかの種類を見に行きます その番号の前にデフォルトとしてuntil--

  • or that variable is actually initialized.

    またはその変数があります 実際に初期化されました。

  • We can see that precisely here in this variable

    私たちは、正確にそれを見ることができます ここでは、この変数に

  • called i which has not yet been initialized

    私はなかったと呼ばれます まだ初期化されて

  • at the time of highlighting, but we can see

    時の ハイライトが、我々は見ることができます

  • that it has some number that we wouldn't actually expect.

    そのいくつかの番号を持っていること 私たちは実際には期待していません。

  • That's OK.

    それで大丈夫です。

  • Don't worry about it because we have not actually

    ご心配なく 私たちは実際には持っていないので、

  • initialized that number until I step over this line and the value

    私までその数を初期化 このラインと値をステップオーバー

  • i has been initialized to the value 1.

    私は、値を1に初期化されています。

  • >> So to see that that's actually the case, let's step over.

    >> だから、実際にだことを確認します 場合は、のステップオーバーしましょう​​。

  • We can now see that that line has been executed

    我々は今それを見ることができます 行が実行されました

  • and we are now highlighting this printf line.

    私たちは今の強調表示されています このprintfのライン。

  • And we can now see how our values of i and 3 have changed over time.

    そして、我々は今、どのように私たちの価値観を見ることができます iと3は、時間の経過とともに変化しています。

  • This is very useful to do, in fact, is to step over lines repeatedly.

    これは、実際には、行うことは非常に便利です、 繰り返し行をステップオーバーすることです。

  • And you can find what actually happens inside of your for loop

    そして、あなたは実際に何を見つけることができます あなたのforループの内部で起こります

  • and what happens to the variables inside of that for loop

    そして、何が起こるに そのループの内部変数

  • as that program execution occurs one step at a time.

    そのプログラムの実行など 一度に一つの段階で起こります。

  • >> Now, at this point I stepped over just enough

    >> さて、この時点で私は ちょうど十分なステップオーバー

  • that I now am at the end of my program.

    私は今、私のプログラムの終了時だということ。

  • If I step over that, it will actually cease execution

    私はそれをステップオーバーした場合、それはなります 実際に実行を停止

  • as we have seen in the past.

    我々は、過去に見てきたように。

  • Let me restart this yet again so that I can point something else out as well.

    ように私はまだこれを再び再起動してみましょう 私も何かを指摘することができます。

  • In this case, it is now asking me, again,

    この場合には、それは 今再び、私を求めて、

  • for a number which I will again enter.

    私は再び入る数について。

  • But this time I'm going to enter in a larger number so that the for loop

    しかし、この時間は私がで入力するつもりです forループのように、より多く

  • will iterate more times.

    複数回繰り返されます。

  • In this case I'm going to enter a value of 11.

    この場合、私は行きますよ 11の値を入力します。

  • >> Now, again, because I'd set a breakpoint at line 15,

    >> さて、再び、私は設定したいので、 15行にブレークポイント、

  • it's going to highlight that line.

    それは、その行をハイライトになるだろう。

  • We can see that our number 11 is correctly

    我々は、我々のことを見ることができます 数11は正しくあり

  • represented in our local variables.

    私たちのローカル変数で表します。

  • Stepping over that we can now watch what happens to our value of i

    私たちが今見ることができることをステップオーバー 何が私の私達の価値はどうなります

  • as we proceed inside of this for loop.

    我々はループのために、この内部に進むにつれて。

  • It gets incremented every time we reach the top of that for loop.

    これはすべての時間、私たちをインクリメントします そのループのトップに到達。

  • >> Now, one of the things that might be useful to do during execution

    >> そのかもしれないものの今、1 実行中に行うことが有用です

  • of this program is really to actually change the variables midstream

    このプログラムの実際に実際にあります 変数の途中を変更

  • to see what happens to my program.

    私のプログラムに何が起こるかを確認します。

  • In this case I can actually double click the value.

    この場合、私は実際にすることができます double値をクリックします。

  • Notice that it becomes a text field.

    それがテキストフ​​ィールドになっていることに注意してください。

  • Now I can enter a different value altogether

    今、私は入力することができます 別の値を完全

  • to see how my program behaves when I've changed that variable.

    私のプログラムがどのように動作するか確認してください 私はその変数を変更したとき。

  • >> Now in this case, the variable i now contains the value 10

    >> 今、この場合には、変数 私は今値が含まれています10

  • but the program is still paused in execution.

    しかし、プログラムがまだあります 実行中に一時停止しました。

  • When I step over, I see that i-- the value i which I entered as 10

    私はステップオーバーすると、私はそれを参照してくださいi-- 私は10として入力された値I

  • is now greater than the value of num which immediately causes the for loop

    今NUMの値よりも大きいです これはすぐにループの原因

  • to stop executing.

    実行を停止します。

  • Now that's not the only reason why you would

    今では唯一ではありません 理由は、あなたが希望

  • want to modify the variable in place.

    場所に変数を変更したいです。

  • You might actually want to try to modify it so

    あなたが実際にお勧めします ので、それを修正しようとします

  • that you can continue execution of a loop

    あなたが続けることができること ループの実行

  • or so that you can modify some value before it

    またはそのように変更することができます その前にいくつかの値

  • reaches some specific set of arithmetic that you are about to perform.

    演算のいくつかの特定のセットに到達します あなたが実行しようとしていること。

  • So now that we've actually changed the value of i

    だから今、私たちが実際にしたこと iの値を変更し

  • as the program was executing, it caused the for loop

    プログラムとして実行していました、 それはループのために引き起こされます

  • to quit prematurely because all a sudden i happened

    ので、途中で終了します 私は起こった突然

  • to be greater than the value of num.

    NUMの値よりも大きくします。

  • Meaning that that for loop no longer needed to be executed.

    意味そのループのそれなし 長く実行する必要がありました。

  • Further, it happened to be the case that we changed the value of i

    さらに、それがあることを起こっ 我々は、iの値を変更した場合

  • when the line 17 was highlighted which was the point in time

    17行が強調表示されたとき 時点でした

  • that the for loop execution was actually being evaluated.

    ループ実行のためにその 実際には評価されていました。

  • If I had changed the value of i on a different line, say 19,

    私は、の値を変更した場合 私は別の行に、19を言います

  • we would have seen different behavior because line 19 would

    我々は異なる見ているだろう 動作ライン19になるため

  • have executed before the loop condition was reevaluated.

    ループの前に実行しました 条件が再評価されました。

  • >> Now at this point, I'm, again, at the end of this program

    >> 今、この時点で、私は、再び、 このプログラムの終わりに

  • and I can allow this to proceed to allow my program to quit naturally.

    そして私はこれがに進むできるようにすることができます 私のプログラムが自然に終了することができます。

  • But there's a couple of things that are important to take away

    しかし、物事のカップルがあります 奪うために重要であること

  • from this particular discussion.

    この特定の議論から。

  • You need to evaluate your own assumptions

    あなたが評価する必要があります 独自の前提条件

  • about how the code should be behaving.

    方法についてのコードは動作しなければなりません。

  • Any time you think that some piece of code you know happens to work,

    あなたには、いくつかの作品だと思いますいつでも あなたが知っているコードが動作するように起こるの、

  • that might be a red flag to go back and evaluate and be sure

    それは行くために赤い旗であるかもしれません 背中と評価してください

  • that your assumption of how that code is operating

    あなたの仮定のこと どのようにコードが動作しています

  • is actually true to how it is expressed in your source code.

    それがどのように実際には真であります ソースコードで表されます。

  • >> But even more to point was when we were using the debugger.

    >> しかし、さらに点にあった場合は 私たちは、デバッガを使用していました。

  • You can put breakpoints at different lines of code

    あなたはブレークポイントを置くことができます コー​​ドの異なるラインで

  • which will cause the debugger to pause execution at each of those lines

    これにデバッガを引き起こします これらの行のそれぞれで実行を一時停止

  • so that you can evaluate the memory or even change it in place.

    あなたが評価できるように でもメモリや場所に変更します。

  • And again, remember that you can create multiple breakpoints so that you

    そして再び、あなたができることを覚えておいてください あなたように、複数のブレークポイントを作成します

  • can also resume execution, skip over large portions of code,

    また、実行を再開することができ、スキップ コー​​ドの大部分の上、

  • and it will automatically pause at the next breakpoint.

    それが自動的になります 次のブレークポイントで一時停止。

  • >> There's actually more advanced features of the debugger as well.

    >> 実際にはより高度なあります デバッガの機能なども。

  • But we'll have to refer you to some subsequent videos

    しかし、私たちはあなたを参照する必要があります いくつかの後続の動画へ

  • in order to really tease apart how to use those particular functions.

    実際にどのように離れていじめるために これらの特定の機能を使用しています。

  • For now, thank you very much for watching and good luck debugging.

    ここでは、のためにどうもありがとうございました 見て、幸運のデバッグ。

DAN ARMENDARIZ: Hi.

DANアルメンダリス:こんにちは。

字幕と単語

ワンタップで英和辞典検索 単語をクリックすると、意味が表示されます