स्ट्रेस का उपयोग कैसे किया जाना चाहिए?


273

एक सहकर्मी ने एक बार मुझे बताया था कि जब सब कुछ लिनक्स पर डिबग करने में विफल हो गया था तो अंतिम विकल्प स्ट्रेस का उपयोग करना था ।

मैंने इस अजीब उपकरण के पीछे के विज्ञान को सीखने की कोशिश की, लेकिन मैं एक सिस्टम एडमिन गुरु नहीं हूं और मुझे वास्तव में परिणाम नहीं मिले।

इसलिए,

  • यह वास्तव में क्या है और यह क्या करता है?
  • कैसे और किन मामलों में इसका उपयोग किया जाना चाहिए?
  • आउटपुट को कैसे समझा और संसाधित किया जाना चाहिए?

संक्षेप में, सरल शब्दों में , यह सामान कैसे काम करता है?


2
strace -p <pid> आपको बताएगा कि अभी आपके कार्यक्रम के साथ क्या चल रहा है ..... GDB की तुलना में त्वरित और आसान
ernesto

1
मुझे व्यक्तिगत रूप man straceसे पढ़ने में आसान और उपयोगी लगता है। (PS कल से पहले स्ट्रेस के बारे में नहीं जानता था और लिनक्स विशेषज्ञ नहीं था)
अलेक्जेंडर मालाखोव

1
"स्ट्रेस एक सिस्टम कॉल ट्रैसर है" - यह सिर्फ आपको दिखाता है कि आपके प्रोग्राम के परिणामस्वरूप कर्नेल फ़ंक्शन क्या कह रहे हैं (उनके तर्कों के साथ)।
पिथिकोस

जवाबों:


184

स्ट्रेस ओवरव्यू स्ट्रेस
को हल्के वजन के डिबगर के रूप में देखा जा सकता है। यह एक प्रोग्रामर / उपयोगकर्ता को यह पता लगाने की अनुमति देता है कि ओएस के साथ एक कार्यक्रम कैसे बातचीत कर रहा है। यह सिस्टम कॉल और सिग्नल की निगरानी करके करता है।


जब आपके पास स्रोत कोड नहीं है या आप वास्तव में इसके माध्यम से जाने के लिए परेशान नहीं होना चाहते हैं तो गुड का उपयोग करता है।
इसके अलावा, अपने स्वयं के कोड के लिए उपयोगी है अगर आपको GDB खोलने का मन नहीं है, लेकिन सिर्फ बाहरी बातचीत को समझने में रुचि रखते हैं।

एक अच्छा सा परिचय
मैं इस परिचय में भाग गया दूसरे दिन: स्ट्रेस हेल्लो वर्ल्ड


तो क्या होगा अगर आप उस परत के नीचे कुछ का उपयोग करते हैं जो स्ट्रेस मॉनिटर करता है?
पचेरियर

उस स्थिति में @Pacerier check ltrace stackoverflow.com/a/52012215/5884955
prosti

यह निम्न-स्तरीय कार्यक्रमों को डीबग करने के लिए बहुत अच्छा है जो केवल / अधिकतर दिलचस्प सिस्टम कॉल करने के लिए मौजूद हैं, या आपके ओएस क्या करता है यह देखने के लिए नए विकल्पों के साथ प्रयोग करें। यह मूल रूप से एक-बंद प्रयोगों के लिए लॉगिंग / एरर-चेक कोड लिखने की परेशानी से बचाता है। (या यदि आप asm में लिख रहे हैं या ऐसा कुछ है जहाँ कोई अच्छा मौका है तो आपने गलती से गलत आर्गन्स या यहाँ तक कि कॉल नंबर भी पास कर दिया है।) GDB की तुलना में स्ट्रेस बहुत तेज़ है क्योंकि यह आपके लिए गलत कोड देखता है, जैसे -EFAULT(उफ़, रीड-ओनली बफर) या -ENOENT(उफ़, गलत निर्देशिका से भागे जहां रिश्तेदार पथ काम नहीं करता था)।)
पीटर कॉर्डेस

