.. include:: replace.txt .. highlight:: bash Troubleshooting --------------- This chapter posts some information about possibly common errors in building or running |ns3| programs. Please note that the wiki (``_) may have contributed items. Build errors ************ Run-time errors *************** Sometimes, errors can occur with a program after a successful build. These are run-time errors, and can commonly occur when memory is corrupted or pointer values are unexpectedly null. Here is an example of what might occur:: $ ./waf --run tcp-point-to-point Entering directory '/home/tomh/ns-3-nsc/build' Compilation finished successfully Command ['/home/tomh/ns-3-nsc/build/debug/examples/tcp-point-to-point'] exited with code -11 The error message says that the program terminated unsuccessfully, but it is not clear from this information what might be wrong. To examine more closely, try running it under the `gdb debugger `_: .. sourcecode:: bash $ ./waf --run tcp-point-to-point --command-template="gdb %s" Entering directory '/home/tomh/ns-3-nsc/build' Compilation finished successfully GNU gdb Red Hat Linux (6.3.0.0-1.134.fc5rh) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". (gdb) run Starting program: /home/tomh/ns-3-nsc/build/debug/examples/tcp-point-to-point Reading symbols from shared object read from target memory...done. Loaded system supplied DSO at 0xf5c000 Program received signal SIGSEGV, Segmentation fault. 0x0804aa12 in main (argc=1, argv=0xbfdfefa4) at ../examples/tcp-point-to-point.cc:136 136 Ptr localSocket = socketFactory->CreateSocket (); (gdb) p localSocket $1 = {m_ptr = 0x3c5d65} (gdb) p socketFactory $2 = {m_ptr = 0x0} (gdb) quit The program is running. Exit anyway? (y or n) y Note first the way the program was invoked-- pass the command to run as an argument to the command template "gdb %s". This tells us that there was an attempt to dereference a null pointer socketFactory. Let's look around line 136 of tcp-point-to-point, as gdb suggests: .. sourcecode:: cpp Ptr socketFactory = n2->GetObject (Tcp::iid); Ptr localSocket = socketFactory->CreateSocket (); localSocket->Bind (); The culprit here is that the return value of GetObject is not being checked and may be null. Sometimes you may need to use the `valgrind memory checker `_ for more subtle errors. Again, you invoke the use of valgrind similarly:: $ ./waf --run tcp-point-to-point --command-template="valgrind %s"