প্রদত্ত নম্বর বারের পরে পয়েন্টটি পৌঁছানোর পরে কেবল জিডিবি ব্রেকপয়েন্ট কীভাবে করবেন?


85

আমার একটি ফাংশন রয়েছে যা বেশ কয়েকটি বড় সংখ্যক বার বলা হয় এবং অবশেষে সেগফাল্টস।

যাইহোক, আমি এই ফাংশনটিতে একটি ব্রেকপয়েন্ট স্থাপন করতে চাইছি না এবং প্রতিবার যখন এটি ডাকার পরে থামানো চাই না, কারণ আমি বছরের পর বছর এখানে থাকব।

আমি শুনেছি যে আমি counterব্রেকডপয়েন্টের জন্য জিডিবিতে একটি সেট করতে পারি এবং যখনই ব্রেকআপপয়েন্টটি আঘাত করা হয় তখন কাউন্টারটি হ্রাস পায় এবং কেবল counter= 0 হলে ট্রিগার হয়ে যায় ।

এটি কি সঠিক, এবং যদি হয় তবে আমি কীভাবে এটি করব? এই জাতীয় ব্রেকপয়েন্ট নির্ধারণের জন্য দয়া করে জিডিবি কোড দিন।


উত্তর:


163

জিডিবি ম্যানুয়ালটির বিভাগ 5.1.6 পড়ুন । আপনাকে যা করতে হবে তা প্রথমে একটি ব্রেকপয়েন্ট সেট করা হয়, তারপরে সেই ব্রেকপয়েন্ট নম্বরটির জন্য একটি 'উপেক্ষা গণনা' সেট করুন, যেমন ignore 23 1000

ব্রেকপয়েন্টটি উপেক্ষা করার জন্য আপনি যদি কতক্ষণ না জানেন এবং ম্যানুয়ালি গণনা করতে না চান তবে নিম্নলিখিতগুলি সহায়তা করতে পারে:

  ignore 23 1000000   # set ignore count very high.

  run                 # the program will SIGSEGV before reaching the ignore count.
                      # Once it stops with SIGSEGV:

  info break 23       # tells you how many times the breakpoint has been hit, 
                      # which is exactly the count you want

14

continue <n>

এটি একটি সুবিধাজনক পদ্ধতি যা শেষ হিট ব্রেকপয়েন্ট পয়েন্টগুলি এড়িয়ে যায় n - 1(এবং তাই এন-থ্রি-তে আঘাত থামায়):

main.c

#include <stdio.h>

int main(void) {
    int i = 0;
    while (1) {
        i++; /* Line 6 */
        printf("%d\n", i);
    }
}

ব্যবহার:

gdb -n -q main.out

জিডিবি অধিবেশন:

Reading symbols from main.out...done.
(gdb) start
Temporary breakpoint 1 at 0x6a8: file main.c, line 4.
Starting program: /home/ciro/bak/git/cpp-cheat/gdb/main.out

Temporary breakpoint 1, main () at main.c:4
4           int i = 0;
(gdb) b 6
Breakpoint 2 at 0x5555555546af: file main.c, line 6.
(gdb) c
Continuing.

Breakpoint 2, main () at main.c:6
6               i++; /* Line 6 */
(gdb) c 5
Will ignore next 4 crossings of breakpoint 2.  Continuing.
1
2
3
4
5

Breakpoint 2, main () at main.c:6
6               i++; /* Line 6 */
(gdb) p i
$1 = 5
(gdb)
(gdb) help c
Continue program being debugged, after signal or breakpoint.
Usage: continue [N]
If proceeding from breakpoint, a number N may be used as an argument,
which means to set the ignore count of that breakpoint to N - 1 (so that
the breakpoint won't break until the Nth time it is reached).
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.