Debugging cum strace software deployment

Debugging cum strace software deployment

Dies mei officium instruere maxime software, quod significat multum temporis consumere conatur ad interrogata respondere quasi:

  • Nam id elit sed mi pretium luctus. Quare?
  • Hic interretiarius hic pro me laboravit, sed hodie non facit. Quare?

Hoc genus est debugging quod paulum differt a programmate regulari debugging. Regularis debugging circa logicam codicis est, sed debugging instruere est de commercio codicis ac ambitu. Etiamsi radix quaestionis error logicus est, omnia opera in una machina et non in alia significat quaestionem quodam modo in ambitu esse.

Ita pro solito instrumentorum debugging ut gdb Instrumentorum instrumentorum ad debugging instruere alium statutum habeo. Et instrumentum meum ventus tractandi cum problemate simile "Cur hoc opus programmatio mihi?" vocavit Strace.

Quid est strace?

Strace est instrumentum ad "ratio vocationis typum". Pro Linux condita est, sed eadem debugging praestigiae fieri possunt cum instrumentis ad alias systemata (dtrace aut ktrace).

Praecipua applicationis valde simplex est. Vos iustus postulo ut cum quovis imperio discurram et omnia systema vocat effundet (quamvis primum te ipsum instituere verisimiliter debebis. Strace):

$ strace echo Hello
...Snip lots of stuff...
write(1, "Hellon", 6)                  = 6
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Quid haec ratio vocat? Hoc simile est API nucleo operandi. Olim software accessum directum habuit ad ferramenta quae incurrit. Si, exempli gratia, opus est ut aliquid in velo exhibeat, cum portubus vel tabulariis memoriae provisis pro machinis videndis illudit. Cum multitasking systemata computatralia popularia facta sunt, chaos variis applicationibus super ferramentis dimicatum est. Errores in una applicatione alios deducere potuerunt, nisi integra ratio. Tunc modi privilegium (vel "anulum praesidium") in CPU apparuit. nucleus praestantissimus factus est: plenum accessum ad ferramenta accepit, quae minus privilegiata fovit, quae iam accessum a nucleo petendi erat, ut cum ferramentis per systema vocat penitus.

In gradu binario, ratio vocationis paulo diversa est a simplici vocatione functionis, sed plures programmata involucro in bibliotheca vexillum utuntur. Illae. POSIX C vexillum bibliotheca ad munus vocationem contineat (n), quod totum codicem architecturae specialium pro vocatione systematis continet scribo.

Debugging cum strace software deployment

In summa, quaelibet commercium inter applicationem et eius ambitum (ratio computatorii) exercetur per vocat systema. Cum ergo luctus in una machina sed non in alia operatur, bonum est spectare ad rationem vocationis vestigationis proventuum. Specialius hic est index punctorum typicorum quae exponere possunt per vestigium vocationis systematis;

  • Consolamini I / O *
  • Network I/O
  • File systema accessum ac lima I / O
  • Administrandi vita processus filo
  • Humili gradu memoria administratione
  • Aditus ad specifica coegi fabrica

Ubi uti strace?

In theoria Strace usus est cum aliqua programmata in spatio usoris, quia programmata in spatio usoris facere debent ratio vocat. Efficacius laborat cum programmatibus compilatis, demissis planis, sed etiam altas linguas sicut Python facit, si per tumultum additicium e runtime et interprete secare potes.

In omni gloria sua Strace se manifestat in debugging programmatum quae in una machina bene operatur, sed subito in alia laborat, vagos producens nuntios circa tabulas, permissiones, vel infaustos conatus ad aliqua mandata exequenda vel aliquid aliud... Misericordia est, sed non summus gradus problems ut libellum verificationem errorum ita miscere. Plerumque id requirit compositum Stracenumquam ltrace et altius instrumenta (sicut order versus instrumentum openssl ut libellum debug).

Utemur in exemplo a standalone servo, sed ratio vocationis typum saepe fieri potest in suggestis magis implicatis instruere. Vos iustus postulo ut instrumenta ius eligendi.

Simple debugging exemplum

Dicamus te velle foo applicationis mirabilem server currere, et hoc est quod tandem cum:

$ foo
Error opening configuration file: No such file or directory

Videtur quod lima configurationem quam scripsisti invenire non potuit. Hoc accidit quod interdum cum administratores sarcinae applicationem componunt, sperata loca fasciculi vincunt. Et si ducem institutionem pro una distributione sequeris, in alia tabulas omnino diversas invenias unde expectas. Problema duobus secundis solvi potest si nuntius errorum nuntiavit ubi limam configurationis quaerere, sed non. Ubi igitur quaeram?