62

सरल शब्दों में, स्ट्रेस अपने रिटर्न कोड के साथ एक प्रोग्राम द्वारा जारी किए गए सभी सिस्टम कॉल का पता लगाता है। फ़ाइल / सॉकेट संचालन और बहुत अधिक अस्पष्ट जैसी चीजों को सोचें।

यह सबसे उपयोगी है यदि आपके पास सी के कुछ कामकाजी ज्ञान हैं क्योंकि यहां सिस्टम कॉल मानक सी लाइब्रेरी कॉल के लिए अधिक सटीक रूप से खड़े होंगे।

मान लीजिए कि आपका कार्यक्रम / usr / स्थानीय / बिन / खांसी है। बस उपयोग करें:

strace /usr/local/bin/cough <any required argument for cough here>

या

strace -o <out_file> /usr/local/bin/cough <any required argument for cough here>

'out_file' में लिखने के लिए।

सभी स्ट्रेस आउटपुट स्टैडर (बीवेयर) में जाएंगे, इसका सरासर वॉल्यूम अक्सर किसी फाइल में रीडायरेक्शन के लिए पूछता है)। सरलतम मामलों में, आपका कार्यक्रम एक त्रुटि के साथ समाप्त हो जाएगा और आप यह देख पाएंगे कि स्ट्रेस आउटपुट में ओएस के साथ इसके अंतिम इंटरैक्शन क्या हैं।

अधिक जानकारी के साथ उपलब्ध होना चाहिए:

man strace

36

स्ट्रेस उन सभी सिस्टम कॉलों को सूचीबद्ध करता है जो उस प्रक्रिया द्वारा की जाती हैं जिस पर इसे लागू किया जाता है। अगर आपको नहीं पता कि सिस्टम कॉल का क्या मतलब है, तो आप इससे ज्यादा माइलेज नहीं ले पाएंगे।

फिर भी, यदि आपकी समस्या में फ़ाइलें या पथ या पर्यावरण मान शामिल हैं, तो समस्याग्रस्त प्रोग्राम पर स्ट्रेस चलाना और आउटपुट को किसी फ़ाइल में रीडायरेक्ट करना और फिर उस फ़ाइल को आपके पथ / फ़ाइल / env स्ट्रिंग के लिए grepping करना आपको यह देखने में मदद कर सकता है कि आपका प्रोग्राम वास्तव में क्या प्रदर्शित कर रहा है जैसा कि आपने उससे अपेक्षा की थी, उससे अलग।


7
और गैर-तुच्छ कार्यक्रमों के लिए यह अक्सर आग-नली से पीने की तरह होता है, इसलिए परिणामों के माध्यम से जाने के लिए आपके पास आपका काम कट जाता है ...
dmckee --- पूर्व-मध्यस्थ बिल्ली का बच्चा

17
strace <prog_name>एक कार्यक्रम का पता लगाने के लिए। strace -o <out_file> <prog_name>एक फ़ाइल में डालने के लिए
Jestin Joy

