यहाँ कैसे मैं यह कर समापन (अस्वीकरण: इस का एक बहुत, हैक-ish है तो आप को साफ करने के आप इसे लंबे समय तक उपयोग करने के लिए जा रहे हैं चाहते हो सकता है) है ...
अनुमान : - वर्तमान निर्देशिका में प्रश्न में सभी स्क्रिप्ट/बाइनरी शामिल हैं। - ग्राफ बनाने के लिए फ़ाइलें subdir call_graph में जाती हैं।
स्क्रिप्ट कॉल_ग्राफ/make_tgf बनाया गया।श:
#!/bin/bash
# Run from dir with scripts and subdir call_graph
# Parameters:
# $1 = sources (default is call_graph/sources.txt)
# $2 = targets (default is call_graph/targets.txt)
SOURCES=$1
if [ "$SOURCES" == "" ]; then SOURCES=call_graph/sources.txt; fi
TARGETS=$2
if [ "$TARGETS" == "" ]; then TARGETS=call_graph/targets.txt; fi
if [ ! -d call_graph ]; then echo "Run from parent dir of call_graph" >&2; exit 1; fi
(
# cat call_graph/targets.txt
for file in `cat $SOURCES `
do
for target in `grep -v -E '^ *#' $file | grep -o -F -w -f $TARGETS | grep -v -w $file | sort | uniq`
do echo $file $target
done
done
)
फिर, मैं भाग गया निम्नलिखित (मैं स्क्रिप्ट-केवल संस्करण कर को समाप्त):
cat /dev/null | tee call_graph/sources.txt > call_graph/targets.txt
for file in *
do
if [ -d "$file" ]; then continue; fi
echo $file >> call_graph/targets.txt
if file $file | grep text >/dev/null; then echo $file >> call_graph/sources.txt; fi
done
# For scripts only:
bash call_graph/make_tgf.sh call_graph/sources.txt call_graph/sources.txt > call_graph/scripts.tgf
# For scripts + binaries (binaries will be leaf nodes):
bash call_graph/make_tgf.sh > call_graph/scripts_and_bin.tgf
मैं तो yEd में जिसके परिणामस्वरूप TGF फ़ाइल खोला, और YED लेआउट करना था (लेआउट -> पदानुक्रमित)। मैं मैन्युअल रूप से जेनरेट की गई फ़ाइल से मैन्युअल रूप से संपादन योग्य फ़ाइल को अलग करने के लिए ग्राफ़्राम के रूप में सहेजा गया।
मुझे पता चला कि कुछ नोड्स थे जो ग्राफ में होने में सहायक नहीं थे, जैसे उपयोगिता स्क्रिप्ट/बाइनरी जिन्हें पूरे स्थान पर बुलाया गया था। इसलिए, मैंने इन्हें स्रोत/लक्ष्य फ़ाइलों से हटा दिया और जब तक मुझे नोड सेट पसंद नहीं आया तब तक पुन: उत्पन्न किया गया।
आशा इस मदद करता है किसी को ...
स्रोत
2015-04-29 18:17:56
Graphviz एक अच्छा दृश्य उपकरण है, लेकिन आप के लिए पहले से प्रक्रिया अपने basename'd उत्पादन किसी तरह की जरूरत है यह Graphviz को पार करने से पहले। आप अपनी स्क्रिप्ट को डीबग करने के लिए bashdb का उपयोग करने का प्रयास कर सकते हैं। – vissi
मैं नियमित रूप से इन दिनों नियमित रूप से क्या करता हूं, निर्भर करता है: प्रत्येक स्क्रिप्ट की शुरुआत में सही टिप्पणी करें। शायद किसी भी बड़े पैमाने पर बाद में विचार करने के लिए संभव नहीं है, लेकिन यह एक बहुत ही सरल सम्मेलन है जिसने मुझे अच्छी तरह से सेवा दी है। – tripleee