Si ad fontem codicis accessum habes, legere potes et omnia experiri. Bonum tergum consilium, sed non celerrime solutio. Vos can vigilandum est ad GRADATUS debugger sicut gdb et vide quid programma agit, sed multo efficacius est uti instrumento, quod proprie designatur ad commercium cum ambitu exhibendum; Strace.

conclusio, Strace redundans videri potest, sed evangelium quod maxime potest tuto ignorari. Saepe utile est -o operante uti ad eventus vestigii conservandos in separato documento:

$ strace -o /tmp/trace foo
Error opening configuration file: No such file or directory
$ cat /tmp/trace
execve("foo", ["foo"], 0x7ffce98dc010 /* 16 vars */) = 0
brk(NULL)                               = 0x56363b3fb000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=25186, ...}) = 0
mmap(NULL, 25186, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f2f12cf1000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "177ELF2113 3 > 1 260A2 "..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1824496, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2f12cef000
mmap(NULL, 1837056, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2f12b2e000
mprotect(0x7f2f12b50000, 1658880, PROT_NONE) = 0
mmap(0x7f2f12b50000, 1343488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f2f12b50000
mmap(0x7f2f12c98000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16a000) = 0x7f2f12c98000
mmap(0x7f2f12ce5000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b6000) = 0x7f2f12ce5000
mmap(0x7f2f12ceb000, 14336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f2f12ceb000
close(3)                                = 0
arch_prctl(ARCH_SET_FS, 0x7f2f12cf0500) = 0
mprotect(0x7f2f12ce5000, 16384, PROT_READ) = 0
mprotect(0x56363b08b000, 4096, PROT_READ) = 0
mprotect(0x7f2f12d1f000, 4096, PROT_READ) = 0
munmap(0x7f2f12cf1000, 25186)           = 0
openat(AT_FDCWD, "/etc/foo/config.json", O_RDONLY) = -1 ENOENT (No such file or directory)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
brk(NULL)                               = 0x56363b3fb000
brk(0x56363b41c000)                     = 0x56363b41c000
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x8), ...}) = 0
write(3, "Error opening configuration file"..., 60) = 60
close(3)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

Proxime totam primam paginam output Strace - Solet haec praeparatio humili gradu ad launch. (Sortem vocat mmap, mprotect, BRK pro rebus quasi memoriam humilem detectam et bibliothecas dynamicas ostendens.) Actu, in debugging output Strace Ex summo legere melius est. Erit provocatio infra scriboqui erroris nuntium prae se fert. Spectamus supra et videmus primam vocationem erroneam - vocationem openat, , ENOENT ( "file vel Directory non inveni") conatur aperire /etc/foo/config.json. Hoc est, ubi lima configuration debet.

Hoc tantum exemplum erat, sed dicerem 90% temporis quo utar Stracenihil est multo difficilius hoc facere. Infra completum gradatim debugging dux est:

  • Adepto perturbatus propter vagum nuntium de systema-y errorem ex progressio
  • Progressio cum sileo Strace
  • Reperio errorem nuntius in vestigio proventuum
  • Ad altiorem usque ad primam defecit ratio vocationis ledo

Verisimile est quod ratio vocationis gradatim 4 ostendet quod erravit.

innuit

Priusquam tibi ostendam exemplum debugging multiplicioris, paucas tibi monstrabo usus efficax Strace:

est amicus tuus

In multis systematibus nix, vocatis ad nucleum integrum indicem systematis currendo obtineri potest homo syscalls. Videbis omnia sicut brk(2), quod significat plus informationes obtineri potest cursus homo 2 brk.

Sarculum parvum; homo 2 furca ostendit mihi paginam testam furca () в GNU libcquod evenit, fit vocando clone (). vocationem semantics furca manet eadem, si scribis programmata furca ()et vestigium currunt - Ego nullam invenio vocat furcapro illis erit clone (). Tales rastri tantum te confundunt, si principium cum output comparare incipis Strace.

Utere -o servare output ad lima

Strace amplum output generare potest, ideo saepe utile est proventus vestigii in singulis fasciculis (ut in exemplo supra). Hoc quoque adiuvat ne programmata confundat cum output Strace in console.

Utere -s ut plus argumenti notitia

Animadvertere licet secundum medium erroris nuntium non in exemplo supra vestigationis demonstrari. Est quod Strace default ostendit primum 32 bytes chordae argumenti. Si vis videre plura, adde aliquid simile Sed placerat scelerisque 128 ad vocationem Strace.

-y faciliorem reddit limam, bases, etc.

"Omnes fasciculi" significat quod systemata nix omnia I/O descriptores fasciculi utentes faciunt, sive quae ad limam vel reticulum vel ad fistulas pertinent. Hoc programmandi commodum est, sed difficile efficit vestigia eorum quae re vera fiunt cum commune videris read и scribo in systematis vocationis vestigium consequitur.

Per addendo operator yTu coges Strace singulas fasciculi descriptos in output annotate cum notula quid demonstrat.

Affigere iam currentem ad processum cum -p **

Ut ab exemplo infra videbis, interdum programma iam currentem investigare debes. Si scitur quod currit ut processus 1337 (de output dico). ps) hoc indagare potes:

