字幕表 動画を再生する 字幕スクリプトをプリント 翻訳字幕をプリント 英語字幕をプリント GDB, the GNU Project Debugger, is a powerful debugging tool for C, [Powered by Google Translate] GDBは、GNUプロジェクトデバッガは、C言語のための強力なデバッグツールです along with many other languages. 他の多くの言語と一緒に。 It allows you to poke around inside your C programs while they're executing, それは、彼らが実行している間、あなたは、あなたのCプログラムの内部につつくことができます and it also gives you the opportunity to see exactly what happens そしてそれはまた、あなたに何が起こるかを正確に確認する機会を与えてくれます when your program crashes. ときにあなたのプログラムがクラッシュします。 It's pretty nifty, right? それは右、かなり気の利いたのですか? GDB is free software, and it runs on many popular UNIX and GDBはフリーソフトウェアであり、そしてそれは多くのポピュラーなUNIX上で動作し、 Windows-based operating systems, so it's a very widespread tool. Windowsベースのオペレーティングシステムなので、それは非常に広範なツールです。 >> You should learn to love it. >> あなたはそれを愛することを学ぶべきである。 GDB pros have a much easier time tracking down bugs GDBのプロがバグを追跡するくらい簡単に時間を持っている than those who muddle through using guesses 推測を使用して何とかやっていく人より and infinite amounts of printout statements. と印字文の無限の量。 GDB is a command-line tool, which means you can interact with it in a terminal GDBでは、端末内にそれと対話できることを意味し、コマンドライン·ツールです issuing commands via the keyboard instead of clicking buttons with your mouse. マウスでボタンをクリックする代わりにキーボードを使ってコマンドを発行する。 >> To start up GDB, you literally just type gdb at the prompt and hit enter. >> GDBを起動するには、文字通りプロンプトとヒットで入力するだけgdbは入力します。 You'll see some lines printed out to the screen あなたは、画面に出力いくつかの行が表示されます showing you the version of GDB that you're running, 、あなたが実行していることをGDBのバージョンを示す its copyright information, and at the end you'll see the GDB prompt: (gdb). その著作権情報、および終了時には、GDBのプロンプトが表示されます:(GDB)。 This lets you know that GDB is ready for commands. これは、GDBコマンドの準備ができていることを知ることができます。 At this point, the most important thing to know how to do is quit. この時点で、実行する方法を知るために最も重要なことはやめています。 Fortunately, this is pretty simple. 幸いなことに、これは非常に単純です。 The quit command does just that. quitコマンドは、その通りの動作をします。 As a shortcut, you can just use q too. ショートカットとして、あまりにもqを使用することができます。 As fun as booting up GDB and then promptly quitting is, GDBを起動してから、速やかに終了として楽しみがあるように、 let's now talk about using GDB to help debug a program. プログラムをデバッグするためにGDBを使っての話を今してみましょう。 >> To start, I've got a program here in factorial.c >> 開始するには、私はここfactorial.cのプログラムを持っている that gets an int and attempts to compute its factorial. それはintを取得し、その階乗を計算しようとします。 In case you haven't seen factorials before or don't remember them, ケースでは、前の階乗を見ていないか、またはそれらを覚えていない The factorial of the number n is equal to the product of n--(n - 1), (n - 2), and so on-- 数値の階乗n nの積に等しい - (n - 1)には、(n - 2)のように - until you hit 1. あなたは1を打つまで。 Therefore, the factorial of 3 is 3 * 2 * 1, or 6, したがって、3の階乗は、3 * 2 * 1、または6である and the factorial of 4 is 4 * 3 * 2 * 1, or 24. と4の階乗は4 * 3 * 2 * 1、または24です。 The factorial of zero is an odd case, it's 1, ゼロの階乗が奇数の場合、それは、1だ and the factorials of negative integers aren't defined. と負の整数の階乗は定義されていません。 Anyway, something about my factorial program is funky. とにかく、私の階乗プログラムについての何かがファンキーです。 When I run it, it prints out weird numbers that have nothing to do with factorials. 私はそれを実行すると、階乗とは何の関係もない奇妙な数字を出力します。 >> So, we can use GDB to help figure out what's going on. >> そこで、我々は何が起こっているか把握するために、GDBを使うことができます。 GDB operates on executable files, GDBは、実行ファイルで動作します which are the binary files produced by the compilation process. これは、コンパイルプロセスによって生成されたバイナリファイルです。 That is, we can't run GDB on our .c or .h source code files like factorial.c. つまり、私たちは私たちのようなfactorial.c cや。hのソース·コード·ファイル上でGDBを実行することはできません。 We want to run it on just factorial instead. 我々だけではなく階乗でそれを実行したい。 If the program required any command-line arguments, プログラムは、すべてのコマンドライン引数が必要な場合は、 this is where we'd specify them. これは我々がそれらを指定したいところです。 In this case, factorial doesn't require any command-line arguments, この場合、階乗は、すべてのコマンドライン引数を必要としません so we just type run or r for short. ので、単に略して実行またはrを入力します。 >> This will start the factorial program running. >> これは階乗のプログラムを実行して起動します。 When the program stops running, I'll get my GDB prompt back. プログラムの実行が停止したとき、私は、GDBが戻ってプロンプトを取得します。 Okay, let's try the same thing again, factorial of 4. さて、のは4の階乗を、再び同じことを試してみましょう。 All right, we see that we're getting the same kind of junk here in GDB. すべての権利、私たちは、GDBでここにジャンクの同じ種類を取得していることがわかります。 Now that the program has finished, 今すぐプログラムが終了したことを、 we can't go in and access any of its state, 我々は、に行くと、その状態のいずれかにアクセスすることはできません so we'll need to start it running again before we can see what's happening. ので、我々は何が起こっているかを見ることができる前に、それが再び動作して起動する必要があります。 However, we need a way to stop it while it's in the middle of its run. しかし、我々は、その実行の途中にある間、それを停止する方法が必要です。 >> To do that, we use what's called a breakpoint. >> そのためには、ブレークポイントと呼ばれるものを使う。 Breakpoints tell GDB to pause the program at a particular function or source code line ブレークポイントは、特定の機能またはソースコードの行でプログラムを一時停止するにはgdbを伝える so that we can examine the state of the program, ので、我々はプログラムの状態を調べることができる、 the values of variables, the state of memory and such, at that point. 変数の値は、メモリの状態など、その時点で。 Since I don't really know where things are going wrong, 私は本当に物事がうまく行くのかわからないので、 >> I just want to start debugging right at the very beginning, >> 私はちょうど、右の冒頭にデバッグを開始したい right when main begins. 右のときにメインが開始されます。 We'll set a breakpoint at the beginning of main using the break command. 我々は、breakコマンドを使用して、メインの先頭にブレークポイントを設定してみましょう。 We can also use b to abbreviate break. また、休憩を短縮するためにbを使用することができます。 Now let's start the program running again. 今すぐプログラムを再度実行してみましょう。 Here we are at the beginning of main, just like GDB tells us. ここでは、GDBが教えてくれるのと同じように、メインの先頭に来ます。 The line of code that's about to execute but hasn't yet 実行しようとしてだが、まだ持ってコードの行 is the printf line. printfの行です。 We can tell GDB to execute this line of code and go to the next line 我々は、次のコード行を実行し、次の行に移動するためにGDBを伝えることができます with the next or n command. 次のコマンドを使用して、またはn。 >> All right, now GDB tells us that we're on the GetInt line. >> 今ではすべての権利は、GDBは、我々は場合、getIntラインにしていることを教えてくれる。 I know that it seems like the printf line didn't run 私はprintfの行が実行されなかったように思えることを知っている since we don't see "Enter a positive integer" print out on the screen, 我々が見ていないので、画面上でプリントアウト "正の整数を入力してください" but it did actually run. それは実際に実行した。 What we're seeing is the operating system suppress writing anything to the screen 我々が見ているオペレーティングシステムが画面には何も書いて抑制され until it absolutely has to, which why debugging with printouts それは絶対に理由をプリントアウトを使用してデバッグどちらかになるまで can sometimes seem unreliable. 時には頼りないように見えることができます。 Anyway, let's again go to the next line of code and enter in an int. とにかく、もう一度、コードの次の行に移動し、int型で入力してみましょう。 Again, let's type 4. 繰り返しになりますが、4型みましょう。 So this looks weird. We're on line 12 according to GDB, だから、これは奇妙に見える。我々は、GDBによると、12行目にしている but the next line that's about to execute is just a curly brace. が、実行しようとしてだ次の行では、単に中括弧です。 >> That just means we're at the end of a loop, our do while loop in fact, >> ちょうど私達が、ループの終わりにしていることを意味し、私たちは、実際にはDo Whileループ and GDB is telling us that the termination condition, namely none less than zero, とGDBは、ゼロ未満つまりなにも、その終了条件を告げてされていません will execute next. 次に実行される。 If this ever gets a little confusing, これは今まで少し混乱取得した場合、 we can pull up the source code in GDB with the list or l command. 我々は、リストまたはlコマンドを使用して、GDBのソースコードを引き出すことができます。 This prints out the source code これは、ソースコードを出力 that's centered around the line that we're currently on. それは、我々は現在の通貨た行を中心だ。 If we type list or l again, we'll see the next set of lines print out. 我々は再びリストまたはlを入力した場合、我々は次の行セットは、プリントアウトが表示されます。 We can do this until we hit the end of the file. 我々は、ファイルの終わりに到達するまでの間、我々はこれを行うことができます。 >> To get back to where we were, we can supply list with a line number, >> 我々のところに戻って取得するために、我々は、行番号でリストを提供できます in this case, line 12. この場合は、12行目。 Anyway, let's move on. とにかく、先に進みましょう。 Now we're on the 4 loop. 今、私たちは、4ループにしている。 Let's make sure that our num variable contains 4. Let 'sは、私たちのnum変数が4に含まれていることを確認してください。 We do this with the print, or p, command. 我々は、印刷、またはp、次のコマンドを使ってこれを行う。 So, GDB tells us that num is indeed storing 4, as we expected. だから、GDBは我々が予想通りnumは確かに、4を格納していることを教えてくれる。 The $1 that GDB prints out is a special GDB variable GDBが出力している1ドルは、特別なGDBの変数です that is now set to store the number 4 as well. それは今だけでなく、数字の4を格納するために設定されています。 You can ignore this for now, but these GDB variables come in super handy あなたは、今のところこれを無視することができますが、これらのGDBの変数はスーパー便利になる in more advanced cases when you want to recall what you've done in the past. あなたが過去に何をやったかを思い出して欲しい、より高度な場合は、この限りでない。 Anyway, moving on with next, we see that we start moving through the for loop. とにかく、次の移動させた、我々はforループを介して移動を開始していることがわかります。 Let's keep going through here with n bit by bit. ビットにより、nビットでここを通る続けるましょう。 Rather than typing n each time, you can also just hit enter. むしろnを入力するたびにするのではなく、また、単にEnterを打つことができます。 When you hit enter without typing anything, GDB just repeats the previous command. 何も入力せずにEnterを押すと、GDBは直前のコマンドを繰り返します。 So now we've hit the printf call. だから今我々は、printfの呼び出しをヒットしました。 It looks like we've indeed gone through our for loop 4 times, それは、我々は確かにループのための私達の通って4回行ってきたように見える which is what we want to do in order to multiply by 1, 2, 3, and 4. これは、我々は1、2、3、4を掛けるために、何をしたいです。 >> Everything seems like it's working, >> すべてのものは、それが働いているように思えるが、 except when we hit next again we get this huge number instead of 24. 我々は代わりに24のこの膨大な数を得る再び次打ったときを除く。 If we print out the value of factorial using p, 我々は階乗を使用してpの値をプリントアウトする場合は、 we see that factorial does have this massive number in it. 我々は階乗はそれで、この膨大な数を持っていないことがわかります。 Something's definitely going wrong. 何かが間違いなく間違っただろう。 At this point, though, we are almost at the end of the program, この時点で、しかし、我々は、ほとんどのプログラムの最後にあります and it's too late to fix anything. そしてそれは何も修正し手遅れ。 >> However, we can restart the program by typing r again and then y to confirm. >> しかし、我々は確認のためにもう一度、次にy rと入力してプログラムを再起動することができます。 Now we're back at our breakpoint at the beginning of main. 今、私たちは主の初めに私たちのブレークポイントで戻っています。 We know that everything seems to be fine with reading in the n. 我々は、すべてがnに読んでいいようですね。 so we can jump ahead with n. ので、我々は、nと前方にジャンプすることができます。 Alternatively, we can set a new breakpoint after the do while loop 行った後で別の方法として、我々は新たなブレークポイントを設定でき、whileループ and jump there. Let's do that. とそこにジャンプします。ことを行いましょう。 Looks like line 14 comes just after the loop. 14行目は単なるループの後に来るように見えます。 Let's set a breakpoint there. のは、そこにブレークポイントを設定してみましょう。 It's good practice to specify the file name in this breakpoint command これはブレークポイントコマンドでファイル名を指定すると良いでしょう since GDB can get confused if you're working with multiple files. 複数のファイルで作業している場合、GDBは混乱することができるので。 To move ahead of this breakpoint, we'll use the continue or c command. この前のブレークポイントに移動するには、我々は、continue、またはcコマンドを使用します。 >> Okay, here we are at the for loop. >> さて、ここで我々は、forループにあります。 Let's go 1 more line into the for loop, のforループに1以上のラインを行こう、 and then we'll start printing variables to see what's going on. それから私達は何が起こっているか見るために印刷変数を始めましょう。 Let's make sure that i is indeed 1, as expected. レッツは、予想通り、私は、確かに1であることを確認してください。 Yup, that's all good. すべての良いことだうん、。 What about factorial though? 約要因は何があるのでしょう? Whoa, that's no good. 良いことではないおっと、。 We've got a big negative number here. 我々は、ここに大きな負の数を持っている。 How'd that happen? このようなことが起こるのだった? Well, if we look back at the code, まあ、我々はコードを振り返ってみると、 we see that we never initialized it, so we've just got trash in there. 我々は我々がそれを初期化していないことがわかりますので、私たちはただそこにゴミを持っている。 That will definitely throw off our calculation. それは間違いなく私たちの計算をオフにスローされます。 >> Fortunately, we don't have to leave GDB to fix this. >> 幸いなことに、我々はこの問題を解決するためにGDBを離れる必要はありません。 We can initialize it right here and fix it in the code later using the print command. 我々は、右ここでそれを初期化して、後でプリントコマンドを使用してコード内でそれを修正することができます。 We'll initialize it to 1 since the factorials of zero and 1 are both 1, ゼロと1の階乗が共に1であるため、我々はそれを1に初期化します、 and if we initialize it to zero, then we'd always end up with zero as our result. 我々はそれをゼロに初期化した場合とし、我々は常に我々の結果としてゼロになってしまうと思います。 You can set any variable this way, which is super handy. あなたは超便利です任意の変数この方法で設定することができます。 Now, let's continue our program. さて、我々のプログラムを続けていきましょう。 Let's make sure everything's where it's supposed to be. レッツは、それがすることになっている場所すべてがかどうか確かめてください。 Num should be 4, i should be 1, and factorial should be 1 too. numが4になり、iが1であるべきであり、階乗も1である必要があります。 We can shortcut this process and print all of our local variables 我々は、このプロセスをショートカットし、私たちのすべてのローカル変数を印刷することができます with the super-helpful command info locals, 超役立つコマンドinfo地元の人々と、 which prints out all of our in-scope local variables. これは、私たちのスコープ内のすべてのローカル変数を出力します。 Anyway, it looks like everything's good to go. すべてが行ってもいいですのようにとにかく、それが見えます。 >> Let's do another go-around of the loop just to make sure. >> 念のために別のゴーアラウンドループの操作を行いましょう。 Okay, everything looks great. さて、すべてが素晴らしく見える。 Now we can use the continue command to go to the end. 今、私たちは最後に移動し、continueコマンドを使用することができます。 Sweet! 4 factorial printed out 24 as expected. 甘い! 4の階乗予想通り24をプリントアウト。 Now we can go fix this in our code. 今、我々は、コード内でこれを修正するに行くことができます。 Rather than quit out of GDB, we'll use another terminal tab to do this. GDBの外に終了するのではなく、我々はこれを行うには、別の端末タブを使用します。 Going back to our GDB tab, we now need to recompile our executable. 私たちのGDBのタブに戻って、我々は今我々の実行可能ファイルを再コンパイルする必要があります。 One of the best things about GDB is that you don't need to leave GDB to run make. GDBについての最もよい事の一つは、makeを実行するためにGDBを残す必要がないことです。 So that we don't keep hitting the old breakpoints, だから我々は、古いブレークポイントを打っていないという let's disable them with the, you guessed it, disable command. レッツでそれらを無効にするには、あなたはそれを推測、disableコマンドを使用します。 This will disable all of our breakpoints. これは、我々のすべてのブレークポイントを無効にします。 Now, we can restart the program with r and make sure everything's okay. 今、我々はrでプログラムを再起動し、すべてが大丈夫かどうかを確認できます。 Looks like everything's good to go. すべてが行ってもいいですのように見えます。 Factorial of 4 prints out 24, just like we thought. 私たちが思ったのと同じように、24の4プリントの階乗。 GDB is one of the most helpful tools you've got in your toolbox. GDBでは、ツールボックスに持っている最も便利なツールの一つです。 >> There are a ton more things you can do with GDB, >> GDBで行うことができますトン以上のものがありますが、 far more than you can do with simple printouts. あなたはシンプルなプリントアウトで行うことができますよりもはるかに。 Next time your program isn't doing what you'd like, 次回は、あなたのプログラムは、あなたが好きなことをやっていません try running GDB to figure out what's going on inside. 内部で何が起こっているかを把握するために、GDBを実行してみてください。 With a little bit of practice, you'll be able to drill down right on your bug in no time. 練習の少しを使用すると、時間がないのあなたの右のバグをドリルダウンすることができるでしょう。 My name is Nate Hardison. This is CS50. 私の名前はネイトHardisonです。これはCS50です。
B1 中級 日本語 コマンド 実行 プログラム ループ 変数 コード ジーディービー (GDB) 12 2 Amy.Lin に公開 2021 年 01 月 14 日 シェア シェア 保存 報告 動画の中の単語