{"id":3228,"date":"2019-09-05T11:08:56","date_gmt":"2019-09-05T11:08:56","guid":{"rendered":"https:\/\/tridenstechnology.com\/?p=3228"},"modified":"2022-03-01T15:10:30","modified_gmt":"2022-03-01T15:10:30","slug":"oracle-brm-politica-opcode-codigo-personalizado-de-depuracao-via-gdb","status":"publish","type":"post","link":"https:\/\/tridenstechnology.com\/pt\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/","title":{"rendered":"Depura\u00e7\u00e3o de c\u00f3digo personalizado de opcode de pol\u00edtica Oracle BRM via GDB"},"content":{"rendered":"<p>Se quisermos produzir um produto de alta qualidade da nossa <a href=\"https:\/\/tridenstechnology.com\/oracle-brm\/\">Oracle BRM<\/a> Para desenvolver software, temos de cumprir alguns requisitos relativamente ao nosso processo de desenvolvimento. \u00c9 especialmente importante incorporar boas t\u00e9cnicas de teste e depura\u00e7\u00e3o no nosso processo de desenvolvimento.<br>Os testes s\u00e3o um processo de detec\u00e7\u00e3o de falhas ou erros num produto de software que \u00e9 efectuado manualmente por um testador ou pode ser automatizado.<br><a href=\"https:\/\/en.wikipedia.org\/wiki\/Debugging\">Depura\u00e7\u00e3o<\/a> \u00e9 o processo de encontrar e resolver defeitos ou problemas num programa de computador que impedem o funcionamento correcto do software ou de um sistema. Basicamente, \u00e9 um processo de correc\u00e7\u00e3o dos erros encontrados na fase de teste. O programador ou programador \u00e9 respons\u00e1vel pela depura\u00e7\u00e3o e esta n\u00e3o pode ser automatizada.<\/p>\n\n\n\n<div class=\"wp-block-yoast-seo-table-of-contents yoast-table-of-contents\"><h2>Tabela de conte\u00fados<\/h2><ul><li><a href=\"#h-debugging-oracle-brm-policy-opcodes-custom-code\" data-level=\"2\">Depurar c\u00f3digo personalizado de opcodes de pol\u00edtica Oracle BRM<\/a><\/li><li><a href=\"#h-debugging-in-practice\" data-level=\"2\">A depura\u00e7\u00e3o na pr\u00e1tica<\/a><\/li><\/ul><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-debugging-oracle-brm-policy-opcodes-custom-code\">Depurar c\u00f3digo personalizado de opcodes de pol\u00edtica Oracle BRM<\/h2>\n\n\n\n<p>Ao personalizar os c\u00f3digos de opera\u00e7\u00e3o de pol\u00edtica em <a href=\"https:\/\/tridenstechnology.com\/oracle-brm\/\">Oracle BRM<\/a> \u00e9 frequentemente necess\u00e1rio depurar algum c\u00f3digo para encontrar potenciais erros ou analisar o comportamento do c\u00f3digo. Algumas an\u00e1lises b\u00e1sicas podem ser feitas registando algumas mensagens de depura\u00e7\u00e3o e analisando os registos, mas um m\u00e9todo muito mais avan\u00e7ado e poderoso \u00e9 utilizar uma ferramenta separada - o depurador. Neste artigo, veremos como podemos usar o depurador de c\u00f3digo aberto GDB para depurar um processo Oracle BRM cm que executa tamb\u00e9m algum c\u00f3digo personalizado (veja a figura abaixo).<\/p>\n\n\n\n<div class=\"wp-block-image dt-pswp-item\"><figure class=\"aligncenter\"><a class=\"dt-pswp-item\" href=\"https:\/\/tridenstechnology.com\/wp-content\/uploads\/2019\/09\/Debugging-Oracle-BRM-CM-GDB.png\"><img fetchpriority=\"high\" decoding=\"async\" width=\"593\" height=\"266\" src=\"https:\/\/tridenstechnology.com\/wp-content\/uploads\/2019\/09\/Debugging-Oracle-BRM-CM-GDB.png\" alt=\"Depura\u00e7\u00e3o do CM Oracle BRM com GDB\" class=\"wp-image-3230\" srcset=\"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/Debugging-Oracle-BRM-CM-GDB.png 593w, https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/Debugging-Oracle-BRM-CM-GDB-300x135.png 300w\" sizes=\"(max-width: 593px) 100vw, 593px\" \/><\/a><figcaption>Vis\u00e3o geral esquem\u00e1tica da depura\u00e7\u00e3o do CM Oracle BRM usando GDB<\/figcaption><\/figure><\/div>\n\n\n\n<p><a href=\"https:\/\/www.gnu.org\/software\/gdb\/\">GDB<\/a> \u00e9 um depurador de c\u00f3digo aberto que fornece muitas ferramentas avan\u00e7adas e poderosas para analisar e depurar o nosso c\u00f3digo. Algumas das funcionalidades b\u00e1sicas do GDB s\u00e3o os pontos de interrup\u00e7\u00e3o (condicionais\/n\u00e3o condicionais), watches, back traces e execu\u00e7\u00e3o incremental de c\u00f3digo. Claro que tamb\u00e9m pode ver e modificar valores de vari\u00e1veis e chamar v\u00e1rias fun\u00e7\u00f5es. Agora vamos ver como usamos o GDB com o processo cm na pr\u00e1tica.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-debugging-in-practice\">A depura\u00e7\u00e3o na pr\u00e1tica<\/h2>\n\n\n\n<p>Primeiro, temos de obter um PID do nosso processo CM:<\/p>\n\n\n\n<p><em>ps x<\/em><\/p>\n\n\n\n<p>Encontre o PID do processo CM e utilize-o para se ligar a esse processo com a GDB:<\/p>\n\n\n\n<p>gdb cm<\/p>\n\n\n\n<p>Agora o shell GDB \u00e9 aberto, onde podemos executar v\u00e1rios comandos que o GDB suporta. Cada nova conex\u00e3o que \u00e9 estabelecida com o CM causa a gera\u00e7\u00e3o de um novo processo CM filho do CM pai. Queremos que o GDB tamb\u00e9m rastreie esses processos filhos. Execute o seguinte comando no shell do GDB:<\/p>\n\n\n\n<p>(gdb) definir follow-fork-mode child<\/p>\n\n\n\n<p>Dependendo das suas necessidades, pode tamb\u00e9m querer explorar os comandos set detach-on-fork e attach. Agora vamos definir um ponto de interrup\u00e7\u00e3o para uma implementa\u00e7\u00e3o de c\u00f3digo de opera\u00e7\u00e3o de pol\u00edtica, como no exemplo a seguir:<\/p>\n\n\n\n<p>(gdb) break fm_act_pol_post_reauthorize.c:192<\/p>\n\n\n\n<p>Quando desencadearmos agora a execu\u00e7\u00e3o do c\u00f3digo de opera\u00e7\u00e3o da pol\u00edtica, esta ser\u00e1 interrompida por um ponto de interrup\u00e7\u00e3o (ou mesmo antes disso, notificar-nos-\u00e1 de que foi criado um novo filho). Podemos ent\u00e3o seguir o fluxo de c\u00f3digo passo a passo utilizando os comandos next (abreviatura n) ou step. Se estivermos interessados num valor de uma vari\u00e1vel, podemos imprimi-lo utilizando:<\/p>\n\n\n\n<p>imprimir<\/p>\n\n\n\n<div class=\"wp-block-image dt-pswp-item\"><figure class=\"aligncenter\"><a class=\"dt-pswp-item\" href=\"https:\/\/tridenstechnology.com\/wp-content\/uploads\/2019\/09\/Oracle-BRM-CM-process-debugging-example.png\"><img decoding=\"async\" width=\"840\" height=\"413\" src=\"https:\/\/tridenstechnology.com\/wp-content\/uploads\/2019\/09\/Oracle-BRM-CM-process-debugging-example.png\" alt=\"Exemplo de depura\u00e7\u00e3o do processo Oracle BRM CM\" class=\"wp-image-3239\" srcset=\"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/Oracle-BRM-CM-process-debugging-example.png 840w, https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/Oracle-BRM-CM-process-debugging-example-300x148.png 300w, https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/Oracle-BRM-CM-process-debugging-example-768x378.png 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/a><figcaption>Exemplo de utiliza\u00e7\u00e3o da GDB para depurar o processo CM Oracle BRM<\/figcaption><\/figure><\/div>\n\n\n\n<p>Muitas outras caracter\u00edsticas mais avan\u00e7adas e poderosas est\u00e3o tamb\u00e9m \u00e0 nossa disposi\u00e7\u00e3o e s\u00e3o descritas em pormenor na documenta\u00e7\u00e3o da GDB e na ajuda integrada. Est\u00e1 convidado a pesquis\u00e1-las para ver como o podem ajudar.<\/p>","protected":false},"excerpt":{"rendered":"<p>If we want to produce a high-quality of our Oracle BRM software, we must meet some requirements regarding our development process. It is especially important to incorporate good testing and debugging techniques in our development process.Testing is a process of finding bugs or errors in a software product that is done manually by a tester&hellip;<\/p>","protected":false},"author":1,"featured_media":3165,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-3228","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle-billing","category-38","description-off"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.4 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Oracle BRM Policy Opcode Custom Code Debugging via GDB<\/title>\n<meta name=\"description\" content=\"An article about debugging Oracle Billing and Revenue Management (Oracle BRM) policy opcodes custom code using external debugger GDB.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tridenstechnology.com\/pt\/oracle-brm-politica-opcode-codigo-personalizado-de-depuracao-via-gdb\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle BRM Policy Opcode Custom Code Debugging via GDB\" \/>\n<meta property=\"og:description\" content=\"An article about debugging Oracle Billing and Revenue Management (Oracle BRM) policy opcodes custom code using external debugger GDB.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tridenstechnology.com\/pt\/oracle-brm-politica-opcode-codigo-personalizado-de-depuracao-via-gdb\/\" \/>\n<meta property=\"og:site_name\" content=\"Tridens\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/tridenstechnology\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-05T11:08:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-01T15:10:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1734\" \/>\n\t<meta property=\"og:image:height\" content=\"1156\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ale\u0161\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TridensTech\" \/>\n<meta name=\"twitter:site\" content=\"@TridensTech\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ale\u0161\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Depura\u00e7\u00e3o de c\u00f3digo personalizado de opcode de pol\u00edtica Oracle BRM via GDB","description":"Um artigo sobre a depura\u00e7\u00e3o do c\u00f3digo personalizado de opcodes de pol\u00edtica do Oracle Billing and Revenue Management (Oracle BRM) usando o depurador externo GDB.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tridenstechnology.com\/pt\/oracle-brm-politica-opcode-codigo-personalizado-de-depuracao-via-gdb\/","og_locale":"pt_PT","og_type":"article","og_title":"Oracle BRM Policy Opcode Custom Code Debugging via GDB","og_description":"An article about debugging Oracle Billing and Revenue Management (Oracle BRM) policy opcodes custom code using external debugger GDB.","og_url":"https:\/\/tridenstechnology.com\/pt\/oracle-brm-politica-opcode-codigo-personalizado-de-depuracao-via-gdb\/","og_site_name":"Tridens","article_publisher":"https:\/\/www.facebook.com\/tridenstechnology","article_published_time":"2019-09-05T11:08:56+00:00","article_modified_time":"2022-03-01T15:10:30+00:00","og_image":[{"width":1734,"height":1156,"url":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png","type":"image\/png"}],"author":"Ale\u0161","twitter_card":"summary_large_image","twitter_creator":"@TridensTech","twitter_site":"@TridensTech","twitter_misc":{"Escrito por":"Ale\u0161","Tempo estimado de leitura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#article","isPartOf":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/"},"author":{"name":"Ale\u0161","@id":"https:\/\/tridenstechnology.com\/#\/schema\/person\/ccd247e07a5e0f856ec13af63d611358"},"headline":"Oracle BRM Policy Opcode Custom Code Debugging via GDB","datePublished":"2019-09-05T11:08:56+00:00","dateModified":"2022-03-01T15:10:30+00:00","mainEntityOfPage":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/"},"wordCount":515,"commentCount":0,"publisher":{"@id":"https:\/\/tridenstechnology.com\/#organization"},"image":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#primaryimage"},"thumbnailUrl":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png","articleSection":["Oracle Billing"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#respond"]}],"accessibilityFeature":["tableOfContents"]},{"@type":"WebPage","@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/","url":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/","name":"Depura\u00e7\u00e3o de c\u00f3digo personalizado de opcode de pol\u00edtica Oracle BRM via GDB","isPartOf":{"@id":"https:\/\/tridenstechnology.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#primaryimage"},"image":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#primaryimage"},"thumbnailUrl":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png","datePublished":"2019-09-05T11:08:56+00:00","dateModified":"2022-03-01T15:10:30+00:00","description":"Um artigo sobre a depura\u00e7\u00e3o do c\u00f3digo personalizado de opcodes de pol\u00edtica do Oracle Billing and Revenue Management (Oracle BRM) usando o depurador externo GDB.","breadcrumb":{"@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#primaryimage","url":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png","contentUrl":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/08\/Oracle-BRM.png","width":1734,"height":1156,"caption":"Oracle BRM - Billing and Revenue Management"},{"@type":"BreadcrumbList","@id":"https:\/\/tridenstechnology.com\/oracle-brm-policy-opcode-custom-code-debugging-via-gdb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/tridenstechnology.com\/"},{"@type":"ListItem","position":2,"name":"Oracle BRM Policy Opcode Custom Code Debugging via GDB"}]},{"@type":"WebSite","@id":"https:\/\/tridenstechnology.com\/#website","url":"https:\/\/tridenstechnology.com\/","name":"Tridens","description":"Monetiza\u00e7\u00e3o, fatura\u00e7\u00e3o e carregamento de ve\u00edculos el\u00e9ctricos","publisher":{"@id":"https:\/\/tridenstechnology.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tridenstechnology.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/tridenstechnology.com\/#organization","name":"Tridens","url":"https:\/\/tridenstechnology.com\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/tridenstechnology.com\/#\/schema\/logo\/image\/","url":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/02\/tridens_logo_invert.png","contentUrl":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/02\/tridens_logo_invert.png","width":600,"height":191,"caption":"Tridens"},"image":{"@id":"https:\/\/tridenstechnology.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/tridenstechnology","https:\/\/x.com\/TridensTech","https:\/\/www.instagram.com\/tridenstechnology\/","https:\/\/www.linkedin.com\/company\/tridens","https:\/\/www.youtube.com\/user\/TridensIT"]},{"@type":"Person","@id":"https:\/\/tridenstechnology.com\/#\/schema\/person\/ccd247e07a5e0f856ec13af63d611358","name":"Ale\u0161","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/secure.gravatar.com\/avatar\/0df040b8c52446051022ab32cd2ac1dc64d3c7eed18d5bd5ab9f2992b8935fc8?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0df040b8c52446051022ab32cd2ac1dc64d3c7eed18d5bd5ab9f2992b8935fc8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0df040b8c52446051022ab32cd2ac1dc64d3c7eed18d5bd5ab9f2992b8935fc8?s=96&d=mm&r=g","caption":"Ale\u0161"},"description":"Ales Pristovnik \u00e9 o CEO da Tridens Technology, uma empresa eslovena especializada no desenvolvimento de solu\u00e7\u00f5es de software para a ind\u00fastria autom\u00f3vel. Ele tem uma longa hist\u00f3ria na ind\u00fastria de TI, tendo trabalhado para v\u00e1rias grandes empresas no passado. Ele tem uma paix\u00e3o pela tecnologia e inova\u00e7\u00e3o, e o seu foco actual \u00e9 o desenvolvimento de solu\u00e7\u00f5es que ir\u00e3o melhorar a seguran\u00e7a e efici\u00eancia da ind\u00fastria autom\u00f3vel. Ele tem um forte background em lideran\u00e7a e gest\u00e3o, e est\u00e1 empenhado em impulsionar a sua empresa no sector da tecnologia em constante evolu\u00e7\u00e3o.","url":"https:\/\/tridenstechnology.com\/pt\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/posts\/3228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/comments?post=3228"}],"version-history":[{"count":0,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/posts\/3228\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/media\/3165"}],"wp:attachment":[{"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/media?parent=3228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/categories?post=3228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tridenstechnology.com\/pt\/wp-json\/wp\/v2\/tags?post=3228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}