HP UX Web Development Tools manual Enabling different categories of diagnostic messages

Page 13

Example 2 Sample wrapper script

$ cat cadvise_cc #!/bin/sh

#

#wrapper script to invoke cadvise

exec /opt/cadvise/bin/cadvise -pdb mypdb +wlint /opt/ansic/bin/cc "$@"

Now cadvise_cc can be used instead of cc in the build line to invoke cadvise analysis in addition to the compilation process.

NOTE: You need not create separate dependency rules for cadvise in the makefiles. Cadvise must be invoked only when the existing dependency rules in the makefile lead to a compile.

The addition of cadvise analysis to the build process increases the total build time. You can either invoke cadvise automatically whenever compiled, or launch cadvise as a separate build process by invoking it explicitly. For large projects where a lot of cross-file analysis is required, it is better to separate the analysis process. You can use the -crossfileoption to manage the cross-file analysis.

2.6 Enabling different categories of diagnostic messages

By default, a limited number of diagnostic messages are enabled in cadvise.

Additionally, the following options can be used to enable various types of diagnostic messages.

+w

Enables all the warnings about potentially questionable constructs in the

 

compiler.

+wall

Enables all the compile time checks.

“+wendian” (page 51)

Detects code fragments which are endian dependent.

“+wlint” (page 45)

Provides compile-time diagnostics which detect potential errors in the source

 

code.

“+wlock” (page 53)

Detects multi-threaded programming issues.

“+wsecurity[=1234]” (page 52) Enables compile time diagnostic messages for potential security vulnerabilities.

“+w64bit ” (page 51)

Enables warnings that help detection of potential problems in converting 32-bit

 

applications to 64-bit.

“+wperfadvice[=1234]

Generates performance advisory diagnostics.

” (page 54)

 

The best method is to use +wall to enable all possible diagnostic messages. Then, use the cadvise report -pdb <pdbname> -summarycommand to see a quick summary of the various diagnostic messages generated by cadvise, sorted by severity. For more information, see Generating Reports (page 27).

2.7 Generating code complexity metrics

Cadvise can generate code complexity metrics to gauge the complexity of the code being developed or migrated. The +metrics option generates program complexity metrics.

Syntax:

$cadvise +metrics[=ict][:out=pdb]

OR

$cadvise +metrics[=ict][:out=[+]<filename>]

Following command shows the examples for generating code complexity metrics.

2.6 Enabling different categories of diagnostic messages

13

Image 13
Contents HP Code Advisor C.02.20 User Guide Page Contents Contents About this document Document conventions and symbolsIntended audience Related informationCadvise-help@lists.hp.com HP encourages your commentsCadvise user interface Features FeaturesIntroduction Cadvise user interface$ cadvise cc -c hello.c Advanced static code analysis$ cadvise -pdb ./mypdb +wlint aCC hello.cpp Supported compilersSteps in using cadvise Using CadviseSupported platforms Installing Cadvise Getting startedInvoking Cadvise For information on PDB, see Using the Program Database PDB Using Cadvise as a wrapper around Compiler or LinkerSee the following makefile content Integrating Cadvise with the makefiles and build processGenerating code complexity metrics Enabling different categories of diagnostic messagesExample 2 Sample wrapper script Objfile.metrics Example 3 Generating code complexity metricsGenerating code complexity metrics $ cat /tmp/example.c Example 4 Code complexity metrics+wcodeguide=rules-library Example 5 Writing a rule to enforce naming convention Source structure in the rules libraryUsing the Program Database PDB Specifying the PDB location PDB options tableDeleting PDB Disabling locks in PDB operationsDisplaying PDB version Creating a PDB snapshot at a specified locationExample 8 Removing object file information from the PDB Example 9 Creating a PDB snapshotUsage Using cross-file analysisCross-file analysis options Crossfile=auto Example 15 Specifying the location of object files Diagnostic configuration options table Configuring diagnostic messagesSuppressing warnings selectively Enabling warnings selectivelyDisabling warnings in a macro Interpreting selective warnings as errorsManaging warnings in a source file Report generation options table Generating reportsCadvise report report-options -pdb pdbdir Cadvise report report-options logfileGenerating file summary report Generating summary reportsGenerating detailed report $cadvise report -summary -pdb testpdb -noheaderGenerating Html report To save reports, run the following commandExample 23 Generating detailed report $ cadvise report -pdb testpdb -allFollowing example shows the command to generate XML report Printing diagnostics with specific diagnostic numbersGenerating XML report Example 24 Generating an XML reportGenerating reports based on severity Suppressing diagnostics for specific files$ cadvise report -pdb testpdb -diag Example 26 Generating reports based on severityReporting program complexity metrics Reporting diagnostics from specific files$ cadvise report -pdb test.pdb -summary -exclude inflate.c $ cadvise report -pdb test.pdb -summary -include inflate.cExample 29 Reporting program complexity metrics Generating report for a module$ cadvise report -pdb gzip.pdb +metrics -include inflate.c Suppressing report header Modifying the default severity level of a diagnosticGenerating PDB comparison report $ cadvise report -pdb test.pdb -summary -module test1$ cadvise report -pdb tmp.pdb -basepdb tmp1.pdb -all Example 34 Generating detailed diff report with the header$ cadvise report -pdb tmp.pdb -basepdb tmp1.pdb -diag Example 35 Generating diff report for any particular warning$ cadvise -pdb pdb1 cc one.c two.c $ cadvise report -pdb tmp.pdb -basepdb tmp1.pdb -severity$ cadvise report -pdb new.pdb -basepdb old.pdb -all Report options fileGenerate report for migration related warnings Example 42 Generating a report using -migration optionGenerating consolidated report from multiple PDBs Example 41 Report options fileGenerating PDB diffs with multiple PDBs Recommended process for analyzing the diagnostic messagesReport options interoperability $ cadvise report -pdb 1.pdb2.pdb3.pdb4.pdb -all$ cadvise report -pdb test.pdb -diag 2549 -exclude b.c Example 44 Reporting options interoperabilityExample 45 Ignoring the -includeoption $ cadvise report -pdb test.pdb -summary -include a.cb.cMiscellaneous driver options Example 48 Using -noabortHelp-h-H Example 47 Displaying the list of cadvise optionsFollowing command creates the file cadvdir/foo.cad Example 49 Using -nobuild optionExample 51 Using -tee option Following example shows the usage of -nobuildoptionLine generates the following messages Example 52 Using +opts filename optionCategories of diagnostics table Categories of diagnostics with examplesDetecting generic programming errors Categories of diagnostics with examples Such cases, cadvise generates the following warning Example 53 Null pointer dereference checkSuch cases, cadvise generates the following warnings Example 54 Potential memory leak checkExample 56 Out of scope access Example 55 Out of bound accessExample 57 Use of pointer after free Such cases, cadvise generates the following errorExample 58 Allocator/deallocator mismatch Detecting endianness migration issues Detecting 32-bit to 64-bit migraton issuesExample 60 Detecting 32-bit to 64-bit migraton issues Example 59 Signed bit field of lengthExample 61 Detecting endian dependent code fragments Detecting potential security vulnerabilitiesConsider the following code fragment This case, cadvise generates the following error Detecting multi-threaded programming issuesRunning cadvise generates the following error Example 63 Detecting multi-threaded programming issuesDetecting potential performance improvement opportunities Detecting potential performance improvement opportunities Fixing the warnings by source change AC++ standard conformance and compatibility changes Incompatibilities on PA-RISC based systemsIndex Symbols