8
strace प्रोग 2> & 1 | grep ^ open \ (
eisbaw

10
या बस: strace -e open myprogया सभी फ़ाइल संबंधित sys कॉल के लिए:strace -e file myprog
अमित नायडू

17

स्ट्रेस उत्पादन प्रणालियों की जांच के लिए एक उपकरण के रूप में सामने आता है जहां आप इन कार्यक्रमों को डिबगर के तहत चलाने का जोखिम नहीं उठा सकते हैं। विशेष रूप से, हमने निम्नलिखित दो स्थितियों में स्ट्रेस का उपयोग किया है:

  • प्रोग्राम फू में गतिरोध लगता है और अनुत्तरदायी बन गया है। यह gdb के लिए एक लक्ष्य हो सकता है; हालाँकि, हमारे पास हमेशा स्रोत कोड नहीं था या कभी-कभी स्क्रिप्टेड भाषाओं के साथ काम कर रहे थे जो डिबगर के तहत चलने के लिए सीधे-आगे नहीं थे। इस स्थिति में, आप पहले से चल रहे प्रोग्राम पर स्ट्रेस चलाते हैं और आपको सिस्टम कॉल की सूची मिल जाएगी। यह विशेष रूप से उपयोगी है यदि आप क्लाइंट / सर्वर एप्लिकेशन या किसी डेटाबेस के साथ इंटरैक्ट करने वाले एप्लिकेशन की जांच कर रहे हैं
  • जांच क्यों एक कार्यक्रम धीमा है। विशेष रूप से, हम सिर्फ एक नई वितरित फ़ाइल सिस्टम में चले गए थे और सिस्टम का नया प्रवाह बहुत धीमा था। आप '-T' विकल्प के साथ स्ट्रेस निर्दिष्ट कर सकते हैं जो आपको बताएगा कि प्रत्येक सिस्टम कॉल में कितना समय व्यतीत किया गया था। इससे यह निर्धारित करने में मदद मिली कि फाइल सिस्टम क्यों धीमा हो रहा है।

स्ट्रेस का उपयोग करके विश्लेषण करने के एक उदाहरण के लिए इस प्रश्न का मेरा उत्तर देखें ।


15

मैं अनुमति मुद्दों पर डिबग करने के लिए हर समय स्ट्रेस का उपयोग करता हूं। तकनीक इस प्रकार है:

$ strace -e trace=open,stat,read,write gnome-calculator

gnome-calculatorवह आज्ञा कहाँ है जिसे आप चलाना चाहते हैं


8

strace -tfp PID PID प्रक्रिया के सिस्टम कॉल की निगरानी करेगा, इस प्रकार हम अपनी प्रक्रिया / प्रोग्राम स्थिति को डीबग / मॉनिटर कर सकते हैं।


6

स्ट्रेस का उपयोग डिबगिंग टूल के रूप में, या आदिम प्रोफाइलर के रूप में किया जा सकता है।

डिबगर के रूप में, आप देख सकते हैं कि दिए गए सिस्टम कॉल को कैसे कॉल किया गया, निष्पादित किया गया और वे क्या लौटाते हैं। यह बहुत महत्वपूर्ण है, क्योंकि यह आपको न केवल यह देखने की अनुमति देता है कि एक कार्यक्रम विफल रहा, बल्कि एक कार्यक्रम विफल क्यों रहा। आमतौर पर यह सिर्फ घटिया कोडिंग का परिणाम है, जो किसी कार्यक्रम के सभी संभावित परिणामों को नहीं पकड़ पाता है। अन्य बार यह केवल हार्डकोडेड फ़ाइलों के लिए पथ है। बिना स्ट्रेस के आप अंदाजा लगा सकते हैं कि क्या गलत हुआ और कहां। स्ट्रेस के साथ आपको एक सीस्केल का ब्रेकडाउन मिलता है, आमतौर पर सिर्फ रिटर्न वैल्यू को देखकर आपको बहुत कुछ बताया जाता है।

प्रोफाइलिंग एक और उपयोग है। आप इसे व्यक्तिगत रूप से, या कुल के रूप में प्रत्येक syscalls के निष्पादन के लिए उपयोग कर सकते हैं। हालांकि यह आपकी समस्याओं को ठीक करने के लिए पर्याप्त नहीं हो सकता है, यह कम से कम संभावित संदिग्धों की सूची को बहुत कम कर देगा। यदि आप एक फ़ाइल पर बहुत सारे फ़ोपेन / करीबी जोड़े देखते हैं, तो आप संभवतः लूप के प्रत्येक निष्पादन को खोल सकते हैं और बंद कर सकते हैं, बजाय इसे लूप के बाहर खोलने और बंद करने के।

लेट्रेस स्ट्रेस के करीबी चचेरे भाई हैं, बहुत उपयोगी भी हैं। जहाँ आपकी अड़चन है वहां आपको अंतर करना सीखना होगा। यदि कुल निष्पादन 8 सेकंड है, और आप सिस्टम कॉल पर केवल 0.05secs खर्च करते हैं, तो प्रोग्राम को स्ट्रेच करना आपके लिए बहुत अच्छा नहीं है, समस्या आपके कोड में है, जो आमतौर पर एक लॉजिक समस्या है, या प्रोग्राम को वास्तव में ज़रूरत है लंबे समय तक चलने के लिए।

स्ट्रेस / लेट्रेस के साथ सबसे बड़ी समस्या उनका आउटपुट पढ़ना है। यदि आपको नहीं पता कि कॉल कैसे की जाती है, या कम से कम syscalls / फ़ंक्शन के नाम हैं, तो इसका अर्थ समझना मुश्किल हो जाएगा। यह जानना कि फ़ंक्शंस क्या हैं, बहुत फायदेमंद हो सकते हैं, खासकर विभिन्न त्रुटि कोड के लिए। जबकि यह समझने के लिए एक दर्द है, वे कभी-कभी ज्ञान का एक मोती वापस करते हैं; एक बार जब मैंने ऐसी स्थिति देखी, जहां मैं इनोड से बाहर भाग गया, लेकिन खाली स्थान से बाहर नहीं हुआ, इस प्रकार सभी सामान्य उपयोगिताओं ने मुझे कोई चेतावनी नहीं दी, मैं बस एक नई फ़ाइल नहीं बना सका। स्ट्रेस के आउटपुट से त्रुटि कोड को पढ़ना मुझे सही दिशा में इंगित करता है।


4

स्ट्रेस एक ऐसा टूल है जो बताता है कि आपका एप्लिकेशन आपके ऑपरेटिंग सिस्टम के साथ कैसे इंटरैक्ट करता है।

यह आपको यह बताता है कि ओएस सिस्टम आपके एप्लिकेशन का उपयोग करता है और उन्हें किस पैरामीटर के साथ कॉल करता है।

उदाहरण के लिए, आप देखते हैं कि आपका प्रोग्राम किन फाइलों को खोलने की कोशिश करता है, और मौसम सफल हो जाता है।

आप इस टूल के साथ सभी प्रकार की समस्याओं को डीबग कर सकते हैं। उदाहरण के लिए यदि एप्लिकेशन कहता है कि वह लाइब्रेरी नहीं खोज सकता है जिसे आप जानते हैं कि आपने स्थापित किया है तो स्ट्रेस आपको बताएगा कि एप्लिकेशन उस फ़ाइल की तलाश में है।

और वह सिर्फ हिमशैल का एक सिरा है।


यह बहुत सटीक है।
प्रोस्टि

4

स्ट्रेस सीखने का एक अच्छा साधन है कि कैसे आपका प्रोग्राम विभिन्न सिस्टम कॉल करता है (कर्नेल के लिए अनुरोध) और यह भी रिपोर्ट करता है कि उस विफलता के साथ जुड़े त्रुटि मान के साथ विफल हुए हैं। सभी विफलताएं बग नहीं हैं। उदाहरण के लिए, एक कोड जो फ़ाइल की खोज करने की कोशिश कर रहा है, उसे ENOENT (ऐसी कोई फ़ाइल या निर्देशिका) त्रुटि नहीं मिल सकती है, लेकिन कोड के तर्क में यह स्वीकार्य परिदृश्य हो सकता है।

स्ट्रेस का उपयोग करने का एक अच्छा उपयोग मामला अस्थायी फ़ाइल निर्माण के दौरान दौड़ की स्थितियों को डीबग करना है। उदाहरण के लिए एक प्रोग्राम जो कुछ पूर्वनिर्धारित स्ट्रिंग के लिए प्रक्रिया आईडी (पीआईडी) को जोड़कर फाइलें बना सकता है, बहु-थ्रेडेड परिदृश्यों में समस्याओं का सामना कर सकता है। [A PID + TID (प्रोसेस आईडी + थ्रेड आईडी) या बेहतर सिस्टम कॉल जैसे mkstemp इसे ठीक करेगा]।

यह डिबगिंग क्रैश के लिए भी अच्छा है। आप पा सकते हैं strace पर इस (मेरी) लेख और डिबगिंग दुर्घटनाओं उपयोगी।


4

न्यूनतम रननीय उदाहरण

यदि कोई अवधारणा स्पष्ट नहीं है, तो एक सरल उदाहरण है जो आपने नहीं देखा है जो इसे बताता है।

इस मामले में, वह उदाहरण लिनक्स x86_64 असेंबली फ्रीस्टैंडिंग (कोई लिबास) हैलो दुनिया नहीं है:

hello.S

.text
.global _start
_start:
    /* write */
    mov $1, %rax    /* syscall number */
    mov $1, %rdi    /* stdout */
    mov $msg, %rsi  /* buffer */
    mov $len, %rdx  /* buffer len */
    syscall

    /* exit */
    mov $60, %rax   /* exit status */
    mov $0, %rdi    /* syscall number */
    syscall
msg:
    .ascii "hello\n"
len = . - msg

गिटहब ऊपर

इकट्ठा करें और चलाएं:

as -o hello.o hello.S
ld -o hello.out hello.o
./hello.out

अपेक्षित आउटपुट:

hello

अब उस उदाहरण पर स्ट्रेस का उपयोग करते हैं:

env -i ASDF=qwer strace -o strace.log -s999 -v ./hello.out arg0 arg1
cat strace.log

हम प्रयोग करते हैं:

strace.log अब इसमें शामिल हैं:

execve("./hello.out", ["./hello.out", "arg0", "arg1"], ["ASDF=qwer"]) = 0
write(1, "hello\n", 6)                  = 6
exit(0)                                 = ?
+++ exited with 0 +++

इस तरह के एक न्यूनतम उदाहरण के साथ, आउटपुट का हर एक चरित्र स्वयं स्पष्ट है:

  • execveपंक्ति: यह दिखाया गया है कि कैसे straceनिष्पादित किया जाता है hello.out, जिसमें सीएलआई तर्क और पर्यावरण शामिल हैंman execve

  • writeपंक्ति: हम लिखी गई कॉल सिस्टम को दिखाते हैं। 6स्ट्रिंग की लंबाई है "hello\n"

    = 6सिस्टम कॉल का रिटर्न मान है, जिसे दस्तावेज के रूप में man 2 writeलिखा गया बाइट्स की संख्या है।

  • exitपंक्ति: हमारे द्वारा किए गए निकास प्रणाली कॉल को दिखाता है। कार्यक्रम छोड़ने के बाद से कोई वापसी मूल्य नहीं है!

अधिक जटिल उदाहरण

स्ट्रेस का अनुप्रयोग निश्चित रूप से यह देखने के लिए है कि कौन से सिस्टम कॉल जटिल प्रोग्राम वास्तव में डिबग / आपके प्रोग्राम को ऑप्टिमाइज़ करने में मदद करते हैं।

विशेष रूप से, अधिकांश सिस्टम कॉल जो आपको लिनक्स में मुठभेड़ की संभावना रखते हैं, ग्लिबक रैपर हैं, उनमें से कई पॉसिक्स से हैं

आंतरिक रूप से, ग्लिब रैपर इनलाइन असेंबली का कम या ज्यादा उपयोग करते हैं: इनलाइन असेंबली में सिसेंटर के माध्यम से सिस्टम कॉल कैसे करें?

अगला उदाहरण जो आपको अध्ययन करना चाहिए, वह है POSIX writeहैलो दुनिया:

main.c

#define _XOPEN_SOURCE 700
#include <unistd.h>

int main(void) {
    char *msg = "hello\n";
    write(1, msg, 6);
    return 0;
}

संकलित करें और चलाएं:

gcc -std=c99 -Wall -Wextra -pedantic -o main.out main.c
./main.out

इस बार, आप देखेंगे कि mainमुख्य के लिए एक अच्छा वातावरण सेटअप करने से पहले glibc द्वारा सिस्टम कॉल का एक गुच्छा बनाया जा रहा है ।

ऐसा इसलिए है क्योंकि अब हम एक फ्रीस्टैंडिंग प्रोग्राम का उपयोग नहीं कर रहे हैं, बल्कि एक अधिक सामान्य ग्लिबक प्रोग्राम है, जो लिबास कार्यक्षमता के लिए अनुमति देता है।

फिर, हर छोर पर, strace.logशामिल हैं:

write(1, "hello\n", 6)                  = 6
exit_group(0)                           = ?
+++ exited with 0 +++

तो हम निष्कर्ष निकालते हैं कि writePOSIX फ़ंक्शन उपयोग करता है, आश्चर्य!, लिनक्स writeसिस्टम कॉल।

हम यह भी मानते हैं कि इसके बजाय return 0एक exit_groupकॉल होता है exit। हा, मैं इस बारे में नहीं जानता था! यही कारण है कि straceबहुत अच्छा है। man exit_groupफिर बताते हैं:

यह सिस्टम कॉल बाहर निकलने के बराबर है (2) सिवाय इसके कि यह न केवल कॉलिंग थ्रेड को समाप्त करता है, बल्कि कॉलिंग प्रक्रिया के थ्रेड समूह में सभी थ्रेड्स को समाप्त करता है।

और यहाँ एक और उदाहरण है जहाँ मैंने अध्ययन किया कि कौन सी प्रणाली कॉल dlopenका उपयोग करती है: /unix/226524/what-system-call-is-used-to-load-lbooks-in-linux-462710#462710

उबंटू 16.04, जीसीसी 6.4.0, लिनक्स कर्नेल 4.4.0 में परीक्षण किया गया।


2

यहां कुछ उदाहरण दिए गए हैं कि मैं वेबसाइटों में खुदाई करने के लिए स्ट्रेस का उपयोग कैसे करता हूं। आशा है कि यह उपयोगी है।

पहले बाइट के लिए समय की जाँच करें जैसे:

time php index.php > timeTrace.txt

देखें कि कितने प्रतिशत कार्य कर रहे हैं। के बहुत सारे lstatऔर fstatएक संकेत हो सकता है कि यह कैश खाली करने का समय है:

strace -s 200 -c php index.php > traceLstat.txt

आउटपुट trace.txtतो आप देख सकते हैं कि वास्तव में क्या कॉल किए जा रहे हैं।

strace -Tt -o Fulltrace.txt php index.php

यह जाँचने के लिए कि क्या किसी चीज़ को लोड .1करने .9में एक सेकंड के बीच लिया गया है:

cat Fulltrace.txt | grep "[<]0.[1-9]" > traceSlowest.txt

देखें कि कौन सी गुम हुई फाइलें या निर्देशिकाएं पकड़ी गईं strace। यह हमारे सिस्टम से जुड़े बहुत सारे सामान का उत्पादन करेगा - केवल प्रासंगिक बिट्स में ग्राहक की फाइलें शामिल हैं:

strace -vv php index.php 2>&1 | sed -n '/= -1/p' > traceFailures.txt

1

मुझे कुछ उत्तर पसंद आए, जहां यह straceजांच करता है कि आप अपने ऑपरेटिंग सिस्टम के साथ कैसे इंटरैक्ट करते हैं।

यह वही है जो हम देख सकते हैं। सिस्टम कॉल करता है। यदि आप तुलना करते हैं straceऔर ltraceअंतर अधिक स्पष्ट है।

$>strace -c cd
Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates  Videos
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0         7           read
  0.00    0.000000           0         1           write
  0.00    0.000000           0        11           close
  0.00    0.000000           0        10           fstat
  0.00    0.000000           0        17           mmap
  0.00    0.000000           0        12           mprotect
  0.00    0.000000           0         1           munmap
  0.00    0.000000           0         3           brk
  0.00    0.000000           0         2           rt_sigaction
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0         2           ioctl
  0.00    0.000000           0         8         8 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         2           getdents
  0.00    0.000000           0         2         2 statfs
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         9           openat
  0.00    0.000000           0         1           set_robust_list
  0.00    0.000000           0         1           prlimit64
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                    93        10 total

दूसरी ओर वहाँ है ltraceकि निशान कार्य करता है।

$>ltrace -c cd
Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates  Videos
% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
 15.52    0.004946         329        15 memcpy
 13.34    0.004249          94        45 __ctype_get_mb_cur_max
 12.87    0.004099        2049         2 fclose
 12.12    0.003861          83        46 strlen
 10.96    0.003491         109        32 __errno_location
 10.37    0.003303         117        28 readdir
  8.41    0.002679         133        20 strcoll
  5.62    0.001791         111        16 __overflow
  3.24    0.001032         114         9 fwrite_unlocked
  1.26    0.000400         100         4 __freading
  1.17    0.000372          41         9 getenv
  0.70    0.000222         111         2 fflush
  0.67    0.000214         107         2 __fpending
  0.64    0.000203         101         2 fileno
  0.62    0.000196         196         1 closedir
  0.43    0.000138         138         1 setlocale
  0.36    0.000114         114         1 _setjmp
  0.31    0.000098          98         1 realloc
  0.25    0.000080          80         1 bindtextdomain
  0.21    0.000068          68         1 opendir
  0.19    0.000062          62         1 strrchr
  0.18    0.000056          56         1 isatty
  0.16    0.000051          51         1 ioctl
  0.15    0.000047          47         1 getopt_long
  0.14    0.000045          45         1 textdomain
  0.13    0.000042          42         1 __cxa_atexit
------ ----------- ----------- --------- --------------------
100.00    0.031859                   244 total

हालाँकि मैंने कई बार मैनुअल जाँच की, मुझे नाम की उत्पत्ति नहीं मिली है straceलेकिन यह सिस्टम-कॉल ट्रेस है, क्योंकि यह स्पष्ट है।

कहने को तीन बड़े नोट हैं strace

नोट 1: ये दोनों कार्य straceऔर ltraceसिस्टम कॉल का उपयोग कर रहे हैं ptrace। तो ptraceसिस्टम कॉल प्रभावी रूप से कैसे straceकाम करता है।

Ptrace () सिस्टम कॉल एक ऐसा साधन प्रदान करता है जिसके द्वारा एक प्रक्रिया ("अनुरेखक") किसी अन्य प्रक्रिया ("ट्रेस") के निष्पादन का निरीक्षण और नियंत्रण कर सकती है, और ट्रेस की मेमोरी और रजिस्टरों को जांच और बदल सकती है। इसका उपयोग मुख्य रूप से ब्रेकपॉइंट डीबगिंग और सिस्टम कॉल ट्रेसिंग को लागू करने के लिए किया जाता है।

नोट 2: विभिन्न पैरामीटर हैं जिनका आप उपयोग कर सकते हैं strace, क्योंकि straceबहुत वर्बोज़ हो सकते हैं। मुझे ऐसा प्रयोग करना -cपसंद है, जो चीजों के सारांश की तरह हो। आपके आधार पर -cएक सिस्टम-कॉल का चयन कर सकते हैं जैसे -e trace=openकि आप केवल उस कॉल को देखेंगे। यह दिलचस्प हो सकता है यदि आप जांच कर रहे हैं कि कमांड के दौरान कौन सी फाइलें खोली जाएंगी। और हां, आप grepउसी उद्देश्य के लिए उपयोग कर सकते हैं लेकिन ध्यान दें कि आपको इस तरह से पुनर्निर्देशित करने की आवश्यकता है 2>&1 | grep etcकि कमांड फाइल जारी किए जाने पर कॉन्फिग फाइलों को संदर्भित किया जाता है।

नोट 3: मुझे यह बहुत महत्वपूर्ण नोट लगता है। आप एक विशिष्ट वास्तुकला तक सीमित नहीं हैं। straceआपके दिमाग को उड़ा देगा, क्योंकि यह विभिन्न आर्किटेक्चर के बायनेरिज़ पर ट्रेस कर सकता है। यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.