$ strace -p 1337
...system call trace output...

Eget iure radix.

Uti -f ad monitor pueri processuum

Strace Per defaltam, unum tantum processum reducitur. Si processus iste processus parit puer, tunc ratio vocationis ad processum pariendi puer videri potest, sed processus ratio vocationis infantis manifestari non potest.

Si error in puero processus putatis, utere enuntiatione -fhoc efficiet eius typum. Ad hoc downside est quod output magis te confundet. cum Strace unum processum vel unum filum vestigia demonstrat unum torrens eventus. Cum plures simul processus detegat, initium vocationis interruptae per nuntium videre licet deinde - fasciculum vocat ad alios ramos executiones, et tunc demum - finis prioris <…foocall resumitur>. Aut eventus omnia vestigia in varias tabulas divide, operator etiam utens -ff* (Singula in ducibus on Strace).

Filter vestigia usura -e *

Ut vides, vestigii effectus est verus acervus omnium possibilium ratio vocatorum. Flag -e Vestigium spargere potes (see ducis on Strace). Praecipua utilitas est quod celerius est vestigium percolatum currere quam plenum vestigium facere grep`at. Ut sis honestus, fere semper non curo.

Non omnes errores malos

Simplex et commune exemplum est programma quaerens in pluribus locis simul limam, sicut concha quaerens directorium quod documentum exsecutabile continet;

$ strace sh -c uname
...
stat("/home/user/bin/uname", 0x7ffceb817820) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/uname", 0x7ffceb817820) = -1 ENOENT (No such file or directory)
stat("/usr/bin/uname", {st_mode=S_IFREG|0755, st_size=39584, ...}) = 0
...

Heuristici sicut "postrema petitio defecit antequam errorem nuntiaret" boni sunt ut errores ad inveniendum pertinentes. Sit ut utcumque, logicum est ab ipso fine incipere.

C programmandi tutorials systema intelligere potes adiuva vocat.

Latin vocat ad c bibliothecas non ratio vocat, sed solum tenue stratum superficiem. Si igitur parum intelligas quomodo et quid in C agas, facilius es intelligas eventus rationis vestigium vocare. Exempli gratia, debugging molestiam tibi vocat ad systemata retis, eandem classicam specta Bija Libri Network Programming.

Complicatior debugging exemplum

Iam dixi exemplum simplicium debugging esse exemplum eorum quod maxime mihi agendum est cum operando Strace. Aliquando tamen vera inquisitio requiritur, ut hic exemplum verae vitae provectioris debugging.

beron - negotium processus scheduler, alia exsecutio daemonis *nix cron. In calculonis instituitur, sed cum quis cedulam recensere conatur, hoc evenit;

# crontab -e -u logs
bcrontab: Fatal: Could not create temporary file

Bene, quod significat beron certa tabella scribere conatus est, sed non elaboravit, et cur non admisit. discooperiens Strace:

# strace -o /tmp/trace crontab -e -u logs
bcrontab: Fatal: Could not create temporary file
# cat /tmp/trace
...
openat(AT_FDCWD, "bcrontab.14779.1573691864.847933", O_RDONLY) = 3
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82049b4000
read(3, "#Ansible: logsaggn20 14 * * * lo"..., 8192) = 150
read(3, "", 8192)                       = 0
munmap(0x7f82049b4000, 8192)            = 0
close(3)                                = 0
socket(AF_UNIX, SOCK_STREAM, 0)         = 3
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/bcron-spool"}, 110) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82049b4000
write(3, "156:Slogs #Ansible: logsaggn20 1"..., 161) = 161
read(3, "32:ZCould not create temporary f"..., 8192) = 36
munmap(0x7f82049b4000, 8192)            = 0
close(3)                                = 0
write(2, "bcrontab: Fatal: Could not creat"..., 49) = 49
unlink("bcrontab.14779.1573691864.847933") = 0
exit_group(111)                         = ?
+++ exited with 111 +++

Est error nuntius circa ipsum finem scribosed tempus aliud est. Primum, nulla pertinet ratio vocationis erroris, quod ante hoc fieri solet. Secundo patet quod alicubi aliquis erroris nuntius iam legitur. Veram quaestionem alibi spectat, ac berontab solum nuntium ludit.

Si intueri homo II legere, videre potes primum argumentum (3) lima descriptor, quo *nix utitur omnibus I/O processus. Quomodo invenio quid fasciculus descriptorem 3 repraesentat? In casu particulari, currere potes Strace cum operator y (vide supra) et statim tibi indicabit, sed ad instar materias huiusmodi, utile est scire quomodo legere et parse vestigium consequitur.

Fons tabellae descriptor unus plurium rationum esse potest (totum ex eo quod descriptor est - consolatorium, nervus retis, tabella ipsa, vel quid aliud), sed esto forte, quaerimus. vocat reddendo 3 (i.e. .e. expectamus 3" in vestigatione results). In hoc evento multae sunt 2 earum; openat summo et ostium tabernaculi In medio. openat opens tabella sed prope(3) deinde ostendet quod iterum claudit. (Rake: fasciculi descriptores reddi possunt cum aperiuntur et clauduntur). Vocatio ostium tabernaculi () idoneus quod est ultimum prius legere()et evenit ut bcrontab aliquid per nervum operetur. Proxima linea ostendit tabellam descriptor consociata cum unix domain ostium tabernaculi per viam /var/run/beron-spool.

Itaque necesse est invenire processum consociata cum unix ostium tabernaculi in altera parte erunt. Duo sunt ad hoc strophae concinnae, quarum utraque utilia sunt ad debugging servo instruere. Primum est utendum netstat aut recentior ss (socket status). Uterque imperata monstrant nexus retis activos systematis et accipe enuntiationem -l describere bases audiendas, tum operator -p ut proponere programmata nervum clienti connexa sint. (Plura sunt bene utilia, sed haec duo ad hoc opus sufficiunt).

# ss -pl | grep /var/run/bcron-spool
u_str LISTEN 0   128   /var/run/bcron-spool 1466637   * 0   users:(("unixserver",pid=20629,fd=3))

Hoc innuit auditorem esse mandatum inixservercum processu ID 20629. (Et coincidenter utitur fasciculo descriptorum 3 ut nervus).

Alterum instrumentum vere utile ad easdem informationes inveniendas appellatur lsof *. Omnia documenta aperta (vel descriptores fasciculi) in systematis enumerat. Vel informationes circa unum certum documentum cognoscere potes:

# lsof /var/run/bcron-spool
COMMAND   PID   USER  FD  TYPE  DEVICE              SIZE/OFF  NODE    NAME
unixserve 20629 cron  3u  unix  0x000000005ac4bd83  0t0       1466637 /var/run/bcron-spool type=STREAM

Processus (CCVI)CCXXIX longaevus servo est, ut eam adiungas Strace per aliquid simile strace -o /tmp/trace -p 20629. Si cron in alio termino edito, vestigium erroris output recipies. Et hic est effectus;

accept(3, NULL, NULL)                   = 4
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21181
close(4)                                = 0
accept(3, NULL, NULL)                   = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=21181, si_uid=998, si_status=0, si_utime=0, si_stime=0} ---
wait4(0, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG|WSTOPPED, NULL) = 21181
wait4(0, 0x7ffe6bc36764, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
rt_sigaction(SIGCHLD, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, 8) = 0
rt_sigreturn({mask=[]})                 = 43
accept(3, NULL, NULL)                   = 4
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21200
close(4)                                = 0
accept(3, NULL, NULL)                   = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=21200, si_uid=998, si_status=111, si_utime=0, si_stime=0} ---
wait4(0, [{WIFEXITED(s) && WEXITSTATUS(s) == 111}], WNOHANG|WSTOPPED, NULL) = 21200
wait4(0, 0x7ffe6bc36764, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
rt_sigaction(SIGCHLD, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, 8) = 0
rt_sigreturn({mask=[]})                 = 43
accept(3, NULL, NULL

(Last suscipere () non complebitur cum repetens.) Iterum, proh dolor, hic eventus errorem quem quaerimus non continet. Nullas epistulas videmus quas bcrontag emittit vel e nervum accipit. Instead, completa processus imperium (cDNA clone:, wait4, SIGCHLD etc.) Processus iste proles parit processus, qui, ut coniicere possis, verum opus facit. Et si vestigia eius capere debes, vocationi adde strace -f *. Hoc est quod invenimus cum nuntium erroris in novo eventu cum strace quaerimus -f -o /tmp/trace -p 20629:

21470 openat(AT_FDCWD, "tmp/spool.21470.1573692319.854640", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied) 
21470 write(1, "32:ZCould not create temporary f"..., 36) = 36
21470 write(2, "bcron-spool[21470]: Fatal: logs:"..., 84) = 84
21470 unlink("tmp/spool.21470.1573692319.854640") = -1 ENOENT (No such file or directory)
21470 exit_group(111)                   = ?
21470 +++ exited with 111 +++

Id autem aliquid. Processus 21470 accipit "aditum negavit" errorem cum limam in semita creare conatur tmp/spool.21470.1573692319.854640 (Quae ad presul hodiernam operationem). Si recentem directorium operantes modo cognovimus, etiam plenam viam cognosceremus et indicare possemus cur processus limam temporalem in eo creare non possit. Infeliciter, processus iam exiit, sic uti non potes lsof -p 21470 ut hodiernam directorium invenias, sed in contrariam partem operari potes - quaere PID 21470 systema vocat quae indicem mutant. (si nullae sunt, PID 21470) eos a parente hereditarit et hoc iam per lsof -p * non adinvenit.) Haec ratio vocatio est chdir (quod facile est explorare ope machinarum recentiorum inquisitionum). Hic effectus est inquisitionum adversarum secundum vestigium consequentium, usque ad servo PID 20629:

20629 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21470
...
21470 execve("/usr/sbin/bcron-spool", ["bcron-spool"], 0x55d2460807e0 /* 27 vars */) = 0
...
21470 chdir("/var/spool/cron")          = 0
...
21470 openat(AT_FDCWD, "tmp/spool.21470.1573692319.854640", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied) 
21470 write(1, "32:ZCould not create temporary f"..., 36) = 36
21470 write(2, "bcron-spool[21470]: Fatal: logs:"..., 84) = 84
21470 unlink("tmp/spool.21470.1573692319.854640") = -1 ENOENT (No such file or directory)
21470 exit_group(111)                   = ?
21470 +++ exited with 111 +++

(Si tu es perditus, fortasse vis legere meam priorem post De * nix administratione processus et conchas.) Servus igitur PID 20629 licentiam non accepit ut fasciculum crearet in via /var/spool/cron/tmp/spool.21470.1573692319.854640. Verisimile est ratio limae systematis permissionis occasus classicorum. Sit scriptor reprehendo:

# ls -ld /var/spool/cron/tmp/
drwxr-xr-x 2 root root 4096 Nov  6 05:33 /var/spool/cron/tmp/
# ps u -p 20629
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
cron     20629  0.0  0.0   2276   752 ?        Ss   Nov14   0:00 unixserver -U /var/run/bcron-spool -- bcron-spool

Ubi canis sepultus est! Servo ut cron usoris decurrit, sed radix tantum licentiam scribendi indicem habet /var/spool/cron/tmp/. Simple imperium chown cron / var/spool/cron/tmp/ et opprimere beron recte operari. (Si id non erat problema, proximum verisimillimum suspicari est nucleum securitatis moduli instar SELinux vel AppArmor, ita mallem nucleum nuntium cum stipes dmesg.)

in summa

Systema vocationis vestigia inceptoris obruere possunt, sed spero mihi demonstrasse promptum esse viam ad debugo totum genus problematum communium instruere. Finge conatur debug multiprocess beronusus GRADATUS debugger.

Vestigium parsing posteriorem consequitur per systema quod vocant catenam peritiam requirit, sed, ut dixi, fere semper utens Strace, vestigium consequaris tantum et quaere errores a fine incipiens. Usquam, Strace adiuvat me nisi multum temporis in debugging. Spero etiam tibi fore utilem.

Source: www.habr.com

Add a comment